Работает (http://jsfiddle.net/77RRA/1/), а это (http://jsfiddle.net/77RRA/) - нет.CSS clearfix не работает
Не является ли clearfix заменой строки <div style="clear: both;"></div>
?
Работает (http://jsfiddle.net/77RRA/1/), а это (http://jsfiddle.net/77RRA/) - нет.CSS clearfix не работает
Не является ли clearfix заменой строки <div style="clear: both;"></div>
?
"Не clearfix должен заменить строку <div style="clear: both;"></div>?
"
Представьте у вас есть контейнер, содержащий несколько элементов. Если все эти элементы плавают, контейнер эффективно теряет информацию о высоте. Таким образом, маргинальные дни и фоновые стили отображаются неправильно. Clearfix решает эту проблему, добавляя псевдоэлементы до и после элемента контейнера +, устанавливая display: table;
, чтобы растянуть его до полной высоты.
В вашем случае, вам придется добавить clear: both;
на #child
Не clearfix должен заменить линии
<div style="clear: both;"></div>
Да. Clearfix существует, чтобы избежать не семантического пустого тега. Однако для этого вам нужно поместить его на родительский элемент. (Example)
В вашем случае, однако, проблема не в том, что братья и сестры игнорируют перемещаемый элемент. Это не намерение clearfix, вы просто добавляете clear:right
(или both
, как и вы) на свой #child
родной брат, чтобы восстановить нормальный поток документов.
Может быть, вы можете помочь мне понять это? http://jsfiddle.net/BenRacicot/owtqncfb/ – BenRacicot
@BenRacicot, как я пытался объяснить, clearfix должен восстановить высоту * родителей *. Если вы хотите восстановить поток документа, вы просто объявляете «clear: both;» вместо элемента sibling - это, тем не менее, не устраняет проблему, что перемещенные элементы извлекаются из обычного потока документов! Взгляните на ваш модифицированный пример: http://jsfiddle.net/owtqncfb/9/ – Christoph
Спасибо, что ответили! Таким образом, высота родителя должна учитываться с помощью переполнения или самого clearfix ...? – BenRacicot
В вашем случае вы пытаетесь очистить плавающым элемент из себя (с псевдо-элемент, который принадлежит к себе).
Очистка должна быть на элементах, следующих за поплавковыми элементами.
Некоторые другие правила также могут достичь этого.
#main {
background: lightgreen;
width: 100px;
height: 200px;
}
#one {
float: right;
display: block;
}
#child {
background: red;
width: 100%;
height: 20px;
display:inline-block
}
display:inline-block;
очистит этот элемент из плавающых элементов любых сторон.
В то время как 'display: inline-block;' возможно, использовать его невозможно, так как иногда вам нужен другой тип отображения, и в конце концов для этого существует 'clear'. – Christoph
это хорошо для примера (я удалил: после и добавил только это правило). Я считаю, особенно для новичков, что полезно понять, что ясный - это не единственный вариант для борьбы с флотирующим элементом. Элемент элемента floatting имеет поведение, которое может быть очень сложным для понимания между фиксированными, абсолютными, относительными и статическими. Это очень много, и некоторые подсказки помогают учиться самостоятельно. –
Если вы можете объяснить * почему * это работает, тогда я могу принять вашу мысль, иначе я бы просто рассматривал это как еще одну возможность смутить людей. :) – Christoph
-1 Неверно, clearfix * это *, чтобы удалить эти неземные элементы, однако это не относится к проблеме OP! – Christoph