Недавно я просматривал код какого-то сайта и увидел, что у каждого <div>
есть класс clearfix
.
После быстрого поиска в Google я узнал, что это иногда для IE6, но что на самом деле означает «исправление»?
Не могли бы вы привести несколько примеров макета с явным исправлением по сравнению с макетом без ясного исправления?
div
будет полностью расширена до надлежащей высоты, чтобы охватить его плавающие дочерние элементы . webtoolkit.info/css-clearfix.htmlОтветы:
Если вам не требуется поддержка IE9 или ниже, вы можете свободно использовать flexbox, и вам не нужно использовать плавающие макеты.
Стоит отметить, что сегодня использование плавающих элементов для макета становится все более и более обескураженным с использованием лучших альтернатив.
display: inline-block
- ЛучшеFlexbox поддерживается в Firefox 18, Chrome 21, Opera 12.10 и Internet Explorer 10, Safari 6.1 (включая Mobile Safari) и браузере Android по умолчанию 4.4.
Подробный список браузеров см .: https://caniuse.com/flexbox .
(Возможно, как только его позиция будет установлена полностью, это может быть абсолютно рекомендуемый способ размещения элементов.)
Очистка - это способ автоматического удаления элемента дочерними элементами , поэтому вам не нужно добавлять дополнительную разметку. Обычно он используется в макетах с плавающей точкой, где элементы размещаются горизонтально.
Clearfix - это способ борьбы с проблемой контейнера нулевой высоты для плавающих элементов.
Исправление выполняется следующим образом:
Или, если вам не требуется поддержка IE <8, тоже хорошо:
Обычно вам нужно сделать что-то следующее:
С clearfix вам нужно только следующее:
Читайте об этом в этой статье - Крис Койер @ CSS-Tricks
источник
content: "\00A0";
\ 00A0 представляют собой пробел, простой пробел не работает хорошо :) извините. :)display: inline-block
это лучше, чем поплавки для блочной компоновки. Встроенные блоки, как следует из их названия, встроены - большинство макетов основано на блоках, и размещать эти блоки в контексте встроенного форматирования просто не имеет смысла. Вам также приходится сталкиваться с различными проблемами, связанными со встроенным форматированием, такими как пробелы между элементами, другие встроенные элементы, размеры, выравнивание и т. Д., Как указали многие другие. Конечно, макеты с плавающей точкой также не имеют большого смысла, но, по крайней мере, у флотов есть преимущество, что они основаны на блоках.Другие ответы верны. Но я хочу добавить, что это пережиток того времени, когда люди впервые изучали CSS и злоупотребляли
float
всем своим макетом.float
предназначен для выполнения таких вещей, как плавающие изображения рядом с длинными сериями текста, но многие люди использовали его в качестве основного механизма компоновки. Поскольку это не было предназначено для этого, вам нужны такие хаки, как "clearfix", чтобы заставить его работать.В наши дни
display: inline-block
это хорошая альтернатива ( за исключением IE6 и IE7 ), хотя более современные браузеры поставляются с еще более полезными механизмами размещения под такими именами, как flexbox, grid layout и т. Д.источник
inline-block
не является строгим улучшением по сравнению с плавающими из-за проблемы межблочного интервала , когда пробелы в HTML переводятся в символы пробела, которые разделяют блоки.inline-block
требует собственных обходных путей , так же, какfloat
требует clearfix.clearfix
Позволяет контейнер , чтобы обернуть его плавали детей. Безclearfix
или эквивалентного стиля контейнер не оборачивается вокруг своих всплывающих дочерних элементов и разрушается, как если бы его всплывающие дочерние элементы были расположены абсолютно.Существует несколько версий этого исправления, в качестве ключевых авторов выступают Николас Галлахер и Тьерри Кобленц .
Если вам нужна поддержка более старых браузеров, лучше всего использовать следующее исправление:
В SCSS вы можете использовать следующую технику:
Если вам не нужна поддержка старых браузеров, есть более короткая версия:
источник
div
обтекание плавающими элементами? Можете ли вы помочь мне визуализировать это?Предложить обновленную информацию о ситуации во втором квартале 2017 года.
Новое свойство отображения CSS3 доступно в Firefox 53, Chrome 58 и Opera 45.
Проверьте доступность для любого браузера здесь: http://caniuse.com/#feat=flow-root
Элемент (со свойством display, установленным в flow-root) генерирует блок контейнера блока и размещает его содержимое, используя макет потока. Он всегда устанавливает новый контекст форматирования блока для его содержимого.
Это означает, что если вы используете родительский div, содержащий один или несколько плавающих дочерних элементов, это свойство гарантирует, что родительский элемент охватывает всех своих дочерних элементов. Без какой-либо необходимости взлома. На любых дочерних элементах и даже на последнем фиктивном элементе (если вы использовали вариант clearfix с: before для последних дочерних элементов).
источник
flow-root
есть реальное решение.Проще говоря, clearfix это взломать .
Это одна из тех уродливых вещей, с которыми нам всем приходится жить, поскольку это действительно единственный разумный способ обеспечить, чтобы плавающие дочерние элементы не переполняли их родителей. Существуют и другие схемы компоновки, но в современном веб-дизайне / разработке плавание слишком распространено, чтобы игнорировать ценность взлома clearfix.
Я лично склоняюсь к решению Micro Clearfix (Николас Галлахер)
ссылка
источник
Методика, обычно используемая в макетах с плавающей точкой CSS, - это присвоение нескольких свойств CSS элементу, который, как вы знаете, будет содержать плавающие элементы. Техника, которая обычно реализуется с использованием определения класса, называемого
clearfix
(обычно), реализует следующие поведения CSS:Целью этих комбинированных действий является создание контейнера
:after
с активным элементом, содержащим один символ '.' помечается как скрытый, что удаляет все существующие плавающие объекты и эффективно сбрасывает страницу для следующего фрагмента содержимого.источник
Другой (и, возможно, самый простой) вариант для получения clearfix - использовать
overflow:hidden;
содержащий элемент. НапримерКонечно, это можно использовать только в тех случаях, когда вы не хотите, чтобы содержимое переполнялось.
источник
Я опробовал принятый ответ, но у меня все еще была проблема с выравниванием контента. Добавление селектора «: before», как показано ниже, устранило проблему:
Меньше выше скомпилируется в CSS ниже:
источник
Здесь другой метод, то же самое, но немного другой
разница в том, что точка содержимого заменяется на
\00A0
==whitespace
Подробнее об этом http://www.jqui.net/tips-tricks/css-clearfix/
Вот его компактная версия ...
источник
.clearfix {...}
,html[xmlns] .clearfix {...}
,* html .clearfix {...}
И.clearfix {...}
все выбрать то же самое и заменяют друг друга. Это немного нахально и не очень нужно.\00A0
, я думаю, это было связано с кросс-браузерной совместимостью и знанием времени.