
Свойство clear в CSS управляет расположением элементов относительно плавающих блоков (float). Значение both останавливает обтекание как слева, так и справа, заставляя элемент начинаться с новой строки после всех плавающих элементов.
Применение clear: both актуально при построении сложных макетов с колонками, где нужно корректно завершить блок с плавающими элементами. Например, если несколько div используют float: left или float: right, без clear both последующие блоки могут накладываться на плавающие элементы или отображаться некорректно.
Для стабильного расположения элементов рекомендуется вставлять пустой блок с clear: both после группы плавающих элементов или использовать псевдоэлементы с ::after и свойством clear: both в сочетании с content: «». Такой подход позволяет избежать ломки верстки при добавлении новых элементов и сохраняет правильный поток документа.
Clear both также полезен в адаптивной верстке для мобильных и гибких сеток, где высота блоков меняется динамически. Он гарантирует, что следующий контент всегда будет начинаться под плавающими элементами, не нарушая визуальное разделение секций и не создавая неожиданных перекрытий.
Что делает свойство clear both и когда его применять
Свойство clear: both в CSS блокирует обтекание элемента слева и справа плавающими элементами. Оно заставляет элемент начинаться ниже всех предыдущих элементов с float: left или float: right, предотвращая наложение контента.
Основные сценарии применения:
- Завершение блока с плавающими элементами для корректного отображения последующих элементов.
- Создание структуры, где под блоками с плавающими изображениями или колонками требуется новый контент без смещения.
- Использование в обертках и контейнерах, чтобы контейнер правильно учитывал высоту внутренних плавающих элементов.
Примеры практического использования:
- Если внутри
divнесколькоfloat: leftэлементов, а под ними должен идти текст – добавляем элемент сclear: both, чтобы текст начинался ниже всех колонок. - При верстке карточек товаров, где каждая карточка плавает слева, а после ряда карточек должен начинаться новый ряд – применяем
clear: both. - В футерах или секциях с фиксированной структурой блоков, где плавающие элементы не дают корректно подсчитывать высоту контейнера.
Рекомендации:
- Использовать
clear: bothтолько для элементов, которые должны начинаться после всех плавающих блоков. - Для современных макетов предпочтительнее применять Flexbox или Grid, но при работе с float
clear: bothостаётся практичным инструментом. - Можно комбинировать с псевдоэлементами
::afterдля автоматического очищения контейнера без добавления лишних HTML-элементов.
Разница между clear left, clear right и clear both
clear left применяется для элементов, которые должны располагаться ниже всех плавающих элементов слева. Если предыдущие элементы имеют float: left, использование clear: left гарантирует, что текущий элемент не будет обтекаться ими и начнётся на новой линии под ними.
clear right действует аналогично, но ограничивает обтекание элементами с float: right. Элемент с clear: right всегда сдвигается ниже правых плавающих элементов, сохраняя корректную структуру блока и визуальное выравнивание.
clear both объединяет действия предыдущих вариантов, предотвращая обтекание как левыми, так и правыми плавающими элементами. Этот вариант особенно полезен при создании полноширинных блоков после ряда плавающих колонок, чтобы избежать наложения контента и сохранить предсказуемый поток документа.
При выборе между clear left, clear right и clear both следует учитывать расположение плавающих элементов и требуемое визуальное оформление. Использование clear только по необходимости уменьшает пустое пространство и упрощает управление макетом.
Применение clear both для блоков с плавающими элементами

Свойство clear: both применяется для элементов, которые должны начинаться после всех плавающих элементов, расположенных слева и справа. Это особенно важно, когда внутри контейнера используются float: left и float: right одновременно, а следующий блок не должен обтекать их.
Пример типичной ситуации – карточки товаров, выстроенные в ряды. Если не использовать clear: both, блок с описанием или кнопкой может наложиться на плавающие элементы, нарушая макет.
| Сценарий | Проблема без clear | Решение с clear: both |
|---|---|---|
| Несколько колонок с плавающими элементами | Нижний блок частично перекрывается колонками | Применить clear: both к блоку, следующему за колонками |
| Футер после ряда картинок | Футер поднимается вверх, перекрывая изображения | Добавить clear: both к футеру, чтобы разместить его под всеми изображениями |
| Блоки с динамическим контентом | Контент не соблюдает последовательность, перекрывает предыдущие блоки | Использовать clear: both для сохранения последовательности отображения |
Для внедрения clear: both рекомендуется создавать отдельный блок с этим свойством или добавлять его напрямую к следующему структурному элементу. Это предотвращает сдвиги и наложения при адаптивной верстке, особенно при изменении ширины окна браузера.
Ошибки при использовании clear both и способы их обхода
Частая ошибка – применение clear both без понимания контекста плавающих элементов. Это может привести к лишним отступам и нарушению структуры блока. Например, если предыдущие элементы не плавают, clear both создаст пустое пространство, которое визуально ломает макет.
Еще одна проблема возникает при использовании clear both на inline-элементах или контейнерах без заданной ширины. В таких случаях эффект может быть незаметен или работать некорректно, так как элемент не занимает ожидаемую область.
Чтобы избежать этих ошибок, рекомендуется применять clear both только к блочным элементам, следующим за плавающими. Для контейнеров с плавающими детьми эффективнее использовать метод clearfix, который добавляет псевдоэлемент с clear: both, не создавая лишних пустых блоков.
При сложных макетах с чередованием левых и правых плавающих элементов полезно использовать отдельные блоки с clear: left или clear: right вместо универсального clear both. Это минимизирует вертикальные разрывы и сохраняет предсказуемость расположения.
В случаях адаптивной верстки, где плавающие элементы изменяют порядок при изменении ширины экрана, стоит сочетать clear both с медиа-запросами, чтобы корректировать очистку только на определенных разрешениях.
Наконец, для динамически генерируемого контента можно использовать JavaScript для контроля вставки элементов с clear, что предотвращает накопление лишних пустых блоков и сохраняет консистентность визуального потока.
Использование clear both в современных макетах CSS

Свойство clear: both остаётся актуальным при работе с плавающими элементами в современных макетах, особенно в случаях, когда требуется восстановить нормальный поток документа после блоков с float.
Примеры практического применения:
- Сброс обтекания после изображений и карточек в сетке без Flexbox или Grid.
- Выравнивание блоков, следующих за плавающими элементами, чтобы избежать наложений и смещения контента.
- Создание контейнеров с переменной высотой, когда родительский блок не расширяется автоматически под плавающие элементы.
Рекомендуемые приёмы для современных макетов:
- Использовать
<div style="clear: both"></div>или псевдоэлемент::afterсclear: bothдля автоматического очищения контейнера. - Комбинировать с
overflow: hiddenилиoverflow: autoдля предотвращения «схлопывания» родителя. - Ограничивать применение только там, где плавающие элементы не могут быть заменены Flexbox или CSS Grid, чтобы не усложнять структуру кода.
Использование clear: both остаётся эффективным инструментом для поддержки старых макетов и частичных переходов на современные методы верстки, обеспечивая предсказуемое поведение блоков в потоке документа.
Альтернативы clear both без создания лишних элементов
Использование clear both часто приводит к добавлению пустых элементов в разметку для корректного обтекания плавающих блоков. Современные методы позволяют обходиться без таких конструкций.
Свойство overflow у родительского контейнера решает задачу обтекания. Установка overflow: auto или overflow: hidden заставляет контейнер расширяться по высоте, захватывая плавающие элементы без дополнительного HTML.
Техника clearfix через псевдоэлементы ::after сохраняет семантику разметки. Пример: container::after { content: ""; display: table; clear: both; }. Этот метод не требует добавления пустых элементов и совместим с современными браузерами.
Использование флексбоксов (display: flex) или грида (display: grid) полностью исключает необходимость clear. Плавающие элементы заменяются на управляемые контейнеры, где порядок и выравнивание задаются через свойства флекс-контейнера или сетки.
При ограниченном использовании float для отдельных элементов предпочтительно оборачивать их в блок с display: flow-root. Этот подход автоматически создаёт контекст форматирования блока, аналогичный clearfix, без лишних тегов.
Вопрос-ответ:
Что делает свойство clear both в CSS?
Свойство clear: both; предотвращает обтекание элемента всеми плавающими элементами, расположенными слева и справа. Это позволяет блоку начинаться ниже любого элемента с float, обеспечивая корректное отображение структуры страницы. Обычно его применяют, чтобы завершить плавающие блоки и избежать наложения контента.
В каких случаях применение clear both может быть избыточным?
Использование clear: both; не всегда необходимо. Например, при работе с современными макетами на flex или grid плавающие элементы почти не применяются, поэтому сброс обтекания становится лишним. Также не имеет смысла добавлять clear: both; к элементам, которые уже не содержат соседних плавающих блоков, так как это не изменит визуальное отображение.
Какие альтернативы clear both существуют без добавления лишних элементов?
Вместо добавления пустых блоков с clear: both; можно использовать свойство overflow у контейнера: overflow: hidden; или overflow: auto;. Это заставляет контейнер автоматически учитывать плавающие элементы внутри. Другой вариант — использовать современный метод clearfix через псевдоэлементы ::after с display: block; и clear: both;, что устраняет необходимость создавать дополнительные HTML-элементы.
В чём разница между clear left, clear right и clear both?
clear: left; запрещает обтекание элементами, плавающими слева, clear: right; — элементами справа, а clear: both; — всеми плавающими элементами. Выбор зависит от расположения соседних блоков. Например, если необходимо, чтобы блок начинался ниже только правых плавающих элементов, достаточно clear: right;, что позволяет сохранить обтекание слева.
