3382 читателя, 179 постов
Администрация
Модераторы
Блог о CSS, его применении, новости по теме.
clear со значениями left, right, both действительно очищает поток в отличие от overflow со значеним hidden, которое создаёт отдельный контекст форматирования для выбранного элемента, тем самым локализуя действие свойства float внутри элемента к которому применён.<div class="clear"></div>, кстати бессмысленные при существовании <br clear="all"/>.overflow:hidden»:«… элементам с 'overflow' отличными от 'visible' (не считая случаев, когда значение наследуется областью просмотра) устанавливается новый контекст для форматирования»
iframe. Но кроме этого мы получаем кое-что ещё.float:left или float:right или и с тем и другим» при применении к элементу свойства clear с значениями соотвественно left, right и both. clear:left, то этот элемент окажется ниже сайдбара, что не очень нужно, особенно если сайдбар очень высокий. clear (см. рис. ниже) и предполагаю, что оно способствует улучшению производительности так же как абсолютное позиционирование.
комментарии (74)
Да и в разных браузерах он будет выглядеть не совсем одинаково.
— Во всех браузерах будет одинаково, включая IE7+
Ваше высказывание звучит как «я что-то примерно знаю, но не уверен точно что, поэтому скажу что-нибудь такое»…
Наглядно!
зато использование clear заставляет помещать зелёный блок ниже любого контейнера с float (слева)
Все приличные люди пользуются вот этим: www.positioniseverything.net/easyclearing.html
Давать overflow на контейнер — стремно. Особенно там где при переделках сайта могут возникнуть всяческие всплывающие/выскакивающие окна, скрытые в этом контейнере с overflow.
кстати в том способе «height: 0» создаёт hasLayout, поэтому способ работает в IE, однако способ будет давать разные результаты (см. последнюю картинку) в IE и остальных браузерах
О чем вы???? Там же речь о .clearfix:after
Имхо главная ошибка — в способе очистке, который вы демонстрируете. Потому что 1) overflow:hidden используется не по назначению 2) имеет побочные эффекты, которые нежелательны (о чем я и написал выше).
но инлайн блоки ничем не лучше флоатов…
тем, что используются не по назначению ;-)
Единственное что более или менее помогало, либо
display: table-cell;, либоdisplay: inline; float: left; + еще что-то для одинакового отображения с остальными браузерами, естественно это подключалось через хаки только для FF2, но это соответственно только если от блоков не требуется бытьposition: relative;или других «исключительно блочных» свойств.Но вот что всегда приятно удивляло — правильная работа инлайновых блоков в IE6 )
https://developer.mozilla.org/en/XUL_Tutorial/Stack_Positioning
заверни внутренности в какой-нибудь спан и они перестанут наслаиваться.
Инфы об этом мало очень, а про хорошее кроссбраузерное решение вообще только недавно начали описывать, так что приходиться пользоваться, «а вроде» или «а я где то слышал» )
А я не докапываюсь, просто недоумеваю, почему самое известное решение, которое давно-давно публикуется (на хабре в частности) прошло мимо автора.
>смело отказываться от float в пользу display:inline-block
хрен не есть такой сладкий как редька (с). но это лучше overflow
> вариант с overflow в большинстве случаев быстрее, семантичнее и безгеморройнее вариантов с добавочными (псевдо)элементами…
Я же объяснил — может возникнуть геморрой со всякими popup элементами привязанными к блокам внутри overflow.
Семантичность — это не мой идол. Поэтому я не понимаю какое отношение к семантике имеет то или иное css-свойство отвлеченного класса ".clearfix"?
> (пустой), единственное назначение которого — исправить нежелательное
Ну так речи то о доп.элементе нет. Есть речь о классе котейнера с float элементами.
а что вы сами скажите о
<div class="clear"></div>?.clear {
clear:both;
position:relative;
font-size:0px;
height:0px;
line-height:0px
}
Опять же не вижу проблемы
DIV — это пустой элемент, т.е. ничто
Соотв. DIV выглядит более уместно, если речь идёт про семантику. И уж тем более класс
clearвыглядит умнее атрибутаclear.H1 — заголовок, A — ссылка, BR — перевод строки, DIV — стерильный контейнер блочного типа.
Ну а Tidy и W3C Validator — это две разные вещи.
Да и вообще неясно о чём спор — я такие штуки не использую, вы, как я понимаю, тоже… )
Вот хочется чтобы код был аккуратненьким, без всего лишнего, а на практике всегда всякие левые дивы получаются, и т.д.((
Конечно, никто не запрещается для саморазвития писать «сверхправильный» код, но когда несовершенство браузеров, которые до сих пор довольно кривые, то правильность кода отпадает на второй план и остается лишь вопрос совместимости со всеми браузерами.
Мне гораздо легче пожертвовать всей семантикой и стандартами, взамен более производительной работы и хорошей совместимости со всеми браузерами.
Я для себя так решил: пока браузеры не станут по-человечески поддерживать стандарты (возможно когда выйдет XHTML 2), то и мне нет смысла полностью писать стандартизированный код. Если возможно, то, конечно я напишу просто и чтобы соответствовало всем правилам.
Просто стоит признаться, что пользователю сайта глубоко плевать как он написан, ему лишь бы видеть правильно сформированную страницу.
часто использую width:100%; float: left
кстати, предлагаю дополнить статью свобной таблицей совместимости вариантов float-сброса с браузерами: www.ejeliot.com/samples/clearing/rule-support.html
:)
Век живи, век учись. А к горшку вас давно приучили?
Я стараюсь всегда пользоваться связкой overflow:hidden + zoom:1, в случаях, когда что-то нужно вытащить из контейнера, я делаю dot-clearing.
Насчёт терминологии — мне кажется, что прямой перевод «очистка» звучит крайне нелепо. Чаще всего в разговорах говорю прямо «клиаринг», а в письменной речи стараюсь привить термин «выключка» — у него конечно есть некоторая типографская история, связанная с выравниванием, но всё же мне кажется, что это удачный вариант. Выключаем действие float-контейнера, начинаем новый нормальный поток.
А иллюстрации и впрямь получились очень наглядные. Блок с цветом + его свойства — всё это легко запоминается.