子要素の余白が親要素を移動する 質問する

子要素の余白が親要素を移動する 質問する

私は別の()を含むdiv)を持っています。親は特定のCSSスタイルを持たない最初の要素です。divbody

.child
{
    margin-top: 10px;
}

最終結果は、子の上部が親と揃ったままになります。子が 10 ピクセル下方にシフトされる代わりに、親が 10 ピクセル下方に移動します。

私のはDOCTYPEに設定されていますXHTML Transitional

ここで何が欠けているのでしょうか?

編集 1
親には、上から下まで背景を表示する必要があるため (ピクセル パーフェクト)、厳密に定義された寸法が必要です。そのため、垂直方向の余白を設定することはできませ

編集 2
この動作は FF、IE、CR でも同じです。

ベストアンサー1

代替案を見つけたDIV 内の余白を持つ子要素以下を追加することもできます:

.parent { overflow: auto; }

または:

.parent { overflow: hidden; }

これにより、マージンが崩壊. 境界線とパディングも同様です。したがって、上余白のつぶれを防ぐために、次のものを使用することもできます。

.parent {
    padding-top: 1px;
    margin-top: -1px;
}

2021年アップデート:もしあなたがIE11のサポートを中止新しいCSS構造を使用することもできますdisplay: flow-rootMDN ウェブドキュメントブロック書式設定コンテキストの詳細については、こちらをご覧ください。


要望が多かったため更新しました:余白を折りたたむ主な目的は、テキスト コンテンツを処理することです。例:

h1, h2, p, ul {
  margin-top: 1em;
  margin-bottom: 1em;
  outline: 1px dashed blue;
}

div { outline: 1px solid red; }
<h1>Title!</h1>
<div class="text">
  <h2>Title!</h2>
  <p>Paragraph</p>
</div>
<div class="text">
  <h2>Title!</h2>
  <p>Paragraph</p>
  <ul>
    <li>list item</li>
  </ul>
</div>

ブラウザは余白を折りたたむため、テキストは期待どおりに表示され、<div>ラッパー タグは余白に影響を与えません。各要素の周囲にスペースが確保されますが、スペースが 2 倍になることはありません。 と の余白は<h2>合計されず、互いにスライドします (折りたたまれます)。と要素<p>でも同じことが起こります。<p><ul>

残念なことに、現代のデザインでは、コンテナを明示的に必要とするときにこのアイデアが問題になることがあります。これは新しいブロック書式設定コンテキストCSS 用語では、overflowまたはマージン トリックを使用するとそれが実現します。

おすすめ記事