ホームページ ウェブフロントエンド htmlチュートリアル ブロックのフォーマットコンテキスト、フローティングおよび絶対配置の仕組みの詳細な説明_html/css_WEB-ITnose

ブロックのフォーマットコンテキスト、フローティングおよび絶対配置の仕組みの詳細な説明_html/css_WEB-ITnose

Jun 24, 2016 am 11:49 AM

CSS ビジュアル フォーマット モデルには、位置決めスキームという非常に重要な概念があります。 CSS2.1 では、要素のレイアウトを制御するために配置スキームが使用されます。通常のフロー、フローティング、および絶対配置の 3 つの配置スキームがあります。

通常のフロー: 要素は、位置に従って上から下にレイアウトされ、インラインになります。要素は、行がいっぱいになるまで水平に配置され、折り返され、指定されていない限り、すべての要素はデフォルトで通常のフロー配置になります。

フローティング: フローティング レイアウトでは、要素は最初に通常のフロー位置に従って表示され、次にフローティング方向に従って可能な限り左または右にオフセットされます。その効果はテキストの折り返しに似ています。

絶対配置: 要素は通常のフローから切り離されるため、絶対配置された要素は (float とは異なり) 兄弟要素に影響を与えません。要素の特定の位置は座標位置によって決まります。

BFC は通常のストリームであるため、兄弟要素には影響しません。

パート 1: BFC の仕組みの詳細な説明

1. BFC (ブロックレベルの書式設定コンテキスト)

BFC は W3C CSS2.1 仕様の概念であり、要素がコンテンツをどのように配置するかを決定します。他の要素との関係と相互作用。現在、IE6 ~ 7 を除くすべてのブラウザが BFC をサポートしています。 CSS3 では、BFC はフロー ルートと呼ばれます。

通常のコンテナと比較して、BFC 要素は分離された独立したコンテナとみなすことができ、内部要素は外部要素のレイアウトに影響を与えません。

2. BFC を形成する方法

次の条件のいずれかを満たす要素は BFC を形成できます:

1. 浮動要素、none 以外の float 値

2. 絶対配置要素、位置: Absolute/fixed

3.display は inline-block、table-cells、table-captions のいずれかです

4.overflow は visivle (hidden、auto、scroll) 以外の値です

display:table 自体は BFC を生成しません、ただし、匿名ボックスが生成され、display:table-cell を含むボックスは BFC を生成します。

注: BFC は要素ではなく、要素の一部の属性です。したがって、上記の要素は BFC を生成しますが、それ自体は BFC ではありません。

3. BFC の役割

全体として、BFC の役割は、次の 3 つの特定の形式を持つコンテナーを分離することです。 BFC をサポートしていないため、 hasLayout を開始する必要があります クローズドフロート

2.BFC は、浮動要素によってカバーされる要素を整理できます

浮動要素のブロックレベルの兄弟要素は、浮動要素の位置を無視し、行を埋めようとします、浮動要素によって覆われ、BFC を形成すると組織がカバーされるようになります。

<div style="border:1px solid #00F;overflow:hidden;width:300px;">    <div style="float:left;background:#939;">我的父元素是 BFC</div></div> <div style="line-height:3em;">----------我是华丽分割线-----------</div><div style="border:1px solid gray;width:300px;">    <div style="float:left;background:#3C6;">我的父元素不是 BFC</div></div>
ログイン後にコピー

3. BFC は親要素と子要素のマージンが崩れるのを防ぐことができます

2 つのブロック レベルの要素が隣接しており、同じブロック レベルの書式設定コンテキスト内にある場合に限り、それらの間の垂直方向のマージンが崩れます。つまり、2 つのブロックレベル要素が隣接している場合でも、それらが同じ BFC 内にない場合、それらのマージンは崩れません。

<div style="float:left;width:150px;height:50px;background:#FF0;">    我是浮动元素</div><div style="width:200px;height:80px;background:#30F;color:#fff;">    我是非浮动元素,并且没有创建 BFC</div><div style="line-height:3em;">----------我是华丽分割线-----------</div><div style="float:left;width:150px;height:50px;background:#FF0;">    我是浮动元素</div> <div style="width:200px;height:80px;background:#30F;color:#fff;display:inline-block;">    我是非浮动元素,创建了 BFC</div>
ログイン後にコピー

4. BFC と hasLayout

IE6-7 は BFC をサポートしていないため、プライベート属性 hasLayout を使用します。パフォーマンスの点では、hasLayout は BFC と似ています。また、hasLayout をトリガーする条件は、要素にzoom:1 を設定する必要があります。要素の比率。値 1 は要素の実際のサイズが使用されることを意味し、要素に他の影響を与えることなく hasLayout をトリガーできます。これは比較的便利です。

パート 2: float と clear float の仕組みの詳細な説明

1. float とは

CSS の float 属性は、印刷レイアウトでテキストに囲まれた画像のようなもので、float 要素が削除されます。フローは削除されましたが、依然として通常のフローの一部であり、フロートはその前の最後のブロックレベル要素の直後に表示されます。ただし、フロートは絶対配置に似ています。

float として宣言された要素はすべて、自動的に「ブロックレベル要素」として設定されます。つまり、宣言された幅と高さの属性を持つことができます。幅が指定されていないフロートは、フロートのコンテンツの幅に合わせてストレッチラップする必要があります。たとえば、内部に画像を含むフロートは画像と同じ幅になり、テキストを含むフロートはテキストの最長行と同じ幅になります。フロート内。

2. Float の欠陥と削除

要素が float に設定されている場合、よくある欠陥は、兄弟要素の位置に影響を及ぼし、親要素の高さが崩れることです。 1. 兄弟要素の位置に影響します。ブロックレベルの要素は、float 要素を無視し、可能な限り float 要素と同じ行に配置され、その結果、inline 要素は float 要素を囲みます。できるだけ。

2. 高さの崩壊: 浮動要素が通常の流れから切り離されます。つまり、この浮動要素の存在により、それを含む親要素が自動的に持ち上げられなくなり、崩壊が発生します。 クリアの原則: クリアは、要素が前のフローティング要素 (CSS2.1) の下に配置されるように、要素に十分な空白スペースを追加します。これは、要素を埋めるために要素のマージンを増やすのと同じ効果があります。行と強制改行は同じです (CSS1、CSS2)。

clear可以清除对于兄弟元素的影响,但不能解决塌陷的问题,因此需要更高级的清除浮动??闭合浮动。

1. 空div方法

<div class="box">    <div class="main left">我设置了左浮动 float: left</div>    <div style="clear: both;"></div>    <div class="aside">我是页脚,我的上面添加了一个设置了 clear: both 的空 div</div></div>
ログイン後にコピー

空div很方便,但是加入了没有含义的div,与结构与表现分离的原则相违背。

2. overflow方法

在浮动元素的父元素上设置overflow的值为hidden或auto,可以形成BFC,使闭合浮动。

<div class="box" style="overflow: hidden; *zoom: 1;">    <div class="main left">我设置了左浮动 float: left</div>    <div class="aside left">我是页脚,但是我也设置了左浮动。</div></div>
ログイン後にコピー

overflow相对空div更方便,但是当元素内包含超出父元素边界的子元素时,会覆盖掉有用的子元素,或是产生多余的滚动条。

3. :after伪元素方法

<style>    .clearfix {/* 触发 hasLayout */ zoom: 1; }    .clearfix:after {content: "."; display: block; height: 0; clear: both; visibility: hidden; }</style><div class="box clearfix">    <div class="main left">我设置了左浮动 float: left</div>    <div class="aside left">我是页脚,但是我也设置了左浮动。</div></div>
ログイン後にコピー

结合:after伪元素和IEhack,可以完美兼容主流各大浏览器。

清除浮动方法的本质:通过上面例子,可发现清除浮动方法可分为两类:利用clear方法和触发BFC方法

第三部分:绝对定位的工作原理详解

元素的绝对定位是将该元素从普通流拖出,使用top,left,bottom,right等属性相对于最接近的一个父级参照物进行定位。其中父级参照物为相对于其最接近的一个有定位设置(relative,absolute,fix)的父级元素,若父级元素没有设置定位属性,则依据body元素作为参照物定位。

绝对定位可层叠,层叠顺序通过z-index属性控制。

一、使用left和top属性的绝对定位

层级关系为:

<div ??????????? position:relative; 不是最近的祖先定位元素,不是参照物<div?????????-没有设置为定位元素,不是参照物<div???????- position:relative 参照物<div box1<div box2 ???position:absolute; top:50px; left:120px;<div box3
ログイン後にコピー

为改变参照物(橘色框)后的效果
层级关系为:

<div ??????????? position:relative;最近的祖先定位元素,参照物<div?????????-没有设置为定位元素,不是参照物<div???????-没有设置为定位元素,不是参照物<div box1<div box2 ???position:absolute; top:50px; left:120px;<div box3
ログイン後にコピー

参照物为最顶级的元素情况
层级关系为:

<div ???????????没有设置为定位元素,不是参照物<div?????????-没有设置为定位元素,不是参照物<div???????-没有设置为定位元素,不是参照物<div box1<div box2 ???position:absolute; top:50px; left:120px;<div box3
ログイン後にコピー

二、使用margin属性的绝对定位

此情况,margin-bottom 和margin-right的值不再对文档流中的元素产生影响,因为该元素已经脱离了文档流。另外,不管它的祖先元素有没有定位,都是以文档流中原来所在的位置上偏移参照物。
层级关系为:

<div ??????????? position:relative; 不是参照物<div?????????-没有设置为定位元素,不是参照物<div???????-没有设置为定位元素,不是参照物<div box1<div box2 ???position:absolute; margin-top:50px; margin-left:120px;<div box3
ログイン後にコピー

IE6的情况下,box2前面没有兄弟节点,则margin-left的值会出现双倍边距
层级关系为:

<div ??????????? position:relative; 不是参照物<div?????????-没有设置为定位元素,不是参照物<div???????-没有设置为定位元素,不是参照物<div box1<div box2 ???position:absolute; margin-top:50px; margin-left:60px;<div box3
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLは初心者のために簡単に学ぶことができますか? HTMLは初心者のために簡単に学ぶことができますか? Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

HTML、CSS、およびJavaScriptの役割:コアの責任 HTML、CSS、およびJavaScriptの役割:コアの責任 Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTML、CSS、およびJavaScriptの理解:初心者向けガイド HTML、CSS、およびJavaScriptの理解:初心者向けガイド Apr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLでの開始タグの例は何ですか? HTMLでの開始タグの例は何ですか? Apr 06, 2025 am 12:04 AM

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

Giteeページ静的なWebサイトの展開に失敗しました:単一のファイル404エラーをトラブルシューティングと解決する方法 Giteeページ静的なWebサイトの展開に失敗しました:単一のファイル404エラーをトラブルシューティングと解決する方法 Apr 04, 2025 pm 11:54 PM

GiteEpages静的Webサイトの展開が失敗しました:404エラーのトラブルシューティングと解像度Giteeを使用する

WebアノテーションにY軸位置の適応レイアウトを実装する方法は? WebアノテーションにY軸位置の適応レイアウトを実装する方法は? Apr 04, 2025 pm 11:30 PM

Y軸位置Webアノテーション機能の適応アルゴリズムこの記事では、単語文書と同様の注釈関数、特に注釈間の間隔を扱う方法を実装する方法を探ります...

HTML、CSS、およびJavaScript:Web開発者に不可欠なツール HTML、CSS、およびJavaScript:Web開発者に不可欠なツール Apr 09, 2025 am 12:12 AM

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

CSS3とJavaScriptを使用して、クリック後に周囲の写真を散乱および拡大する効果を実現する方法は? CSS3とJavaScriptを使用して、クリック後に周囲の写真を散乱および拡大する効果を実現する方法は? Apr 05, 2025 am 06:15 AM

画像をクリックした後、散乱と周囲の画像を拡大する効果を実現するには、多くのWebデザインがインタラクティブな効果を実現する必要があります。特定の画像をクリックして周囲を作成してください...

See all articles