Каков наилучший способ очистить стиль CSS "float"?
Я довольно привык очищать свои поплавки, используя <br style="clear:both"/>
, но материал продолжает меняться, и я не уверен, что это лучшая практика.
Существует CSS hack (из positioneverything), который позволяет достичь того же результата без разделителя div. Но... они утверждают, что хак немного устарел, и вместо этого вы, возможно, должны смотреть на этот взлом. Но.. после прочтения 700 страниц комментариев:) кажется, что могут быть места, которые последний взлом не работает.
Я хотел бы избежать любых хаков для javascript, потому что я хотел бы, чтобы моя очистка работала независимо от включенности javascript.
Какова текущая лучшая практика для очистки divs независимо от браузера?
Ответы
Ответ 1
Обновление. В 2014 году вы должны использовать метод clearfix, в котором использовались псевдоэлементы, подобные тому, который упоминается @RodrigoManguinho. Это современный способ очистки поплавков. Для еще более современного метода см. Nicholas Gallagher micro clearfix:
/**
* For modern browsers
* 1. The space content is one way to avoid an Opera bug when the
* contenteditable attribute is included anywhere else in the document.
* Otherwise it causes space to appear at the top and bottom of elements
* that are clearfixed.
* 2. The use of `table` rather than `block` is only necessary if using
* `:before` to contain the top-margins of child elements.
*/
.cf:before,
.cf:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.cf:after {
clear: both;
}
/**
* For IE 6/7 only
* Include this rule to trigger hasLayout and contain floats.
*/
.cf {
*zoom: 1;
}
Исходный ответ:
Мне действительно не нравится использовать дополнительную не семантическую разметку, поэтому я не могу использовать элемент клиринга. Вместо того, чтобы просто применить overflow: hidden;
к родительскому элементу float (s), чтобы очистить их. Работает кросс-браузер, без проблем. Я считаю, что overflow: auto;
также работает.
Очевидно, что это не сработает, если вы хотите использовать другое свойство переполнения, но из-за ошибки коробки расширения IE6 у меня редко возникает причина намеренно переполнять мои контейнеры.
Узнайте больше об использовании overflow
вместо clear
, чтобы избежать добавления дополнительной разметки.
Ответ 2
Я обнаружил, что чаще всего (включая меня) этот метод используется в html:
<div class="clear"></div>
С этим в таблице стилей:
.clear {clear: both;}
Ответ 3
.clear-fix:after
{
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
.clear-fix
{
zoom: 1;
}
<div class="clear-fix">
<div class="left">Some Div With Float</div>
<div class="left">Another Div With Float</div>
</div>
По-моему, это лучший способ. Нет необходимости в дополнительных элементах DOM или неправильном использовании переполнения или любых хаках.
Ответ 4
Там немного вуду, я, как правило, использую.
<span class="clear"></span>
span.clear {
display: block;
clear: both;
width: 1px;
height: 0.001%;
font-size: 0px;
line-height: 0px;
}
Эта комбинация волшебным образом фиксирует целый ряд проблем с браузером, и я только что использовал ее так долго, что забыл, какие проблемы она решает.
Ответ 5
Лучший способ - переполнение: auto; в контейнере div. Это более чисто.
div.container {overflow: auto;}
подробнее в: http://www.quirksmode.org/css/clearing.html
Ответ 6
Простое добавление overflow:auto;
к родительскому элементу, содержащему плавающий элемент (ы), является отличным решением в большинстве случаев.
ОБРАЗЕЦ HTML:
<div class="container">
<div class="child">...</div>
<div class="another-child">...</div>
<div>
CSS
.child {
float: right;
word-wrap: break-word;
}
.child img {
max-width: 100%;
height: auto; /* of course, this is default */
}
.child p {
word-wrap: break-word;
}
.container {
overflow: auto;
}
Как и в любом другом методе, есть некоторые gotchas с overflow:auto;
. Чтобы исправить их, примените max-width:100%; height: auto;
для изображений и word-wrap: break-word;
для текста, содержащегося в плавающих элементах.
[источник]
Ответ 7
jQuery UI имеет некоторые классы, чтобы исправить это также (ui-help-clearfix
что-то делает).
Технически <div style="clear:both;"></div>
лучше, чем <br style="clear:both;" />
, потому что пустой div будет иметь высоту 0, тем самым просто очищая поплавки. <br />
оставит пробел. Я не вижу ничего плохого в использовании метода <div/>
.
Ответ 8
Я сам из школы <br class='clear'/>
, но другим решением может быть использование класса clear в элементе, который сразу же следует за плавающим. Итак вместо:
<div class='float_left'>...</div>
<br class='clear'/>
<div class='something_else'>...</div>
Вы могли назначить несколько классов элементу, который вы хотите очистить:
<div class='float_left'>...</div>
<div class='something_else clear'>...</div>
На практике, однако, я часто использую <br class='clear'/>
довольно часто. Он работает хорошо, когда у вас есть элемент, плавающий внутри другого элемента, и его нужно очистить, чтобы родитель узнал высоту содержимого.
Ответ 9
.floatWrapper {
overflow:hidden;
width:100%;
height:100%;
}
.floatLeft {
float:left;
}
<div class="floatWrapper">
<div class="floatLeft">
Hello World!
</div>
<div class="floatLeft">
Whazzzup!
</div>
</div>
Ответ 10
Проблема заключается в том, что родительские элементы не настраиваются на высоту своих плавающих дочерних элементов. Лучший метод, который я нашел, - это float
родительский элемент, чтобы заставить его настраиваться с высотами его плавающих дочерних элементов, а затем применить ваш css clear
к следующему элементу, который вы хотите очистить. Часто бывает необходимо добавить width:100%
, так как без плавания родитель может неожиданно изменить ваш макет.
Как уже упоминалось, семантически лучше избегать разметки, не связанной с вашим контентом, например, <br>
или <div>
с классом clearfix.
Ответ 11
<div class='float_left'>
something else
<br style="clear:both;">
</div>
этот br не оставляет пробела.
Ответ 12
<br clear="all"/>
хорошо работает. Преимущество этого при использовании class= "clear" заключается в том, что он просто работает, и вам не нужно настраивать дополнительные правила в вашем css, чтобы сделать это.
Ответ 13
Еще один вариант - "Поплавок почти все", в котором вы плаваете родительский элемент с той же стороны, что и плавающий дочерний элемент.
Ответ 14
Я предпочитаю использовать с .clear {clear: both; } over.clear-fix: после бла-бла, потому что, когда вы смотрите на разметку, становится яснее, что происходит. Просто FYI здесь мой учебник по как использовать float и clear, который я написал некоторое время назад.