5 ответов:
я не буду объяснять, как поплавки работают здесь (подробно), так как этот вопрос обычно фокусируется на зачем использовать
clear: both;и что значитclear: both;именно...я буду держать этот ответ простым и по существу, и объясню вам графически, почему
clear: both;требуется или что он делает...обычно дизайнеры плавают элементы, слева или справа, что создает пустое пространство на другой стороне, что позволяет другим элементам занять оставшееся пространство.
почему они плавают элементов?
элементы плавают, когда дизайнеру нужно 2 элемента уровня блока бок о бок. Например, скажем, мы хотим создать базовый веб-сайт, который имеет макет, как показано ниже...
Видео демо-изображения.
Код Для Демо
/* CSS: */ * { /* Not related to floats / clear both, used it for demo purpose only */ box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; } header, footer { border: 5px solid #000; height: 100px; } aside { float: left; width: 30%; border: 5px solid #000; height: 300px; } section { float: left; width: 70%; border: 5px solid #000; height: 300px; } .clear { clear: both; }<!-- HTML --> <header> Header </header> <aside> Aside (Floated Left) </aside> <section> Content (Floated Left, Can Be Floated To Right As Well) </section> <!-- Clearing Floating Elements--> <div class="clear"></div> <footer> Footer </footer>Примечание: возможно, вам придется добавить
header,footer,aside,section(и другие элементы HTML5) какdisplay: block;в вашей таблице стилей для явного упоминания о том, что элементы являются элементами уровня блока.объяснение:
у меня есть основной макет, 1 Заголовок, 1 боковая панель, 1 область содержимого и 1 нижний колонтитул.
нет терки для
header, далее идетasideтег, который я буду использовать для моего сайта боковой панели, так что я буду плавать элемент оставил.примечание: по умолчанию, элемент уровня блока занимает документ 100% ширина, но когда плавал влево или вправо, он будет изменять размер в соответствии с содержание он держит.
Итак, как вы заметили, левый плавал
divоставляет пространство справа неиспользуемым, что позволитdivпосле этого переместиться в оставшееся пространство.
div' S будет отображаться один за другим, если они не плавалиdivбудет смещаться рядом друг с другом, если плавали влево или вправоок, Так вот как ведут себя элементы уровня блока, когда плавают влево или вправо, так почему теперь
clear: both;требуются и почему?так что если вы заметите в макете демо-в случае, если вы забыли, здесь это..
я использую класс под названием
.clearи он содержит свойство с именемclearстоимостьюboth. Так давайте посмотрим, почему это нужноboth.я поплыл
asideиsectionэлементы слева, поэтому предположим сценарий, где у нас есть пул, гдеheaderтвердая земля,asideиsectionплавают в бассейне и подвал снова твердая земля, что-то вроде этот..
таким образом, голубая вода понятия не имеет, какова площадь плавающих элементов, они могут быть больше, чем бассейн или меньше, поэтому здесь возникает общая проблема, которая беспокоит 90% начинающих CSS: почему фон элемента контейнера не растягивается, когда он держит плавающие элементы. Это потому, что элемент контейнера является бассейн здесь бассейн не имеет ни малейшего представления, сколько объектов плавают, или какой длины или ширина плавающих элементов есть, поэтому она просто не будет растягиваться.
- Нормальный Поток Документа
- Секции Поплыли Влево
- Очищенные Плавающие Элементы Растягивают Цвет Фона Контейнера
(см. [Clearfix] раздел этого ответа для аккуратного способа сделать это. Я использую пустой
divпример намеренно для объяснения цель)я привел 3 примера выше, 1-й-это нормальный документооборот, где
redфон будет отображаться так, как ожидалось, так как контейнер не содержит плавающих объектов.во втором примере, когда объект перемещается влево, элемент контейнера (пул) не будет знать размеры перемещаемых элементов и, следовательно, он не будет растягиваться до высоты перемещаемых элементов.
после использования
clear: both;, в элемент контейнера будет растянут до его размеров плавающего элемента.
другая причина
clear: both;используется для предотвращения смещения элемента вверх в оставшемся пространстве.скажем, вы хотите 2 элемента бок о бок и еще один элемент под ними... Таким образом, вы будете плавать 2 элемента влево, и вы хотите, чтобы другие ниже их.
divплавал слева в результатеsectionпереход в остальные космос- сплавлялись
divснят так чтоsectionтег будет отображаться ниже сплавлялисьdivs
Пример 1
Пример 2
и последнее, но не менее важное,
footerтег будет отображаться после плавающих элементов, как я использовалclearкласс перед объявлением мойfooterТеги, что гарантирует, что все плавающие элементы (слева/справа) очищаются до этого момента.
Clearfix
переход к clearfix, который связан с поплавками. Как уже указано @Elky, то, как мы очищаем эти поплавки, не является чистым способом сделать это, поскольку мы используем пустой
divэлемент, который является неdivэлемент предназначен для. Следовательно, здесь идет clearfix.думайте об этом как о виртуальном элементе, который создаст пустой элемент для вас прежде чем ваш родительский элемент закончится. Это позволит самостоятельно очистить ваш элемент обертки, удерживающий плавающие элементы. Этот элемент не будет существовать в вашем DOM буквально, но будет делать свою работу.
чтобы самостоятельно очистить любой элемент обертки, имеющий плавающие элементы, мы можем использовать
.wrapper_having_floated_elements:after { /* Imaginary class name */ content: ""; clear: both; display: table; }Примечание
:afterпсевдо элемент, используемый мной для этогоclass. Это создаст виртуальный элемент для элемента-оболочки непосредственно перед его закрытием. Если мы посмотрим в dom, вы можете увидеть, как это проявляется в Дерево документа.так что если вы видите, он отображается после плавающего ребенка
divгде мы очищаем поплавки, которые не что иное, как эквивалент пустогоdivэлементclear: both;свойство, которое мы используем для этого тоже. Теперь почемуdisplay: table;иcontentнаходится вне этой области ответов, но вы можете узнать больше о псевдо элемент здесь.обратите внимание, что это также будет работать в IE8, как IE8 поддерживает
:afterпсевдо.
Оригинальный Ответ:
большинство разработчиков размещают свой контент слева или справа на своих страницах, вероятно, divs держит логотип, боковую панель, контент и т. д., эти дивы плавают влево или вправо, оставляя остальную часть пространства неиспользуемой и, следовательно, если вы разместите другие контейнеры, он тоже будет плавать в оставшемся пространстве, поэтому для предотвращения этого
clear: both;используется, он очищает все элементы плавали влево или право.демонстрация:
------------------ ---------------------------------- div1(Floated Left) Other div takes up the space here ------------------ ----------------------------------теперь что, если вы хотите сделать другой div рендер ниже
div1, так что вы будете использоватьclear: both;так что это обеспечит вам очистить все поплавки, влево или вправо------------------ div1(Floated Left) ------------------ <div style="clear: both;"><!--This <div> acts as a separator--></div> ---------------------------------- Other div renders here now ----------------------------------
The
clearсвойство указывает, что левая, правая или обе стороны элемента не могут быть смежными с ранее перемещенными элементами в том же контексте форматирования блока. Очищенные элементы задвигаются ниже соответствующих плавающих элементов. Примеры:
clear: none;элемент остается рядом с плавающими элементамиbody { font-family: monospace; background: #EEE; } .float-left { float: left; width: 60px; height: 60px; background: #CEF; } .float-right { float: right; width: 60px; height: 60px; background: #CEF; } .clear-none { clear: none; background: #FFF; }<div class="float-left">float: left;</div> <div class="float-right">float: right;</div> <div class="clear-none">clear: none;</div>
clear: left;элемент толкнул ниже левого плавал элементыbody { font-family: monospace; background: #EEE; } .float-left { float: left; width: 60px; height: 60px; background: #CEF; } .float-right { float: right; width: 60px; height: 120px; background: #CEF; } .clear-left { clear: left; background: #FFF; }<div class="float-left">float: left;</div> <div class="float-right">float: right;</div> <div class="clear-left">clear: left;</div>
clear: right;элемент толкнул ниже справа плавали элементыbody { font-family: monospace; background: #EEE; } .float-left { float: left; width: 60px; height: 120px; background: #CEF; } .float-right { float: right; width: 60px; height: 60px; background: #CEF; } .clear-right { clear: right; background: #FFF; }<div class="float-left">float: left;</div> <div class="float-right">float: right;</div> <div class="clear-right">clear: right;</div>
clear: both;элемент толкнул ниже всех плавающих элементовbody { font-family: monospace; background: #EEE; } .float-left { float: left; width: 60px; height: 60px; background: #CEF; } .float-right { float: right; width: 60px; height: 60px; background: #CEF; } .clear-both { clear: both; background: #FFF; }<div class="float-left">float: left;</div> <div class="float-right">float: right;</div> <div class="clear-both">clear: both;</div>
clearне влияет на поплавки вне текущего контекста форматирования блокаbody { font-family: monospace; background: #EEE; } .float-left { float: left; width: 60px; height: 120px; background: #CEF; } .inline-block { display: inline-block; background: #BDF; } .inline-block .float-left { height: 60px; } .clear-both { clear: both; background: #FFF; }<div class="float-left">float: left;</div> <div class="inline-block"> <div>display: inline-block;</div> <div class="float-left">float: left;</div> <div class="clear-both">clear: both;</div> </div>
просто попробуйте удалить
clear:bothсобственность отdivСclasssampleи посмотрите, как это следует за плавающейdivs.
ответ Мистера инопланетянина идеален, но в любом случае я не рекомендую использовать
<div class="clear"></div>потому что это просто хак, который делает разметку грязные. Это бесполезно пустойdivС точки зрения структуры и семантики, это также делает ваш код не гибкий. В некоторых браузерах этот div вызывает дополнительную высоту, и вы должны добавитьheight: 0;что еще хуже. Но настоящие неприятности начинаются, когда вы хотите добавить фон или границу вокруг ваших плавающих элементов - он просто рухнет, потому что веб был разработан плохо. Я рекомендую обернуть плавающие элементы в контейнер, который имеет clearfix правило CSS. Это хак, а также, но красивый, более гибкий в использовании и читаемый для человека и SEO роботов.
когда вы хотите, чтобы один элемент помещался в нижней части другого элемента вы используете этот код в CSS. Он используется для поплавков.
Если вы плаваете содержание вы можете плавать влево или вправо... таким образом, в общем макете у вас может быть левый навигатор, контент-div и нижний колонтитул.
чтобы нижний колонтитул оставался ниже обоих этих поплавков (если вы плавали влево и вправо) , то вы ставите нижний колонтитул как
clear: both.таким образом он будет оставаться ниже как поплавки.
(Если вы не только очистка слева, то вам действительно нужно только
clear: left;.)проходим этот урок:







Comments