この画像 を見るとわかるように、緑のdiv
の中にオレンジ色のdiv
があり、上部に境界線がありません。オレンジdiv
には30px
上部マージンですが、グリーンdiv
も押し下げています。もちろん、上部の境界線を追加すると問題が解決しますが、緑のdiv
を上部の境界線なしにする必要があります。私は何ができますか?
.body {
border: 1px solid black;
border-top: none;
border-bottom: none;
width: 120px;
height: 112px;
background-color: lightgreen;
}
.body .container {
background-color: orange;
height: 50px;
width: 50%;
margin-top: 30px;
}
<div class="header">Top</div>
<div class="body">
<div class="container">Box</div>
</div>
<div class="foot">Bottom</div>
ありがとう
あなたはoverflow:auto
〜.body
は、マージンの縮小を防ぎます。 http://www.w3.org/TR/CSS2/box.html#collapsing-margins を参照してください
あなたが経験するのはマージンの崩壊です。マージンは要素の周囲の領域を指定するのではなく、要素間の最小距離を指定します。
緑のコンテナにはボーダーやパディングがないため、オレンジ色の要素のマージンを含めるものはありません。緑のコンテナにマージンがある場合と同様に、上部の要素とオレンジ色の要素の間にマージンが使用されます。
オレンジ色の要素のマージンの代わりに、緑のコンテナのパディングを使用します。
padding
の代わりにmargin
を使用:
.body .container {
...
padding-top: 30px;
}
これがあなたのケースでうまくいくかどうかはわかりませんが、私は次のCSSプロパティでこれを解決しました
#element {
padding-top: 1px;
margin-top: -1px;
}
#element
は最初の子要素にmargin-top: 30px
。このCSSにより、期待どおりに動作するようになりました:)すべてのケースで機能するかどうか、YMMVではわかりません。
緑色のボックスにpadding-top: 30
を追加するか、top: 30px
を使用してオレンジ色のボックスに相対配置を使用するか、オレンジ色のボックスをフロートして同じmargin-top: 30px
を使用できます。
このドキュメントを読みます: ボックスモデル-マージンの折りたたみ
CSS
.body {
border: 1px solid black;
border-bottom: none;
border-top: none;
width: 120px;
height: 112px;
background-color: lightgreen;
padding-top: 30px;
}
.body .container {
background-color: orange;
height: 50px;
width: 50%;
}
これがどれほどハックに聞こえるかはわかりませんが、透明な境界線を追加するのはどうですか?