Что такое контекст форматирования

Ответ

Контекст форматирования (formatting context) в CSS определяет, как элементы располагаются внутри контейнера. Основные типы:

  1. Блочный контекст форматирования (BFC) - создается элементами с display: block, flex, grid, table, inline-block, или при overflow: hidden, float, position: absolute/fixed.

  2. Флекс-контекст - создается display: flex.

  3. Грид-контекст - создается display: grid.

Пример BFC:

.container {
  overflow: hidden; /* Создает BFC */
}

BFC изолирует содержимое, предотвращает "схлопывание" margin'ов и обтекание float'ов.

Ответ 18+ 🔞

А, ну это про эти ваши контексты форматирования, да? Ну, слушай, сейчас объясню, как есть, без этих заумных учебников.

Представь себе, блядь, что каждый элемент на странице — это такой мудак, который живёт в своей квартире. И квартира эта — его контекст форматирования. Это правила, по которым он внутри своей хаты вещи расставляет и с соседями общается.

И вот этих правил, этих «контекстов», несколько видов, как сортов говна:

1. Блочный контекст форматирования (BFC) Это как самая распространённая, блядь, общага. Создаётся она легко — проще пареной репы. Достаточно элементу сказать display: block, или flex, или grid. Или, что самое весёлое, поставить ему overflow: hidden. Это как взять и заварить дверь в соседнюю комнату — всё, теперь твой внутренний бардак никого не ебёт, и соседские margin'ы к тебе не прилипают. Ещё float или position: absolute тоже такую изоляционную камеру создают. BFC — он как скандальная бабка, которая ни с кем не общается и всем говорит «иди нахуй».

2. Флекс-контекст Ну, тут всё просто, ёпта. Сказал элементу display: flex — и пошло-поехало. Все его дети-пиздюки тут же выстраиваются в рядок и начинают слушаться папу-контейнера, который им раздаёт команды: justify-content, align-items. Красота, блядь, а не жизнь. Порядок, ебать его в сраку.

3. Грид-контекст А это уже для продвинутых затейников, которые любят сеточки. display: grid — и твой контейнер превращается в тетрадку в клеточку, куда можно детей раскидать с хирургической, блядь, точностью. Хочешь — в первую колонку, хочешь — с третьей по пятую. Мощь, ебать!

А теперь смотри, зачем это всё нужно. Вот тебе классический пример, когда BFC спасает от пиздеца:

.container {
  overflow: hidden; /* Вот эта строчка, сука, и создаёт BFC! */
}

Что это даёт? А то, что всё, что внутри этого .container, теперь живёт в своём отдельном мирке. Внешние margin'ы не схлопнутся с внутренними, плавающие элементы (float) внутри не будут вылезать за пределы и ебать мозг всему вокруг. Это как надеть на буйного соседа смирительную рубашку — сиди и не рыпайся, блядь.

Короче, контекст форматирования — это просто правила общежития для HTML-элементов. Не хочешь, чтобы они друг другу мозг выносили — посели их в разные контексты. Всё гениальное просто, как три копейки, ёпта.