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

推薦する

Linuxでディスクをマウントする方法

仮想マシンを使用しているときに、ディスク容量が不足し、継続使用するためにディスクをマウントする必要が...

uniapp プロジェクトの最適化方法と提案

目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...

Linux で大きなファイルの指定された内容を見つける方法

大きなことも小さなことも考えて、方向転換しましょう。 Linux では非常に大きなファイルに遭遇する...

アニメーションとトランジションの違い

CSS3アニメーションとJSアニメーションの違いJSはフレームアニメーションを実装しますCSS3はト...

MySQL のスロークエリの方法と例

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

JavaScript コードを省略する一般的な方法の概要

目次序文矢印関数一般的な配列操作をマスターするスプレッド演算子オブジェクトの省略形構造化割り当てデー...

Mysql5.7 サービスを開始できません。グラフィカル ソリューション チュートリアル

p>「サービス」で手動で起動すると、 コンソールから起動します: 次に、...\MySQL S...

Vue の foreach 配列と js の traversal 配列の書き方の説明

Vue foreach配列を記述し、jsで配列をトラバースする方法シナリオVueでAxiosを使用し...

Linux システムでキャッシュをクリアする方法の概要

1) キャッシュメカニズムの紹介Linux システムでは、ファイルシステムのパフォーマンスを向上させ...

Dockerはコンテナに入るためにルートを使用する

まずdockerコンテナを実行しますルートユーザーとしてコマンドを実行する sudo docker ...

MySQL インデックスの長さ制限の原理の分析

この記事は主に、MySQL インデックスの長さ制限の原理の分析を紹介します。サンプル コードを通じて...

MySQLの詳細な分析で使用法と結果を説明します

序文日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行す...

Linux サーバー上のローカル静的リソースにアクセスするために nginx を使用する方法

1. ポート 80 が占有されているかどうかを確認します。通常、ポート 80 は Apache サー...

1つのSQL文でMySQLの重複排除が完了し、1つが保持されます。

数日前、ある要件に取り組んでいたとき、MySQL で重複レコードをクリーンアップする必要がありました...

CentOS 8.1 で LEMP (Linux+Nginx+MySQL+PHP) 環境を構築する (チュートリアルの詳細)

目次ステップ1: CentOS 8でパッケージを更新するステップ2: CentOS 8にNginx ...