内側の div の余白のスペースで最も外側の div に背景色が表示されない理由を誰か説明できますか?
<div style="background-color:yellow;">
<div style="margin-top:10px;background-color:black;color:white;">
Why isn't the background color yellow inside my top margin?
</div>
</div>
内側の div の余白のスペースで最も外側の div に背景色が表示されない理由を誰か説明できますか?
<div style="background-color:yellow;">
<div style="margin-top:10px;background-color:black;color:white;">
Why isn't the background color yellow inside my top margin?
</div>
</div>
div はブロック要素ですが、(改行を作成する以外に) 単独でスペースを占有しないため、内側の div は外側の div 内の使用可能なすべてのスペースを埋め、黄色の背景をマスクします。最も外側の div にパディングを追加すると、黄色が表示されます。
これは「マージン崩壊」として知られています。
CSS では、2 つ以上のボックス (兄弟である場合とそうでない場合があります) の隣接するマージンを結合して、1 つのマージンを形成できます。このように組み合わされた余白はつぶれていると言われ、結果として生じる組み合わされた余白はつぶれた余白と呼ばれます。
他の回答に見られるように、親にpadding
またはborder
を追加すると、マージンが崩壊するのを防ぐことができます。
ここで説明されている tarkabak の方法に基づいて、次の CSS をコンテナーに適用することにも成功しました。(とのブラウザの互換性には制限があることに注意してください。):before
:after
.prevent-margin-collapse:before,
.prevent-margin-collapse:after
{
content: "\00a0"; /* No-break space character */
display: block;
overflow: hidden;
height: 0;
}
<div style="background-color:yellow;" class="prevent-margin-collapse">
<div style="margin-top:10px;background-color:black;color:white;">
Why isn't the background color yellow inside my top margin?
</div>
</div>
他の回答に加えて、これはマージンの崩壊の問題です。この特定のケースには、「親要素と子要素の間の余白の縮小」セクションが適用されます。
更新: CSS3 のボックス モデル仕様から直接引用した、このトピックに関するステートメントを次に示します(CSS2 仕様内でもほぼ同じ文を見つけることができます)。
特定の隣接するマージンが組み合わされて、1 つのマージンが形成されます。それらのマージンは「崩壊」すると言われています。空でないコンテンツ、パディング、境界領域、またはそれらを分離するクリアランスがない場合、余白は隣接しています。
見たいものを実現するには、html を次のように変更します。
<div style="background-color:yellow; padding-top:10px;">
<div style="background-color:black;color:white;">
Why isn't the background color yellow inside my top margin?
</div>
</div>
その理由は、外側の div には幅が設定されておらず、そのコンテンツのサイズのみを取得するためです。
他の場所からプロパティを継承しないことに関係があると思います。
<div style="background-color:yellow; position: fixed;">
<div style="margin-top:10px;background-color:black;color:white;">
Why isn't the background color yellow inside my top margin?
</div>
</div>