2017-01-03 11 views
-1

position:relativeのプロパティを持つ最後の子にトップオフセットプロパティを適用すると、親がスクロールバーを生成するのはなぜですか?スクロールバーを生成する親の固定高さはありません。親は位置指定された子でスクロールバーを生成します

https://jsfiddle.net/gn3svh1w/

HTML

<div class="wrap"> 
    <div class="child one"></div> 
    <div class="child two"></div> 
    <div class="child three"></div> 
</div> 

CSS

.wrap { 
    width: 30%; 
    min-height: auto; 
    background: slategrey; 
    overflow: auto; 
} 

.child { 
    width: 100px; 
    height: 100px; 
    background: tomato; 
    margin: 1rem; 
} 

.three { 
    position: relative; 
    top: 40px; 
} 
+0

'overflow:auto'を' .wrap'のスタイルから削除します。このプロパティにより、スクロールが表示されます。 –

+2

相対位置は、要素を親のラッパーの高さから外しています(3つの要素の高さによって定義されます)。スクロールバーを防ぐため、 'top:40px'を' margin-top:40px'に変更し、すべてのスペーシングを通常のフローに保ちます。 –

答えて

0

overflow: autoも貢献しています。あなたはそれを取る場合(overflow: visibleは通常私が思うのはデフォルトですか?)、赤色のボックスが親コンテナの下端の外に出てきます。

overflow: autoを追加すると、親がブラウザーに高さを決定させるように指示します - FFと他のデスクトップではスクロールバーがレンダリングされます。

参照https://developer.mozilla.org/en-US/docs/Web/CSS/overflow詳細

0

のための基本的にこれは、ブラウザは高さを決定する方法の問題です。 3つの内側divはすべて100pxの高さと1remのマージンを持ちます。これは、.wrap divの高さを提供します。

これで、一番上の位置を.threeに設定すると、内側のdivで計算された高さは変更されません。単にdivを動かすだけで、.wrapのスクロールバーが表示されます。

関連する問題