ホームページ > ウェブフロントエンド > htmlチュートリアル > オーバーフローとレイアウト コンテキスト (BFC)_html/css_WEB-ITnose

オーバーフローとレイアウト コンテキスト (BFC)_html/css_WEB-ITnose

WBOY
リリース: 2016-06-21 08:48:57
オリジナル
1313 人が閲覧しました

HTML は流動的なレイアウトを採用しており、この環境では CSS float が非常に重要です。フロートは、オーバーフローによって新しい BFC が作成され、レイアウトに影響を与えるため、オーバーフローと組み合わせて使用​​されることがよくあります。 この記事では、オーバーフローがフローティングに及ぼす影響を、サラウンドのクリア、フローティング要素のラップ、独立したレイアウト環境の 3 つの側面から紹介します。その前に、まず BFC とは何かを理解しましょう。

BFC (ブロック フォーマット コンテキスト、レイアウト コンテキスト) は、CSS レンダリング プロセス中にレイアウトされるボックスであり、すべての浮動子要素がボックス内にレイアウトされます。 言い換えれば、BFC 内のフローティング要素は BFC の外側に影響を与えず、BFC の外側の環境は BFC 内のレイアウトに影響を与えません。 MDN には、BFC を生成できる要素の合計 8 種類がリストされています。これには、浮動要素と絶対配置要素、インライン ブロック、表示されないオーバーフローのある要素が含まれます。 を overflow:hidden に設定すると、BFC を開くことができることがわかります。

BFC は、ブロックレベルの書式設定コンテキストとして翻訳されることがよくありますが、実際には、レイアウト コンテキストの方が適切だと思います。 基本的に、BFC は長方形のブロックの独立したレイアウト環境です。

参考: https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context

ラッピング効果のクリア

および他の流体ドキュメント (Microsoft Word ドキュメントを含む) と同様に、CSS ではラップアラウンド レイアウトをサポートするためにフロートの概念が導入されました。 後続のドキュメント フローがフローティング要素を囲むようにします。例:

<div style="border:1px solid #000;width:300px;">  <div style="float:left;background: yellow;height:100px;width:150px;">float:left</div>   <div> Eros. Nunc ac tellus in sapien molestie rhoncus. Pellentesque nisl. Praesent venenatis blandit velit. Fusce rutrum.  Leo diam interdum ligula, eu scelerisque sem purus in tellus.</div></div>
ログイン後にコピー

左側の

は左側のフローティング要素を囲みます。

float:left

サピエン モレスティ ロンカスのエロス。列レイアウトでは、周囲の影響をクリアする必要があります。これを行うにはいくつかの方法があります:

margin-left を右

に追加します。

    clear:both を親コンテナの ::after に設定します (フロートとクリアフロートを使用したレイアウトの記事を参照してください)。
  • 今回紹介する方法は、右側の
    にoverflow:hiddenを設定する方法です。このようにして、BFC は右側に形成され、その内部レイアウトは外部フロートの影響を受けないため、左側の
    を囲みません。

効果は次のとおりです:

<div style="float:left;border:1px solid #000;width:300px;">  <div style="background: yellow;height:100px;width:150px;">float:left</div>   <div style="overflow:hidden"> Eros. Nunc ac tellus in sapien molestie rhoncus. Pellentesque nisl. Praesent venenatis blandit velit. Fusce rutrum.  Leo diam interdum ligula, eu scelerisque sem purus in tellus.</div></div>
ログイン後にコピー

float:left

サピエン モルスティ ロンカスのエロス。 nisl.Praesent venenatis blandit velit では、親要素が子要素をラップするようにするにはどうすればよいでしょうか。

これは、フロントエンド開発において非常に一般的なレイアウトの問題です。 フローティングの子要素がある場合、親要素の高さが子要素の高さよりも小さくなる場合があります。 たとえば、親要素の背景を赤に設定します。

子要素は終わりです。親要素の赤い背景は、子要素には完全には適用されません。

このとき、親要素にoverflow:hiddenを設定するとBFCになります。

<div style="background:red;width:300px;">  <div style="width:150px;height:100px;float:left;border:1px solid #000;">Child</div>  Parent</div>
ログイン後にコピー

BFC の内部要素は外部に影響を与えることができないため、浮動子要素を親要素の外部に表示することはできません。 親要素の高さはゼロです。子要素は表示されません。この時点で、CSS は親要素を使用して子要素をラップすることを決定します。 したがって、親要素は子要素と同じ高さになり、赤い背景が表示されます。

独立したレイアウト環境

<div style="overflow:hidden;background:red;width:300px;">  <div style="width:150px;height:100px;float:left;border:1px solid #000;">Child</div>  Parent</div>
ログイン後にコピー

overflow:hidden はレイアウト コンテキスト (BFC) を開くことができ、内部レイアウトは影響を受けません。外側。これは、ネストされたフロート レイアウトで役立ちます。 次のシナリオを考えてみましょう:

ページ全体が 2 列レイアウトを採用しています。左側は固定幅のサイドバーで左側にフロートし、右側はコンテンツ アダプティブです。 右側のコンテンツにユーザー一覧を表示する予定です。

各ユーザーの内部レイアウトに何らかのフロートがある場合は、ユーザーごとにフロートをクリアする必要があります。 何が起こるでしょうか?

サイドバー

ユーザー: アリス

<div style="width:320px;border:1px solid black;">  <div style="float:left;width:100px;background:yellow;height:200px;">Sidebar</div>  <div>    <p style="background:lightblue;"> User: Alice </p>    <div style="clear: both;"></div>    <p style="background:lightblue;"> User: Bob </p>    <div style="clear: both;"></div>    <p style="background:lightblue;"> User: Charlie </p>  </div></div>
ログイン後にコピー

ユーザー: ボブ

ユーザー: チャーリー

clear:both (ユーザー リスト内) は、ページ レイアウト全体のフローティングをクリアします。 2 番目のユーザーから始めて、すべてサイドバーの下に移動します。 適切なコンテナに独立したレイアウト環境を作成するには、overflow:hidden を適切なコンテナに追加します。

overflow:hidden を設定する右側の

BFC (レイアウト コンテキスト) としてレンダリングされるため、外部フローティング要素 (サイドバー) は BFC の内部レイアウトに影響しません:

サイドバー

ユーザー: Alice

<div style="width:320px;border:1px solid black;">  <div style="float:left;width:100px;background:yellow;height:200px;">Sidebar</div>  <div style="overflow:hidden">    <p style="background:lightblue;"> User: Alice </p>    <div style="clear: both;"></div>    <p style="background:lightblue;"> User: Bob </p>    <div style="clear: both;"></div>    <p style="background:lightblue;"> User: Charlie </p>  </div></div>
ログイン後にコピー

ユーザー: ボブ

ユーザー: チャーリー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート