ボタン要素のdisplay
はinline-block
です。これはBFC(ブロック書式設定コンテキスト)を意味し、abt BFCはブロック要素間で崩れないことを意味しますBFCの外側とBFCの内側にある。ブロック書式コンテキストがブロックになったときに余白が崩壊しない
ただし、BFCの表示タイプが 'ブロック, then margins should collapses as essentially we have turned
インラインブロックinto a regular
ブロック'に設定されている場合、次のコードでは表示されません。
HTML
<div class="no-collapse">
<h2> MARGIN <u>DO NOT</u> COLLAPSE</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magnam perspiciatis libero hic perferendis pariatur minus, officia fugiat id doloremque cum. Esse id, molestiae. Nihil similique libero deserunt, facilis fuga totam.</p>
<button>
<h2>BUTTON TURNED INTO BLOCK</h2> This is a button turned into regular block
</button>
</div>
<div class="collapse">
<h2> MARGIN COLLAPSES</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magnam perspiciatis libero hic perferendis pariatur minus, officia fugiat id doloremque cum. Esse id, molestiae. Nihil similique libero deserunt, facilis fuga totam.</p>
<p>Reguarl paragraph block</p>
</div>
CSS
div.no-collapse {
background-color: antiquewhite;
border: 1px dotted black}
div.collapse { background-color: aqua;}
button {
display: block;
border: 0;
padding-top: 0;
padding: 0;
}
p { background-color: #ccc; }
誰もがBFCはブロック要素になっ用の余白が崩壊しない理由を説明できますか?
ブロックレベルの要素を 'button' ....に置くことはできません。その無効なHTMLです。それが理由です。 –
http://stackoverflow.com/questions/746531/is-it-wrong-to-change-a-block-element-to-inline-with-css-if-it-contains-otherother –
'display'には'block'に設定されていますので、技術的には' background-color'などの視覚的な性質だけで異なる別のブロックレベルの要素と違いはありません。 'width'、' height'、 'margin'、' padding'などの次元プロパティは、ブロックレベルの要素アルゴリズムごとに計算されます。 – dkjain