BFCについて話す前に、例を見てみましょう
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>BFC</title> 6 <style type="text/css"> 7 .div1 {background-color: #FCE38A; width: 200px; height: 100px;} 8 .div2 {background-color: #EAFFD0; width: 200px; height: 100px;} 9 .div3 {background-color: #95E1D3; width: 200px; height: 100px;}10 </style>11 </head>12 13 <body>14 <div class="div1">div1</div>15 <div class="div2">div2</div>16 <div class="div3">div3</div>17 </body>18 </html>
行の幅が制限されていても、ブロックレベルの要素の順序は上から下であることがわかります。複数の要素を収容するには、div1 と div2 に同時にマージンを追加します
本来、div1 の下マージンは 50px、div2 の上マージンは 50px です。論理的には、それらの間の距離は次のようになります。 100pxですが、ここでは50pxのみです。これは、ブロックレベルのレイアウトコンテキストで隣接する2つのブロックレベルのボックス間の垂直マージンが折りたたまれているためです。これは、CSS学習ノート07ボックスモデルで導入されたマージンマージです。このマージンのマージ現象を解決するにはどうすればよいでしょうか。これには、以下で紹介する BFC が関係します。
ブロックレベルのフォーマットコンテキストです。ブロックレベルのボックスのみが参加します(表示属性はblock 、 list-item 、 table 要素など)、この領域の外側とは何の関係もありません。このうち、フォーマット コンテキストは、ドキュメントのレンダリング方法を決定するコンテナです。W3C CSS2.1 仕様の概念です。これはページ上のレンダリング領域であり、そのサブ要素がどのように配置されるか、および他の要素との関係や相互作用を決定する一連のレンダリング ルールがあります。最も一般的な書式設定コンテキストは、ブロック書式設定コンテキスト (BFC) とインライン書式設定コンテキスト (IFC) です。 CSS2.1ではBFCとIFCのみでしたが、CSS3ではGFCとFFCも追加されました。
平たく言えば、BFC は独立したボックスであり、この独立したボックス内のレイアウトは外部の要素には影響されません。 ドキュメントのプレゼンテーションが開始されると、BFC が自動的に作成され、ページ全体がレイアウトされます。新しい BFC が作成されない場合、ドキュメント全体がこの BFC になります。
BFC ルール
。
BFC を計算する同一个BFC中,在两个相邻的块级元素中,垂直margin会发生折叠
このとき、div1 要素は、display:inline-block を通じて BFC をトリガーするため、この時点の div1 は独立した BFC です。ルール
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>BFC清除内部浮动</title> 6 <style type="text/css"> 7 .child {background-color: #95E1D3; border: 1px solid #FCE38A; width: 100px; height: 100px;} 8 .parent {width: 300px; border: 1px solid #95E1D3;} 9 </style>10 </head>11 <body>12 <div class="parent">13 <div class="child"></div>14 <div class="child"></div>15 </div>16 </body>17 </html>
りー
这时候可以触发parent生成BFC,那么parent在计算高度时,parent内部的浮动元素child也会参与计算
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>BFC布局</title> 6 <style type="text/css"> 7 .left {width: 100px; height: 100px; background-color: #FCE38A; float: left;} 8 .right {width: 300px; height: 150px; background-color: #95E1D3;} 9 10 </style>11 </head>12 <body>13 <div class="left"></div>14 <div class="right"></div>15 </body>16 </html>
根据规则
每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反),即使存在浮动也是如此
所以即使left设置了左浮动,right的的左边依然会与包含块的左边(即body)相接触。接着我们可以根据规则
BFC的区域不会与float box重叠
让right触发产生BFC,这样right就不会与left重叠了
这样就形成了常见的两列布局。
总之记住一点BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,同样的,外面的元素也不会影响到容器里面的子元素。
以上がBFCとは何ですか? BFC の簡単な理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。