До этого я знал два основных способа очистить поток:
- С помощью задания
overflow: hiddenэлементу, внутри которого мы хотим очистить поток.overflow: hiddenсоздаёт отдельный контекст форматирования. Недостатком этого метода является то, что если нам понадобится вынести какой-то блок за границы контейнера сoverflow: hidden, то этот блок не будет виден. - С помощью
<div class="clear"></div>. У класса.clearв стилях задаёмclear: both. В этом методе мне не нравилась необходимость использования лишнего пустогоdiv'а, что бьёт по семантике.
.clearfix { zoom: 1 } /* создаем новый контекст форматирования для IE6 и 7 */
.clearfix:after {
content: "";
clear: both;
display: block;
width: 0; height: 0;
overflow: hidden;
font-size: 0;
}
Т.е., как мы видим, в данном методе мы используем псевдо-класс :after. В комментарие к топику можно найти ещё более упрощенную версию конструкции, которая, как мне кажется, вполне удачно справится с задачей в большинстве случаев:.clear:after {
content: "";
display: block;
clear: both;
}
/* И не забываем про hasLayout для IE */
Этот метод обладает одним очевидным приимуществом перед overflow: hidden, т.к. позволяет выносить дочерние элементы за границы родительского. В общем, при выборе какой же из методов использовать — overflow: hidden или .clear:after { }, я бы вам рекомендовал прислушаться к совету Вадима Макеева и «пользоваться связкой overflow:hidden + zoom:1, а в случаях, когда что-то нужно вытащить из контейнера, использовать dot-clearing» (dot-clearing — это тот самый новый способ, о котором и идёт речь в статье).Не забываем о том, что IE7 и ниже не поддерживает псевдоклассы
:after и :before. Для очищения потока в этих версиях браузера нужному блоку мы присваиваем hasLayuot, что создаёт новый контекст форматирования. Таким образом для IE7 и 6 мы выравниваем поток с помощью hasLayout, для остальных браузеров мы выравниваем поток с потощью clear: both — и это не одно и тоже! Рекомендую разобрать вот этот пример, в котором метод очистки потока с помощью псевдокласса :after приводит к разному результату в IE7 и ниже и в остальных браузерах.Больше информации вы найдёте в статье «How To Clear Floats Without Structural Markup» на Position Is Everything.
Комментариев нет:
Отправить комментарий