Was ist BFC? Im folgenden Artikel erfahren Sie mehr über BFC und sprechen über die Rolle von BFC. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
FCAls ich Byte interviewte, fragte mich der Interviewer, ob ich damals tatsächlich viele Artikel gelesen hätte, aber ich konnte mich nicht daran erinnern, dass jeder Artikel über das Gleiche sprach Als ich dann interviewte, antwortete ich nicht darauf, aber nachdem ich mir die Erklärung des Lehrers Wang Hongyuan angehört hatte, fühlte ich mich erleuchtet und wollte sie mit allen teilen. Der folgende Inhalt basiert auf der Zusammenfassung der Front-End-Systemklasse von Lehrer Wang Hongyuan. Vielen Dank, Lehrer Wang Hongyuan. Bevor wir
BFC (Blockformatierungskontext) verstehen, werfen wir einen Blick darauf im
(Formatierungskontext) Kontext):
Diese Passage stammt von der offiziellen W3C-Website. Wir können die folgenden Informationen erhalten:Alle Boxen gehören zu einem FC
Das Layout des Blocks -Level-Elemente gehören zu einem BFC. Zum Beispiel div/p/h1 usw. -> Das Layout von
Elementen auf Inline-Ebene im BFC-Layout gehört zu einem IFC. Zum Beispiel img/a/span/i -> Im IFC-Layout ist es einfach zu verstehen: Das Layout und der Kontext, in dem sich Elemente auf Blockebene befinden, sind BFC, und das Layout und der Kontext, in denen sich Elemente auf Inline-Ebene befinden, sind IFC
Entsprechend der auf MDN zusammengestellten Situation, BFC Es wird erstellt:
Inline-Blockelemente (die Anzeige des Elements ist inline -block)
Tabellenzellen (Element Die Anzeige ist Tabellenzelle, HTML-Tabellenzelle ist standardmäßig dieser Wert, Tabellentitel (Die Anzeige des Elements ist Tabellenüberschrift, HTML-Tabellentitel ist standardmäßig dieser Wert) Zeile, Tbody, Thead, Tfoot Standardattribute) oder Inline-Tabelle)
<!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>
Die Informationen, die wir erhalten können:
In einem BFC befindet sich der linke Rand jedes Elements in der Nähe des Inhalts Der linke Rand des Blocks
Funktion 1: Verwenden Sie BFC, um das Randüberlappungsproblem zu lösen
<!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; } .box2 { height: 150px; background-color: purple; margin-top: 50px; } </style> </head> <body> <div></div> <div></div> </body> </html>
<!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>
Habe festgestellt, dass es nicht funktioniert. Viele Menschen sind zu diesem Zeitpunkt möglicherweise verwirrt. Box1 hat bereits einen BFC gebildet. Warum gibt es also immer noch Überschneidungen? Lassen Sie mich zunächst erklären, dass Box1 zu diesem Zeitpunkt tatsächlich einen BFC gebildet hat (es kann als BFC innerhalb von Box1 verstanden werden), aber das Element Box1 selbst gehört immer noch zum gleichen BFC von HTML wie Box2 wird immer noch eine Randüberlappung auftreten
Also müssen wir Box1 eine Ebene hinzufügen und dann einen BFC für die äußere Box von Box1 festlegen<!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外层增加一个container盒子,并设置BFC */
.container {
overflow: hidden;
}
.box1 {
height: 200px;
width: 400px;
background-color: orange;
margin-bottom: 30px;
}
.box2 {
height: 150px;
background-color: purple;
margin-top: 50px;
}
</style>
</head>
<body>
<div>
<div></div>
</div>
<div></div>
</body>
</html>
当我们给container里面的四个item设置浮动的时候,很明显,这几个元素都会脱离文档流,此时container不会有高度
<!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; } .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>
很多网上博主说,通过给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前端入门)
Das obige ist der detaillierte Inhalt vonWas ist BFC? Erfahren Sie mehr über BFC und sprechen Sie über seine Rolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!