Очистка обтекания
Оригинальное название: clear
Коротко
CSS-свойство clear, которое не даёт элементу встать рядом с плавающими (float) блоками и опускает его ниже них — слева, справа или с обеих сторон.
Что такое «Очистка обтекания»
Плавающий элемент с float: left прижимается к краю, а текст и строчные блоки обтекают его, как в журнальной вёрстке. Обтекание продолжается, пока плавающий блок не закончится по высоте. Если картинка выше абзаца, следующий заголовок тоже окажется сбоку от неё, хотя по смыслу должен начинать новый раздел. Свойство clear говорит браузеру: этот элемент должен начаться ниже всех плавающих блоков с указанной стороны.
Значения и пример
.post img.alignleft { float: left; margin: 0 1.5em 1em 0; }
.post img.alignright { float: right; margin: 0 0 1em 1.5em; }
.post h2 { clear: both; } /* раздел всегда начинается под картинками */
left— опуститься ниже блоков, плавающих слева;right— ниже плавающих справа;both— ниже любых;none— значение по умолчанию.
В современных браузерах есть и логические значения inline-start и inline-end, которые учитывают направление письма. Пример выше взят не случайно: классы alignleft и alignright WordPress добавляет картинкам с выравниванием в записях, и в классических темах они до сих пор работают на float. Именно в текстах статей очистка обтекания встречается чаще всего.
Очистка и содержащий блок
Есть вторая, родственная проблема. Если внутри блока только плавающие элементы, его высота становится нулевой: float не растягивает родителя, и фон или рамка «схлопываются». Раньше это лечили приёмом clearfix — добавляли в конец родителя псевдоэлемент с clear: both. Сейчас то же решает одна строка display: flow-root: она создаёт для блока новый контекст форматирования, и тот охватывает плавающих потомков.
Неочевидное поведение
clearработает только для блочных элементов. Строчномуspanего задавать бесполезно.- Внутри flex- и grid-контейнера
floatу дочерних элементов игнорируется, поэтому и очищать там нечего. - Чтобы опустить элемент, браузер добавляет над ним промежуток. Из-за этого верхний внешний отступ очищаемого блока может «пропасть» — отступ лучше задавать нижним у плавающего элемента.
Колоночную раскладку на float и clear сейчас не делают: для этого есть Flexbox и Grid. Но для обтекания картинки текстом float остаётся единственным инструментом, а вместе с ним — clear и CSS-фигуры, которые позволяют обтекать не прямоугольник, а круг или многоугольник.

