CSSの高さの崩壊問題についての簡単な説明

CSSの高さの崩壊問題についての簡単な説明

パフォーマンス

例えば:

HTML:

<div class="first">
    <div class="first-child1">最初の子1</div>
    <div class="first-child2">最初の子2</div>
</div>
<div class="second">
    2番
</div>
<div class="third">
    三番目
</div>

CS: ...

。初め{
    幅: 300ピクセル;
    背景色: ピンク;
}
.first .first-child1,.first .first-child2{
    フロート: 左;
    幅: 100ピクセル;
    高さ: 100px;
}
.first .first-child1{
    背景色: 紫;
    右マージン: 10px;
}
.first .first-child2{
    背景色: 赤;  
}
。2番{
    幅: 200ピクセル;
    高さ: 150px;
    背景色: 青;
}
。三番目{
    幅: 100ピクセル;
    高さ: 150px;
    背景色: 緑;
}

それは次のように現れます:

原因

上記の例からわかるように、最初のボックスには高さが設定されておらず、子要素によって引き伸ばされています。ただし、子ボックスはフロートに設定されており、標準フローから外れているため、最初のボックスには高さがなく、2 番目と 3 番目のボックスが上に移動します。

高い崩壊率の理由は次のように結論付けられます。

ドキュメント フローでは、親要素の高さはデフォルトで子要素によって拡張されます。つまり、親要素の高さは子要素の高さと同じになります。ただし、子要素をフロートに設定すると、ドキュメントフローから完全に外れてしまいます。このとき、子要素は親要素の高さをサポートできず、親要素の高さが崩れてしまいます。親要素の高さが縮むため、親要素の下にあるすべての要素が上に移動し、ページレイアウトが乱雑になります。

高い崩壊に対する解決策:

1. 親要素に固定の高さを設定します。ただし、この方法を使用した後、子要素に合わせて親要素の高さを自動的に増やすことはできません。高さを固定できる場合は、自分のページの特性に合わせてこの方法を使用できます。そうでない場合は、この方法はお勧めしません。

2. 追加タグ方式: これは W3C が推奨する解決策ですが、HTML の原則は意味のあるタグを記述することであるため、推奨されません。この方法では、意味のないタグが追加されます。

<div class="first">
    <div class="first-child1">最初の子1</div>
    <div class="first-child2">最初の子2</div>
    <div style="clear: both;"></div>
</div>

3. 親要素のオーバーフロープロパティ(要素の BFC を開く):

.clearfix{
    オーバーフロー: 非表示;
}

この方法を使用すると、属性値は任意の非表示 (hidden/auto/scroll) にすることができますが、hidden が推奨されます。

このメソッドは副作用が少なくなります。このメソッドは IE6 ではサポートされていません。zoom: 1; を追加できます。

.clearfix::after{
    content: "";/*疑似要素のコンテンツは空です*/
    display: block;/*デフォルト以外でも問題ありません。テーブルなどでも構いません。*/
    height: 0;/*疑似要素の高さは0で、他の要素には影響しません*/
    clear: both;/*フロートをクリア*/
    visibility: hidden;/*非表示*/
}
.clearfix{
    zoom: 1;/*IE6 要素には BFC モードはありませんが、このコードは IE6 で hasLayout モードをオンにします。これは IE でのみサポートされています*/
}

4. 単一の疑似要素の後のフロートをクリアします(要素の BFC をオンにします)。

.clearfix::after{
    content: "";/*疑似要素のコンテンツは空です*/
    display: block;/*デフォルト以外でも問題ありません。テーブルなどでも構いません。*/
    height: 0;/*疑似要素の高さは0で、他の要素には影響しません*/
    clear: both;/*フロートをクリア*/
    visibility: hidden;/*非表示*/
}
.clearfix{
    zoom: 1;/*IE6 要素には BFC モードはありませんが、このコードは IE6 で hasLayout モードをオンにします。これは IE でのみサポートされています*/
}

この方法は現在広く使用されています。多くの大規模な Web サイトがこの方法を使用しています。副作用が少なく、IE6 で処理するだけで済みます。

5. 二重疑似要素のクリアフローティング(要素の BFC を開く):

.clearfix::before、.clearfix::after{
    コンテンツ: "";
    表示: ブロック;
    クリア: 両方;
}
.clearfix{
    zoom: 1;/*IE6 要素には BFC モードはありませんが、このコードは IE6 で hasLayout モードをオンにします。これは IE でのみサポートされています*/
}

このアプローチは記述が面倒なので、お勧めできません。

親要素のフローティングの影響をクリアした後の効果:

BFC関連

W3C 標準によれば、ページ内の各要素には、ブロック フォーマット コンテキスト (略して BFC) と呼ばれる暗黙の属性があります。この属性はオンまたはオフに設定でき、デフォルトではオフになっています。

要素の BFC がオンになっている場合、その要素には次の特性があります。

1. 親要素の垂直余白は子要素と重ならない

2. BFCが有効になっている要素はフローティング要素によって覆われません

3. BFCが有効になっている要素にはフローティングサブ要素を含めることができます

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

<<:  Vueはランニングライトのシンプルな効果を実現

>>:  テーブルリストを破棄するには、標準のdl、dt、ddタグを使用します。

推薦する

CSS 背景と境界タグの例の詳細な説明

1. CSS背景タグ1.背景色を設定するbackground-ground-color プロパティは...

JavaScript でアルゴリズムの複雑さを学ぶ方法

目次概要Big O 表記法とは何ですか?オー(1)の上) (n^2) O(logn) ですの上!)結...

Angularが予期しない例外エラーを処理する方法の詳細な説明

前面に書かれたコードがどれだけ適切に記述されていても、すべての可能性のある例外を完全に処理することは...

ページ下部のフッターを修正する方法(複数の方法)

フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...

JSパッケージオブジェクトに関する簡単な説明

目次概要意味インスタンスメソッドプリミティブ型とインスタンスオブジェクト間の自動変換カスタムメソッド...

Docker rocketmq デプロイメントの実装例

目次準備展開プロセスRocketMQ の初体験関連する質問ヘルプドキュメント私は最近 RocketM...

MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明

MySQL マスタースレーブ設定MySQL のマスター/スレーブ レプリケーションと読み取り/書き込...

jQueryはシャトルボックス効果を実現します

この記事では、シャトルボックス効果を実現するためのjQueryの具体的なコードを参考までに紹介します...

JavaScript 配列の重複排除とフラット化関数の紹介

目次1. 配列の平坦化(配列の次元削減とも呼ばれる)方法1: 削減メソッドを使用する方法2: スタッ...

ネイティブ js でカスタム スクロール バーを実装する

この記事の例では、カスタムスクロールバーを実装するためのjsの具体的なコードを参考までに共有していま...

DockerコンテナにPythonアプリケーションをデプロイするプロセスの分析

シンプルなアプリケーションの展開1. ディレクトリ構造: └── Pythonpro #ディレクトリ...

Nginx リバース プロキシと負荷分散を実装する方法 (Linux ベース)

ここで nginx のリバース プロキシを試してみましょう。リバースプロキシ方式とは、インターネット...

意外と知らないJSのループ速度テストのいろいろを徹底解説

目次序文1. forループ2. whileループとdo-whileループ3. forEach、map...

MySQL countの詳細な説明と関数のサンプルコード

mysql countの詳細な説明count関数はテーブルや配列内のレコードを数えるために使われます...

CSV、Excel、SQL ファイルを MySQL にインポートするためのヒント

1. csvファイルをインポートする次のコマンドを使用します。 1.mysql> infile...