Давайте начнем с самого начала. CSS почти полностью о коробках. Коробка - это просто прямоугольная область холста. Холст - это все 2D пространство, на котором все нарисовано.
У CSS Boxes есть целый ряд вкусов. Блоки блоков, блоки уровня блоков, встроенные блоки, блоки встроенного уровня, блоки содержимого, поля заполнения, поля границ, поля полей, таблицы, линейные блоки, гибкие блоки и т. Д. Они просто прямоугольные области.
Таким образом, блок - это всего лишь один тип коробки. Многие из вышеперечисленных блоков характеризуются двумя типами поведения - как они расположены относительно своих контейнеров и пиров, и как их содержимое размещено внутри них. Спецификация CSS-дисплея относится к ним как display-outside и display-inside соответственно
Отображение снаружи относится к "* -уровневой" природе ящиков. Они здесь не то, что нам интересно.
Все блоки блоков и некоторые встроенные блоки уровня являются блок-контейнерами. Блок контейнера блока - это блок типа «блок контейнера», а не обязательно блок, содержащий блоки. Блочные контейнеры, которые не являются блоками уровня блока, включают в себя контейнеры display:inline-block
и display:table-cell
«Блок» в «контейнере блока» относится к его поведению внутри дисплея. Внутри них располагаются блочные блоки, а текст течет горизонтально, обычно ограниченные его краями прямоугольника.
Таким образом, «блок-контейнер» - это тип типа . Напротив, «содержащий блок» относится к конкретному блоку. Каждый блок, определенный на холсте, содержит ровно один содержащий блок, за одним исключением, называемый исходный содержащий блок , в котором нет содержащего блока.
Только блок типа «блок-контейнер» может быть блоком, содержащим блок.
Время для примера. Предположим, у нас есть HTML ниже: я намеренно собираюсь использовать элементы <span>
повсюду, потому что это все о CSS, и я не хочу путать с поведением HTML.
<span id="level1">
foo
<span id="level2">
bar
<span id="level3">
baz
<span id="level4">
qux
</span>
</span>
</span>
</span>
CSS очень прост. Just
#level1 { display:inline-block }
Другими диапазонами являются настройки отображения по умолчанию CSS, «встроенные».
Теперь рассмотрим #level4
span. Его родителем является диапазон # level3, равный display:inline
, поэтому диапазон # level3 не образует блок контейнера блока. Аналогично, #level2
span также не образует блок-контейнер. Но элемент #level1
равен display:inline-block
. Это формирует блок встроенного уровня, но тот, который является блоком контейнерного блока. (Это то, что означает «встроенный блок»).
Таким образом, содержащий блок для всех встроенных блоков, образованных интервалами #level2
, #level3
, #level4
и их текстовым содержимым, является блоком контейнерного блока, образованного блоком элемента #level1
.