предисловие
Я всегда слышал, как кто-то раньше упоминал BFC в CSS, и мне довелось столкнуться с проблемой коллапса отступов в практике IFE, поэтому я только что разобрался с механизмом BFC.
1 Что такое БФК
Как и во всех предыдущих сообщениях в блоге, давайте начнем сWhatС точки зрения начала внедрения, от поверхностного к глубокому пониманию BFC. Так называемый Formatting context (контекст форматирования), это понятие в спецификации W3C CSS2.1.
Это область рендеринга страницы и имеет набор правил рендеринга, который определяет, как будут расположены его дочерние элементы, и как они будут связаны и взаимодействовать с другими элементами.
А контексты блочного форматирования (BFC, контексты форматирования на уровне блоков) — это правила рендеринга и отображения элемента на уровне блока. С точки зрения непрофессионала, BFC можно понимать как закрытый большой ящик, и дочерние элементы внутри контейнера не будут влиять на элементы снаружи, и наоборот.
Правила компоновки BFC следующие: 1 внутренние блоки будут располагаться один за другим в вертикальном направлении; 2 BFC представляет собой изолированный независимый контейнер на странице; 3 принадлежаттот самый БФСдваСмежный ящикиз верхнее и нижнее полеПроизойдет перекрытие; 4 При расчете высоты БТЭ плавающий элемент также участвует в расчете 5 Левая сторона каждого элемента соприкасается с левой стороной содержащегося ящика, даже если имеется поплавок; 6 Площадь БФК не будет перекрываться с поплавком;
Итак, как запустить BFC? Функция BFC срабатывает всякий раз, когда элемент удовлетворяет любому из следующих условий:
-
корневой элемент тела;
-
Плавающий элемент: float не является значением атрибута none;
-
Абсолютно позиционированные элементы: позиция (абсолютная, фиксированная)
-
display is: inline-block, table-cells, flex
-
значение переполнения, отличное от видимого (скрытое, автоматическое, прокрутка)
Две характеристики и области применения BFC
Далее представлены общие функции и приложения BFC.В этой части при объяснении причин будут использоваться приведенные выше правила компоновки и условия срабатывания, поэтому вам нужно обратить внимание.
1 Вертикальная граница блочных элементов в двух соседних нормальных потоках схлопнется
<head>
.p {
width:200px;
height:50px;
margin:50px 0;
background-color:red;
}
</head>
<body>
<div class="p"></div>
<div class="p"></div>
</body>
скопировать код
Визуализации:
Согласно статье 3 Правил BFC:
Вертикальное расстояние блока определяется полем, принадлежащим одному и тому же BFC + верхнее и нижнее поля двух соседних блоков будут перекрываться.
В приведенном выше примере схлопывание полей происходит из-за того, что они принадлежат корневому элементу тела, поэтому нам нужно сделать ихНе принадлежат к одному и тому же BFCчтобы избежать схлопывания полей:
<div class="p"></div>
<div class="wrap">
<div class="p"></div>
</div>
скопировать код
.wrap {
overflow:hidden;
.p {
width:200px;
height:50px;
margin:50px 0;
background-color:red;
скопировать код
Визуализации:
2 BFC может содержать плавающие элементы (очистить плавающие элементы)
Обычно плавающий элемент выходит за рамки обычного потока документов, поэтому в следующем коде:
<div style="border: 1px solid #000;">
<div style="width: 50px; height: 50px; background: #eee;
float: left;">
</div>
</div>
скопировать код
Внешний div не сможет содержать внутренний плавающий div Эффект показан на следующем рисунке:
Но если мы запустим BFC внешнего контейнера, согласно пункту 4 спецификации BFC:При расчете высоты БФК в расчете также участвует плавающий элемент, то внешний контейнер div может обернуть плавающий элемент, поэтому просто измените код следующим образом:
<div style="border: 1px solid #000;overflow: hidden">
<div style="width: 100px;height: 100px;background: #eee;float: left;"></div>
</div>
скопировать код
Можно добиться следующих эффектов:
3 BFC может предотвратить закрытие элементов плавающими элементами
Давайте посмотрим на пример:
<div class="aside"></div>
<div class="main"></div>
div {
width:300px;
}
.aside {
width: 100px;
height: 150px;
float: left;
background: black;
}
.main {
height:200px;
background-color:red;
}
скопировать код
Визуализации:Это так из-за вышеизложенного Правило 5:Левая сторона каждого элемента касается левой стороны содержащего его блока, даже если есть поплавок;
Так что если вы хотите изменить эффект и сделать его дополняющим, вы должны использовать правило 6: площадь BFC не будет перекрываться с поплавком, так что<div class="main">
Также могут срабатывать свойства BFC, а именно:
-
.main {
-
overflow:hidden;
-
height:200px;
-
background-color:red;
-
}
скопировать код
Таким образом, его можно использовать для создания адаптивного макета из двух столбцов.
3 Краткое введение в IFC
Правила компоновки IFC:
-
Ящики выкладываются горизонтально друг за другом, начиная с вершины вмещающего блока.
-
При размещении этих блоков будет учитываться пространство, занимаемое их внутренними и внешними полями + границы в горизонтальном направлении; в вертикальном направлении эти блоки могут быть выровнены по-разному: допустимы горизонтальные поля, отступы, границы, недействительны по вертикали. ширина и высота не могут быть указаны;
-
Ширина строчного бокса определяется содержащим его блоком и наличием поплавков; высота строчного бокса определяется высотой строки.
Оригинал: https://segmentfault.com/a/1190000012993668