ホームページ >ウェブフロントエンド >CSSチュートリアル >BFCとは何ですか? BFC について詳しく学び、その役割について話します
BFCとは何ですか?次の記事では、BFC を理解し、BFC の役割について説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
Byte にインタビューしていたとき、面接官に BFC について何か知っているかと尋ねられました。当時、実際にたくさんの記事を読みましたが、わかりませんでした。どの記事も同じようなことを言っている気がして、インタビューでは答えられませんでしたが、王宏源先生の説明を聞いて啓発されたので、皆さんにもシェアしたいと思いました。以下の内容は、Wang Honyuan 先生のフロントエンド システムの授業の概要に基づいています。非常に明確だと思います。Wang Honyuan 先生に感謝します。
BFC## を理解する前に#(ブロック フォーマット コンテキスト)、まず FC(フォーマット コンテキスト) が何であるかを見てみましょう:
この一節は W3C 公式 Web サイトからのものです。次の情報を取得できます:
質問2. BFC の役割
取得できる情報:
BFC では、ボックスはそれを含むブロックの上から始まり、垂直方向に隣り合って配置されます。これには慣れている人も多いかもしれませんが、これが BFC が私たちの達成に役立つことです。ボックスの margin-top を設定すると、BFC がボックスの解析を支援し、ボックスのレイアウト中に上マージンを与えます。関数 1: BFC を使用してマージンのオーバーラップ問題を解決します
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <div></div> <div></div> </body> </html>
多くの人は BFC を box1 に直接追加することを考えるかもしれないので、overflow:hidden 属性を box1 に直接追加します
nbsp;html> <meta> <meta> <meta> <title>Document</title> <style> .box1 { height: 200px; width: 400px; background-color: orange; margin-bottom: 30px; } .box2 { height: 150px; background-color: purple; margin-top: 50px; } </style> <div></div> <div></div>結果はどうなりますか?
機能しないことがわかりました。この時点で多くの人が混乱しているかもしれませんが、Box1 はすでに BFC を形成しているのに、なぜまだ重複しているのでしょうか?まず、この時点で box1 は確かに BFC を形成していますが (box1 の内部に形成された BFC と理解できます)、要素 box1 自体はまだ box2 と同じ html の BFC に属しているため、それでもマージンのオーバーラップは発生します。
したがって、box1 にレイヤーを追加し、box1 の外側のボックスに BFC を設定する必要があります。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> .box1 { height: 200px; width: 400px; background-color: orange; margin-bottom: 30px; overflow: hidden; } .box2 { height: 150px; background-color: purple; margin-top: 50px; } </style> </head> <body> <div></div> <div></div> </body> </html>現時点では、box1 は、box1 の BFC に属しています。コンテナ、box2 は html の BFC に属します いいえ 同じ BFC に属するため、マージンの重複問題は解決できます
当我们给container里面的四个item设置浮动的时候,很明显,这几个元素都会脱离文档流,此时container不会有高度
nbsp;html> <meta> <meta> <meta> <title>Document</title> <style> .container { background-color: orange; } .item { width: 400px; height: 200px; box-sizing: border-box; border: 1px solid #000; float: left; background-color: #f00; } </style> <div> <div></div> <div></div> <div></div> <div></div> </div>
很多网上博主说,通过给container设置一个BFC,内部的浮动元素就会向其汇报高度,然后container就能解决浮动高度塌陷问题,这个做法是正确的,但是这个说法其实是错误,并不是因为其内部的浮动元素向其汇报了高度
事实上,想通过BFC解决高度塌陷问题需要满足两个条件:
浮动元素的父元素触发BFC,形成独立的块级格式化上下文(BFC)
浮动元素的父元素高度为auto
首先我们先看一段W3C的描述
大致意思为BFC的高度是auto情况下,高度是这样计算:
所以我们直接给container通过添加overflow属性设置BFC,则由于上述第四条4特性,container会增加高度来包括内部四个item浮动元素下边缘,所以解决了浮动塌陷问题
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> .container { background-color: orange; /* 通过overflow形成BFC */ overflow: hidden; } .item { width: 400px; height: 200px; box-sizing: border-box; border: 1px solid #000; float: left; background-color: #f00; } </style> </head> <body> <div> <div></div> <div></div> <div></div> <div></div> </div> </body> </html>
(学习视频分享:web前端入门)
以上がBFCとは何ですか? BFC について詳しく学び、その役割について話しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。