新しい回答:疑似要素を使用して支援する
あなたのコメントに基づいて、ここにあなたの欲望を満たすと私が信じる新しいフィドルがあります。それは私がラベルを付けた余分なdivラッピングと次のcssを追加します:.columns.scroller
html {
height: 100%;
}
body {
margin: 0;
padding: 0;
height: 100%;
}
.main {
background: yellow;
overflow: hidden;
width: 100%;
height: 100%;
position: relative;
}
.main:after {
content: '';
position: absolute;
top: 0;
right: 0;
left: 0;
height: 120px; /* match columns */
background: red;
z-index: 0;
}
.scroller {
overflow-y: hidden;
overflow-x: auto;
height: 100%;
position: relative;
z-index: 1;
}
.columns {
-webkit-column-fill: auto;
-webkit-column-width: 300px;
-webkit-column-gap: 40px;
-moz-column-fill: auto;
-moz-column-width: 300px;
-moz-column-gap: 40px;
height: 120px;
padding: 0 20px;
text-align: justify;
width: auto;
}
.columns > p:last-of-type:after {
content: '';
display: block;
width: 20px;
height: 1px;
float: right;
margin-right: -20px;
margin-top: -1px;
}
で疑似要素を使用して、それらに設定する明示的な高さに設定する.main背景を.columns指定します。次に、最後に別の疑似要素を使用してp、列の最後の20pxを強制的にレンダリングします。どれだけ長く、どの部分を占めるかに関係なく機能するはずです。また、テキストの列の最後にある場合は、新しい列を生成height: 1pxしmargin-top: -1pxないはずです。
元の回答:オーバーフローを移動して正しいマージンを設定する
をbackground転送するには、CSSを変更する必要があります。
.main {
overflow: hidden;
width: 100%;
}
.columns {
overflow-x: auto;
}
これは、元のコードの水平スクロールバーを制御しているの幅.columnによって背景が制限されているためと思われます。純粋に非表示にしてからオンに設定すると、スクロールがdivによって制御され、表示できるようになります。100%.main.mainoverflow-x: auto.columns.columnsbackground
右端にパディングがないことを修正するために、私が思いついた唯一の考えは、以下を追加することでした。
.columns > p:last-of-type {
margin-right: 20px;
}
pこれにより、直接の子の最後の要素に右マージンが設定され、その要素から、.columnsあなたが求めていると思われる外観が得られます。
これが変更されたフィドルです(Firefoxでのみテストされています)。