フローティング要素が親要素の高さを崩す原因と解決策の詳細な説明

フローティング要素が親要素の高さを崩す原因と解決策の詳細な説明

フローティング要素は、親要素の高さを縮小します。要素を float float:left/right;に設定した後、その要素の親要素に背景色がある場合、親要素の背景色が消えてしまうという状況によく遭遇します。親要素に境界線がある場合、フローティング要素は境界線を拡張できません。

上記の 2 つの図から、フローティング要素を追加した後、li 要素はルールに従って水平に配置されますが、親要素は消えていることがわかります。

親要素に 5px の境界線を追加します。li 要素がフロートされた後、境界線はコンテンツによって引き伸ばされません。

最初の例では親要素が消えているように見えますが、2 番目の例では親要素は消えていないものの、高さが 0 として計算されていることがわかります。この問題を説明するには、フローティング要素の特性に戻る必要があります。「要素がフロートに設定されると、自動的にドキュメント フローから外れます。」これは、俗語に翻訳すると、要素がフロートした後はドキュメント フロー全体の管轄下になくなるため、親要素内の以前の高さはフローティングとともに存在しなくなり、この時点で親要素にはコンテンツがないとみなされることを意味します (親要素が固定の高さに設定されていないことが前提です。親要素自体が固定の高さである場合、この状況は発生しません)。

解決:

1. 親要素にもfloatを追加します。これにより、親要素と子要素がドキュメント フローから外れ、子要素が親要素内に収まるようになります。このようにして、親要素は子要素の高さに適応できます。ただし、この方法には欠点があり、親要素の後の要素の配置に確実に影響し、レイアウトにも影響します。
2. 親要素に固定の高さを設定します。この方法は、子要素の高さがわかっていて固定されている場合に適しています。
3. ブロックレベル要素を追加し、この要素にclear:both;を設定してフロートをクリアします。この解決策はずっと前に使用されていました。新しい空の div を作成し、この div の両方に clear: を設定します。これにより、間違いなく意味のないタグが追加されます。大きなページにこのようなタグが多すぎるのはよくありません。
4. overflow:hidden; [詳細は後述]
5. 擬似クラス ::after でフロートをクリアする [詳細は後述]

オーバーフロー:非表示;

  • オーバーフローを非表示にします。コンテンツが親要素を超えた場合、この属性と値を使用してオーバーフロー部分を切り取り、ページをより美しくすることができます。
  • フロートを解除します。子要素がフロートしている場合は、親要素に overflow: hidden を追加します。その最初の特性によると、子要素の制限を超えた部分は切り取られる必要があります。ただし、子要素はフロートしているため、切り取ることはできません。そのため、親要素は高さを増やして子要素をラップすることしかできず、親要素に高さがあり、この高さが子要素に適応するため、フロートしている子要素が親要素に含まれます。

::after 疑似クラス

疑似クラスを使用してフロートをクリアすると、空の div を作成して clear: both; に設定するのと同じ効果がありますが、空の div 要素の代わりに疑似クラスが使用される点が異なります。

<div class="box">
    <div class="son">私はフローティング子要素です</div>
</div>
。箱 {
    幅:400ピクセル;
    背景:#F00;
}
.息子{
    フロート:左;
}
.son::after {
    コンテンツ:"";
    clear:both;/*フローティングをクリア*/
    display:block;/*要素がブロックレベル要素であることを確認してください*/
}

以上で、フローティング要素によって親要素の高さが崩れる原因と解決策についての説明は終了です。親要素の高さが崩れる原因について詳しく知りたい方は、123WORDPRESS.COM の過去記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  MySQL シリーズ 8 MySQL サーバー変数

>>:  Iframe 適応高さコードに関する 3 つの議論

推薦する

MySQLでグローバル変数とセッション変数を設定する2つの方法の詳細な説明

1. MySQL でグローバル変数を変更するには 2 つの方法があります。方法 1: my.ini ...

MySQLクライアントとサーバーのプロトコルの解釈

目次MySQL クライアント/サーバー プロトコルMySQL サーバーから高いパフォーマンスを得る必...

MySQL InnoDB MRR 最適化ガイド

序文MRR は Multi-Range Read の略で、ランダム ディスク アクセスを削減し、ラン...

IIS7 IIS8 リバースプロキシルールの記述、インストール、構成方法

目的: ステーションAをステーションBのセカンダリディレクトリとして扱うのように: http://w...

CentOS8 で MySQL 8.0 をインストールしてデプロイする方法

MySQL 8 の公式バージョン 8.0.11 がリリースされました。公式発表によると、MySQL ...

HTML 内の input type="reset" タグが無効 (機能しない) である理由として考えられるもの。

<html:reset> タグを使用すると、リセット ボタンが無効になり、ボタンをクリッ...

CSS スティッキーフッタークラシックレイアウトの実装

スティッキーフッターレイアウトとは何ですか?一般的な Web ページのレイアウトは、通常、ヘッダー部...

Webデザインチュートリアル(1):手順と全体レイアウト

<br />注:ウェブサイトの種類を示すものを除くすべてのテキストは、企業サイト用です。...

ウェブサイト製品設計の参考となるいくつかの原則

以下の分析は製品設計原則に関するものですが、そのほとんどはウェブサイト製品に基づいているため、ユーザ...

MySQL のインデックス有効条件とインデックス無効条件の結合

目次1. ジョイントインデックスの故障の条件2. インデックス失敗の条件1. ジョイントインデックス...

CSS における重要なカスケード概念の詳細な説明

最近、プロジェクトの過程で問題に遭遇しました。メニューバーを常に上部に表示し、後続の要素をその下に表...

CocosCreator Huarongdaoデジタルパズルの詳しい説明

目次序文文章1. パネル2. 華容島ソリューション3. コード4. 注記序文華容路とは何ですか? 誰...

Windows Server 2016 で Flash を有効にする方法

最近、VMware Horizo​​n を導入してテストしましたが、そのコンソールにはデフォルトで ...

Linux ncコマンドの概要

NC のフルネームは Netcat (Network Knife) で、作成者は Hobbit &a...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...