Clearfix
Проблема проявляется когда float элемент находится внутри контейнера и автоматически не принимает его высоту.
Поскольку элемент — float то он физически перестает находиться внутри родителя что соответственно приводит к описыной выше ситуации.
Вы можете использовать два следующих метода чтобы это исправить:
Как только вы поймете что собственно происходит — используйте данный метод для исправления ситуации.
Исходный код для webtoolkit.clearfix.css
.clearfix:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } .clearfix { display: inline-block; } html[xmlns] .clearfix { display: block; } * html .clearfix { height: 1%; }
clear
Свойство clear CSS указывает, может ли элемент быть рядом с плавающими floating элементами, которые предшествуют ему или должны быть перемещены вниз (очищены) под ними. Свойство clear применяется как к плавающим, так и к неплавающим элементам.
Интерактивный пример
При применении к неплавающим блокам он перемещает границу края border edge (en-US) элемента до тех пор, пока не окажется ниже края margin edge (en-US) поля всех соответствующих поплавков. Вертикальный край неплавающего блока сжимается.
Вертикальные поля между двумя плавающими элементами, с другой стороны, не будут разрушаться. При применении к плавающим элементам — margin edge (en-US) нижнего элемента перемещается ниже margin edge (en-US) всех соответствующих поплавков. Это влияет на положение более поздних поплавков, поскольку более поздние поплавки не могут быть расположены выше предыдущих.
Поплавки, которые имеют отношение к очистке, — это более ранние поплавки в одном и том же контексте форматирования блоков (en-US) .
Примечание: Если элемент содержит только плавающие элементы, его высота сворачивается в ничто. Если вы хотите, чтобы он всегда мог изменять размер, чтобы он содержал в себе плавающие элементы, вам нужно самоочистить своих детей. Это называется clearfix, и один из способов сделать это — это заменит clear заменённый ::after псевдоэлемент на нем.«`css #container::after
Синтаксис
/* Ключевые слова */ clear: none; clear: left; clear: right; clear: both; clear: inline-start; clear: inline-end; /* Global values */ clear: inherit; clear: initial; clear: unset;
Значения
Является ключевым словом, указывающим, что элемент не перемещается вниз, чтобы очистить предыдущие плавающие элементы.
Является ключевым словом, указывающим, что элемент перемещается вниз, чтобы очистить левые поплавки.
Является ключевым словом, указывающим, что элемент перемещается вниз, чтобы удалить прошлые правые поплавки.
Это ключевое слово, указывающее, что элемент перемещается вниз, чтобы очистить как левые, так и правые поплавки.
Является ключевым словом, указывающим, что элемент перемещается вниз для очистки поплавков в начале содержащего его блока, то есть левые поплавки на скриптах ltr и правые поплавки на скриптах rtl.
Является ключевым словом, указывающим, что элемент перемещается вниз для очистки поплавков в конце содержащего его блока, то есть правые поплавки на скриптах ltr и левые поплавки на скриптах rtl.
Формальный синтаксис
clear =
inline-start | (en-US)
inline-end | (en-US)
block-start | (en-US)
block-end | (en-US)
left | (en-US)
right | (en-US)
top | (en-US)
bottom | (en-US)
both-inline | (en-US)
both-block | (en-US)
both | (en-US)
none
Примеры
clear: left
HTML
div class="wrapper"> p class="black"> Давай лучше "бёзди хэппи" затянем, нежели Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus sit amet diam. Duis mattis varius dui. Suspendisse eget dolor. p> p class="red"> Пусть бегут неуклюже пешеходы по лужам, Lorem ipsum dolor sit amet, consectetuer adipiscing elit. p> p class="left">Этот абзац очищается слева.p> div>
CSS
.wrapper border: 1px solid black; padding: 10px; > .left border: 1px solid black; clear: left; > .black float: left; margin: 0; background-color: black; color: #fff; width: 20%; > .red float: left; margin: 0; background-color: pink; width: 20%; > p width: 50%; >
clear: right
HTML
div class="wrapper"> p class="black"> Лучше нести бред и околесицу, но более осмысленную, чем Lorem ipsum dolor sit amet, consectetuer adipiscing elit. p> p class="red"> - Так я ж намедни намекал, что Lorem ipsum dolor sit amet, consectetuer adipiscing elit. p> p class="right">Этот абзац очищается справа.p> div>
CSS
.wrapper border: 1px solid black; padding: 10px; > .right border: 1px solid black; clear: right; > .black float: right; margin: 0; background-color: black; color: #fff; width: 20%; > .red float: right; margin: 0; background-color: pink; width: 20%; > p width: 50%; >
clear: both
HTML
div class="wrapper"> p class="black"> Лучше нести осмысленную белиберду, чем "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus sit amet diam. Duis mattis varius dui. Suspendisse eget dolor. p> p class="red"> Вот я и говорю, что "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus sit amet diam. Duis mattis varius dui. Suspendisse eget dolor". p> p class="both">Этот абзац очищает оба.p> div>
CSS
.wrapper border: 1px solid black; padding: 10px; > .both border: 1px solid black; clear: both; > .black float: left; margin: 0; background-color: black; color: #fff; width: 20%; > .red float: right; margin: 0; background-color: pink; width: 20%; > p width: 45%; >
Характеристики
| Specification |
|---|
| Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification # propdef-clear |
| CSS Logical Properties and Values Level 1 # float-clear |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 6 янв. 2024 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.
Как использовать clearfix в CSS?
Clearfix — вспомогательный псевдоклас помогающий нам разрешать ситуации со схлопывающейся высотой у родительского div’a когда внутри него расположенный плавающие элементы например с float:left.
Как его использовать?
Самый распространённый пример использования данного псевдокласса с поддержкой начиная с IE6 выглядит следующим образом:
.clearfix < zoom: 1; >.clearfix:before, .clearfix:after < content: ""; display: table; >.clearfix:after
Более современный и короткий вариант применяющийся например в Bootstrap поддерживается IE8+ имеет следующий вид:
.clearfix:after
Так же альтернативным решением может стать overflow:auto или overflow:hiden
Очистка float
При правильном использовании float превращается в мощный инструмент вёрстки, применяемый для выравнивания и упорядочивания элементов. Однако чтобы держать этот инструмент под контролем, необходим противовес, без которого огромный потенциал float сужается до пары узких задач. Речь идёт об отмене обтекания с помощью разных методов. Перечислим несколько наиболее популярных.
Ширина элементов
Если обтекаемые элементы будет занимать всю доступную ширину, то остальные элементы, следующие за ними, будут начинаться с новой строки. Для этого суммарная ширина элементов должна равняться 100%. В примере 1 показано создание стрелок на одной строке.
Пример 1. Использование width
Каждый блок со стрелкой теперь занимает ширину 50% и в сумме они дают 100% ширины, поэтому абзац, идущий после arrow , начинается с новой строки.
Данный метод применяется редко, поскольку не всегда можно явно указать ширину элементов, к тому же метод не решает проблему с высотой блока и его фоном (рис. 1).

Рис. 1. Нет фоновой заливки
Использование overflow
Свойство overflow управляет отображением содержимого блока, если оно целиком не помещается и выходит за область заданных размеров. Значение auto , в частности, добавляет полосы прокрутки при необходимости, а hidden отображает только область внутри элемента, остальное скрывает. Кроме этого, использование overflow со значением auto , scroll или hidden отменяет действие float (пример 2).
Пример 2. Применение overflow
Результат после применения свойства overflow сразу меняется (рис. 2).

Рис. 2. Влияние свойства overflow на фон
overflow — одно из самых популярных свойств, работающее в связке со свойством float . Но иногда возникают ситуации, когда применение этого метода недопустимо. Это происходит в тех случаях, когда элемент выходит за пределы блока, при этом он будет «обрезан». В примере 3 картинка сдвигается влево от своего исходного положения.
Пример 3. Обрезание области элемента

Винни-Пух в гостях у Кролика
Результат примера показан на рис. 3.

Рис. 3. Обрезание картинки
Свойство clear
Для отмены действия float от вышестоящего элемента применяется свойство clear со следующими значениями:
- left — отменяет действие значения left у float ;
- right — отменяет действие значения right у float ;
- both — одновременно отменяет действие значений left и right у float . Это значение рекомендуется устанавливать, когда требуется отменить обтекание элемента, но неизвестно точно с какой стороны.
Чтобы отменить действие обтекания, свойство clear надо добавлять к элементу, идущему после элемента с float . Обычно вводят универсальный класс, к примеру, clearfix и вставляют пустой с этим классом (пример 4).
Пример 4. Использование clear
Винни-Пух в гостях у Кролика
В данном примере для класса clearfix установлено свойство clear со значением both .
Использование clear является одним из самых популярных в вёрстке в силу простоты и универсальности. Но иногда возникают комбинации, в которых использование clear даёт сбой. Это происходит, когда в коде встречается одновременно несколько разных обтекаемых элементов. Так, в примере 5 с помощью float создаются две колонки, а в правой колонке float упорядочивает фотографии.
Пример 5. Использование clear
По годам
По рейтингу
По комментариям
Результат примера показан на рис. 4. Свойство clear действует не только на класс photo , но и на класс col1 , т. е. на все элементы выше, у которых установлено float . Поэтому «Новая строка» начинается не сразу же после фотографий, а после завершения левой колонки.

Рис. 4. Ошибка с отображением строки
В подобных ситуациях помогает комбинация разных методов. Так, фотографии можно добавить в контейнер с overflow и удалить clearfix . Колонка приобретёт следующий вид.
Псевдоэлемент ::after
Частое включение пустого элемента со свойством clear захламляет код, особенно при активном использовании свойства float . Логично перенести всё в стили, избавившись от лишних элементов. Для этого воспользуемся псевдоэлементом ::after, который в комбинации со свойством content добавляет пустой текст после содержимого элемента. К такому тексту можно применить стилевые свойства, в частности clear .
Вместо значения block у display иногда вставляют значение table , но смысл это не меняет, так же как и набор других возможных свойств. Их задача — создать невидимый блок, который будет отменять действие float у вышестоящих элементов.
Поскольку текст, генерируемый через псевдоэлемент ::after , располагается после содержимого элемента, он с лёгкостью заменяет конструкцию . Там, где она требуется достаточно только добавить класс clearfix , как показано в примере 6.
Пример 6. Псевдоэлемент ::after

Удобство приведённого метода заключается в использовании класса clearfix , который при необходимости добавляется к любому элементу.