Ответ 1
Как работают поплавки
Когда на странице присутствуют плавающие элементы, неплавающие элементы обтекают плавающие элементы, подобно тому, как текст обходит изображение в газете. С точки зрения документа (исходная цель HTML), так работают поплавки.
float
vs display:inline
До изобретения display:inline-block
веб-сайты используют float
для установки элементов рядом друг с другом. float
предпочтительнее display:inline
, поскольку с последним вы не можете устанавливать размеры элемента (ширина и высота), а также вертикальные paddings (сверху и снизу) - которые могут перемещаться элементы, поскольку они рассматриваются как блок элементы.
Проблемы с поплавком
Основная проблема заключается в том, что мы используем float
по назначению.
Другим является то, что в то время как float
позволяет бок о бок элементы блочного уровня, поплавки не придают форме своему контейнеру. Это как position:absolute
, где элемент "выведен из макета". Например, когда пустой контейнер содержит плавающий 100px x 100px <div>
, <div>
не будет передавать 100px по высоте контейнеру.
В отличие от position:absolute
, это влияет на содержимое, которое его окружает. Содержимое после того, как элемент float будет "обернут" вокруг элемента. Он начинается с рендеринга рядом с ним, а затем под ним, например, как текст газеты обтекает изображение.
Clearfix для спасения
Что делает clearfix, это принудительное содержимое после поплавков или контейнера, содержащего поплавки для рендеринга ниже. Существует много версий для clear-fix, но оно получило свое имя из используемой версии - той, которая использует свойство CSS clear
.
Примеры
Вот несколько способов сделать clearfix, в зависимости от браузера и варианта использования. Нужно только знать, как использовать свойство clear
в CSS и как рендерить float в каждом браузере, чтобы добиться идеального кроссбраузерного исправления.
Что у вас есть
Предлагаемый стиль - это форма clearfix с обратной совместимостью. Я нашел статью об этом clearfix. Оказывается, это OLD clearfix - все еще питается старыми браузерами. В этой статье есть более новая, более чистая версия. Здесь разбивка:
-
Первое clearfix, которое вы добавили невидимый псевдоэлемент, который имеет стиль
clear:both
, между целевым элементом и следующим элементом. Это заставляет псевдоэлемент отображать ниже цели, а следующий элемент под псевдоэлементом. -
Второй добавляет стиль
display:inline-block
, который не поддерживается более ранними браузерами. inline-block похож на inline, но дает вам некоторые свойства, которые блокируют элементы, такие как ширина, высота, а также вертикальное заполнение. Это было предназначено для IE-MAC. -
Это было повторное применение
display:block
из-за правила IE-MAC выше. Это правило было "скрыто" от IE-MAC.
В целом, эти 3 правила поддерживают рабочий кросс-браузер .clearfix
со старыми браузерами.