CSS マージンの折りたたみの詳細な説明

CSS マージンの折りたたみの詳細な説明

前の

これは古くからある古典的な質問です。以前読者から質問があったので、ここでお答えします。

簡単な例から始めましょう

簡単な例を見てみましょう。

<スタイル>
    .slide1 div {
      マージン:10px 0;
    }
  </スタイル>
 <div class="slide1">
    <h3>マージン相殺タイプ 1: 兄弟要素</h3>
    <p>テキストの上下の間隔は 10 ピクセル</p>
    <p>テキストの上下の間隔は 10 ピクセル</p>
  </div> 

この例の 2 つのpタグを見てください。スタイル定義によると、最初のpmargin-bottomと 2 番目のpmargin-topどちらも 10px なので、実際の距離は 20px になるはずです。ただし、ブラウザーで確認すると、最終的な margin は10pxであることがわかります。 一例として、マージンの折りたたみが挙げられます。ブロックレベル要素の上部と下部のマージンが 1 つのマージンに結合される (または折りたたまれる) ことがあります。

分類

マージン崩壊には、基本的に 3 つのケースがあります。

  1. 隣接する要素
  2. 親要素と最初の子要素(または最後の子要素。後で、なぜ最初または最後の子要素なのかを思い出してください)
  3. 空のブロックレベル要素

急いで暗記しないでください。まず、前の記事の例は最初のケースです。マージンの崩壊は、隣接する 2 つの要素間で発生します。

2番目と3番目のケースは次のとおりです。


<スタイル>
    。父親 {
      背景色: 緑;

    }
    。子供 {
      上マージン: 50px;
      背景色: 赤;
      高さ: 300px;
    }
    
      .スライド3 {
      マージン: 10px 0;
    }
  </スタイル>
  <h3>2 番目のマージンの縮小: 親要素と最初の子要素</h3>
  <div class="slide2 父">
    <!-- 親要素は緑色です -->
    <div class="slide2 子">
      <!-- 子要素は赤です -->
    </div>
  </div>
  <h3>第 3 マージンの縮小: 空のブロックレベル要素</h3>
  <div class="slide3"></div>

それらの画像も以下に示します。

ケース2: 子要素の余白が親要素の外側に「転送」される

ケース3: 要素の上下の余白がなくなる

さて、これらの状況の共通点を見てみましょう(ボックスモデルを描くことをお勧めしますが、描くのが面倒なので-_-)、マージンの崩壊の共通の原因は、マージンが何の障害もなく直接接触していることです。

直接接触をどのように理解すればよいでしょうか?とても簡単です:

  • 最初の例では、2 つの<p>タグの垂直marginが直接接しています。
  • 2 番目の例では、親要素のpaddingborder両方とも 0 であるため、 marginとその子要素も直接接触しています。 (この例はボックスモデルを描くと分かりやすいです)
  • 3番目の例では、空要素自体の上部と下部の余白も直接接しています( paddingborderも0です)

様々なケースでの折り畳みの結果

折り畳み後の余白を計算する方法は簡単に確認できます。

  • 両方のマージンが正の場合、折り畳み後に大きい方のマージンが使用されます。
  • 一方のマージンが正でもう一方が負の場合、折り返しマージンはマージンの合計になります。
  • 両方のマージンが負の場合、縮小されたマージンは小さい方のマージンの合計になります。

余白が崩れるのを防ぐ方法

前述のように、マージンの崩壊の原因は、マージンが直接接触していることです。したがって、崩壊を防ぐ方法は、この直接接触をブロックすることです。方法の組み合わせは次のとおりです。

  • ネストされたケースでは、 border paddingが 0 でないか、親要素にテキスト行を追加するなど、分離するinline要素がある限り (ケース 2 で直接試すことができます)
  • フローティング、 display:tableなど、BFC の助けを借りてバリアを形成する方法。( BFCに慣れていない学生は最初に確認してください。後で記入します)

まとめ

上記で説明したのは基本的な状況であることを付け加えておきます。基本的な状況では、複数の隣接する要素間や、子孫要素の複数層のネストなどの組み合わせも作成できます。基本原理を理解すれば、小さなデモを作成して検証する限り、他の状況も簡単に理解できるようになります。それから、慣例があります。内容に間違いがあったら指摘してください(読んでいて不快に感じたり、文句を言いたくなったりしても全く問題ありません)。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

元のアドレス: https://segmentfault.com/a/1190000016842993

<<:  カルーセル効果を実現するための純粋なjs

>>:  Nofollowはコメントやメッセージ内のリンクを本当に機能させる

推薦する

Linux Centos7 に mysql8 をインストールするチュートリアル

1. RPMバージョンのインストールデータベースの他のバージョンがあるかどうかを確認し、ある場合は完...

Linuxの運用と保守、基本的なプロセス管理、リアルタイム監視と制御

目次1. バックグラウンドで実行されるジョブ2. 信号を使用してプロセスを制御する基本的なプロセス管...

Vue で親子コンポーネントの値を双方向バインドするために v-model を使用するときに発生する問題と解決策

目次シナリオ解決してみる解決するシナリオ今日、コンポーネントの双方向データバインディングにv-mod...

MySQLを使用して列内の異なる値の数をカウントする例

序文この記事で実装されている要件は、実際には非常に一般的です。たとえば、ユーザーが登録したチャネルを...

Linux 圧縮ファイルコマンド zip の使用例

「.zip」形式は、Windows システムでファイルを圧縮するために使用されます。実際、「.zip...

MySQL がエラーを報告: ファイルが見つかりません: './mysql/plugin.frm' 解決策

問題を見つける最近、仕事中に問題が見つかりました。問題は、MySQL ディスクがいっぱいだったことで...

一般的なDocker Composeコマンドの詳細な説明

1. Docker Compose の使用方法は docker コマンドの使用方法と非常に似ています...

CSS3 の Flex レイアウトの詳細な分析

Flexbox レイアウト モジュールは、コンテナー内のスペースをより効率的に配分する方法を提供する...

nginxワーカープロセスループの実装

ワーカープロセスは、起動されると、まず自身の動作に必要な環境を初期化し、次に実行する必要があるイベン...

Windows で MySQL 5.6 を 5.7 にアップグレードする方法

前面に書かれたMySQL をアップグレードする方法には、インプレース アップグレードと論理アップグレ...

MySQL 5.7 の sql_mode のデフォルト値によって生じる落とし穴と解決策

通常のプロジェクト開発中に、MySQL バージョンが 5.6 から 5.7 にアップグレードされた場...

nginx で http でアクセスする Web サイトを https に変更する方法

目次1. 背景2. 前提条件https:証明書システム: 3. 操作プロセス3.1 証明書の生成3....

MySQL killコマンドの実行原理の詳細な説明

目次キル命令実行原理命令実行特性クエリ実行の強制終了の原則接続終了の実装原則中断される可能性はありま...

CentOS 7.4 64 ビット版に MySQL 8.0 をインストールして設定するための詳細な手順

ステップ1: MySQL YUMソースを取得するMySQLの公式サイトにアクセスして、RPMパッケー...

非常に便利な CSS 開発ツール 8 つを紹介

CSS3 パターン ギャラリーこの CSS3 パターン ライブラリには、純粋な CSS3 を使用して...