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タグを使用します。

推薦する

JavaScript を学ぶときに知っておくべき 3 つのヒント

目次1. 魔法の拡張演算子1. 配列をコピーする2. 配列を結合する3. オブジェクトを展開する2....

CSS3 を使用した SVG パス ストロークのアニメーション化入門チュートリアル

JavaScript に依存せず、純粋な CSS を使用してsvgストローク描画アニメーション効果と...

ウェブサイト制作におけるオンライン広告の新しいインタラクティブ体験(グラフィックチュートリアル)

インターネット時代が成熟するにつれて、オンライン広告の発展も加速しています。圧倒的な広告収入と完璧な...

SSDストレージを有効にしたMySQLインスタンスの詳細な説明

SSDストレージを有効にしたMySQLインスタンスの詳細な説明特に OS と MySQL が同じディ...

Ubuntu MySQL バージョンが 5.7 にアップグレードされました

数日前、図書館はサーバー(Ubuntu 14.04)にセキュリティ上の脆弱性があり、時間通りに修復さ...

入力要素 [type="file"] を使用する場合のスタイルのカスタマイズとブラウザの互換性の問題に関する議論

この2日間、Baixing.comの筆記試験問題を解いているときに、このような問題に遭遇しました。H...

MySQL DDLステートメントの使用

序文SQL の言語分類には主に以下の種類があります。 DDLデータ定義言語作成、削除、変更データ定義...

MySQL でパーセンテージと最初の数パーセントを表示する方法

目次必要とする実装コードデータベース数日前、友人からこれを書くのを手伝ってほしいと頼まれました。ただ...

JavaScript の 7 つのデータ型の詳細な説明

目次序文:詳しい紹介:練習する:要約する序文: Python、Java、Cシリーズなど、すべての主要...

ローカル Docker に Postgres 12 + pgadmin をインストールする方法 (Apple M1 をサポート)

目次導入Intel CPUをサポートApple M1のサポートテスト導入このプロジェクトでは最近、P...

Centos7 に DAMO データベースをインストールするチュートリアル

1. 準備Linux オペレーティング システムをインストールした後、ここで Linux 7 を選択...

Dockerデータボリューム操作の実装

データボリュームの使用開始先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、...

Layuiテーブルは指定された行のラジオボタンを選択し、その行の実装コードまでスクロールします。

layui テーブルには複数行のデータがあります。外部入力コンテンツを通じて、指定された行を見つけ...

Linuxでファイルの作成時間を表示する方法

1. はじめにLinux でファイルの作成時刻が見つかるかどうかは、ファイル システムの種類によって...

JavaScript parseInt() と Number() の違いのケーススタディ

学習目標: parseInt() と Number() という 2 つの関数は、文字列をデータ型に変...