Що робить таке правило CSS:
.clear { clear: both; }
І навіщо нам це використовувати?
Що робить таке правило CSS:
.clear { clear: both; }
І навіщо нам це використовувати?
Відповіді:
Я не буду пояснювати, як поплавці працюють тут (докладно), оскільки це питання, як правило, фокусується на тому, Чому використовувати clear: both;
АБО, що clear: both;
саме робить ...
Я буду тримати цю відповідь простою і до речі, і графічно поясню вам, чому clear: both;
це потрібно чи що він робить ...
Зазвичай дизайнери плавають елементами вліво або вправо, що створює порожній простір з іншого боку, що дозволяє іншим елементам займати простір, що залишився.
Елементи плавають тоді, коли дизайнеру потрібні два елементи рівня блоку поруч. Наприклад, ми хочемо створити базовий веб-сайт, який має макет, як показано нижче ...
Живий приклад демонстраційного зображення.
Код для демонстрації
Примітка: Ви , можливо , доведеться додати header
, footer
, aside
, section
(і інші елементи HTML5) , як display: block;
в таблиці стилів для явного згадування про те , що елементи є елементами рівня блоку.
У мене є основний макет, 1 заголовок, 1 бічна смужка, 1 область вмісту та 1 колонтитул.
Не плаває header
, далі йде aside
тег, який я буду використовувати для бічної панелі свого веб-сайту, тому я буду плавати елементом вліво.
Примітка: Елемент рівня блоку за замовчуванням займає документ на 100% ширини, але коли плаває ліворуч або праворуч, він буде змінювати розмір відповідно до вмісту, який він містить.
Отже, як ви зазначаєте, лівий плаваючий div
залишає простір праворуч невикористаним, що дозволить div
перейти після нього в інший простір.
div
буде виведено один за одним, якщо вони НЕ плаваютьdiv
зміститься один біля одного, якщо пливе ліворуч або праворучГаразд, ось так поводяться елементи рівня блоків, коли пливуть ліворуч або праворуч, так що тепер, чому це clear: both;
потрібно і чому?
Тож якщо ви відзначите в демонстраційній версії макета - якщо ви забули, ось воно ..
Я використовую клас, який називається, .clear
і він містить властивість, яку називають clear
зі значенням both
. Тож давайте подивимось, для чого це потрібно both
.
Я проплив aside
і section
елементи ліворуч, тож припустимо сценарій, коли у нас є басейн, де header
тверда земля, aside
і section
пливуть у басейні, а колонтитул знову тверда земля, щось подібне ..
Отже, блакитна вода не має поняття, яка площа плаваючих елементів, вони можуть бути більшими, ніж пул або меншими, тому тут виникає поширене питання, яке турбує 90% початківців CSS: чому фон елемента контейнера не розтягується коли він містить плаваючі елементи. Це тому, що контейнерний елемент є POOL тут, і POOL не має уявлення, скільки об’єктів плаває, або яка довжина або ширина плаваючих елементів, тому він просто не розтягнеться.
(Для чіткого способу зверніться до розділу [Clearfix] цієї відповіді. Я div
навмисно використовую порожній приклад для пояснення)
Я подав 3 приклади вище, 1-й - це звичайний документообіг, де red
фон буде відображатися так, як очікувалося, оскільки контейнер не містить плаваючих об'єктів.
У другому прикладі, коли об’єкт пливе ліворуч, елемент контейнера (POOL) не буде знати розмірів плаваючих елементів і, отже, не розтягнеться до висоти плаваючих елементів.
Після використання clear: both;
елемент контейнера буде розтягнуто до розмірів плаваючого елемента.
Ще одна причина, clear: both;
яка використовується - це запобігання переміщенню елемента на інший простір.
Скажіть, що ви хочете, щоб 2 елементи були поруч і ще один елемент під ними ... Отже, ви будете плавати 2 елементи вліво, а ви хочете, щоб інший був під ними.
div
Поплавок ліворуч призводить до section
переміщення у залишок місцяdiv
очищений, щоб section
тег відображався нижче плаваючого div
s І останнє, але не менш важливе, footer
тег буде надано після плаваючих елементів, оскільки я використовував clear
клас до оголошення моїх footer
тегів, що гарантує, що всі плаваючі елементи (зліва / справа) будуть очищені до цього моменту.
Перехід до чіткого виправлення, яке пов'язане з плаваючими елементами. Як уже вказав @Elky , спосіб очищення цих плавців - це не простий спосіб зробити це, оскільки ми використовуємо порожній div
елемент, який не є div
елементом. Звідси випливає чітке виправлення.
Подумайте про це як про віртуальний елемент, який створить для вас порожній елемент до того, як закінчиться ваш батьківський елемент. Це самоочистить ваш елемент обгортки, утримуючи плаваючі елементи. Цей елемент не буде існувати у вашому домені буквально, але зробить цю роботу.
Для самоочищення будь-якого елемента обгортки, що має плаваючі елементи, ми можемо використовувати
.wrapper_having_floated_elements:after { /* Imaginary class name */
content: "";
clear: both;
display: table;
}
Зверніть увагу на :after
псевдоелемент, який я використовував для цього class
. Це створить віртуальний елемент для обгорткового елемента перед тим, як він закриється. Якщо ми подивимось на будинок, то можна побачити, як це відображається у дереві документа.
Отже, якщо ви бачите, це відображається після плаваючої дитини, div
де ми очищаємо поплавці, що є не що інше, як мати порожній div
елемент із clear: both;
властивістю, яке ми також використовуємо для цього. Тепер чому display: table;
і content
не в цій області відповідей, але ви можете дізнатися більше про псевдоелемент тут .
Зауважте, що це також буде працювати в IE8, оскільки IE8 підтримує :after
псевдо .
Більшість розробників плаває свій вміст ліворуч або праворуч на своїх сторінках, ймовірно, диви з логотипом, бічною панеллю, вмістом тощо. Ці диви плаваються ліворуч або праворуч, залишаючи решту місця невикористаним, отже, якщо ви розмістите інші контейнери, він буде пливіть також у залишковому просторі, тому для запобігання clear: both;
використанню, він очищає всі елементи, що плавали вліво або вправо.
------------------ ----------------------------------
div1(Floated Left) Other div takes up the space here
------------------ ----------------------------------
Тепер що робити, якщо ви хочете зробити інший візуалізатор, представлений нижче div1
, так що ви будете використовувати clear: both;
його, це забезпечить очищення всіх поплавків, ліворуч або праворуч
------------------
div1(Floated Left)
------------------
<div style="clear: both;"><!--This <div> acts as a separator--></div>
----------------------------------
Other div renders here now
----------------------------------
display: inline-block
елемент і на батьківський, який ви можете використовувати text-align: left
, text-align: center
або, text-align: right
наприклад,
clear
Властивість вказує , що зліва, справа або з обох сторін елемента не може бути поруч з раніше розміщених елементів в контексті форматування ж блоку. Очищені елементи висуваються нижче відповідних плаваючих елементів. Приклади:
clear: none;
Елемент залишається поруч із плаваючими елементамиclear: left;
Елемент, просунутий нижче лівих плаваючих елементівclear: right;
Елемент, просунутий нижче правого плаваючого елементаclear: both;
Елемент просунувся нижче всіх плаваючих елементівclear
не впливає на плаває поза поточним контекстом форматування блокуdisplay: inline-block;
властивість css з цього сценарію? Він потягне inline-block
батьківський елемент до свого рідного елемента, який має клас float-left
. Це означає, що "чітко не впливає на плаває за межами поточного контексту форматування блоку" неправильно. Чи можете хтось пояснити, будь ласка?
display: inline-block
означає, що він більше не генерує контекст форматування блоку (b) плаває / очищається всередині цього елемента, і перший поплавок стає частиною одного контексту форматування блоку (область перегляду).
Просто спробуйте вилучити clear:both
властивість з div
с class
sample
і перегляньте, як воно слід плавати divs
.
Відповідь містера Алієна ідеальна, але все одно я не рекомендую користуватися, <div class="clear"></div>
оскільки це просто злом, який робить вашу розмітку брудною. Це марно порожнє div
з точки зору поганої структури та семантики, це також робить ваш код не гнучким. У деяких браузерах цей дів спричиняє додаткову висоту, і ви повинні додати, height: 0;
що ще гірше. Але справжні неприємності починаються, коли ви хочете додати тло або рамку навколо плаваючих елементів - воно просто зруйнується, оскільки веб-дизайн був погано розроблений . Я рекомендую загортати плаваючі елементи в контейнер, у якому є чітко виправлене CSS правило. Це також хак, але красивий, гнучкіший у використанні та читабельний для людей та SEO роботів.
clearfix
: stackoverflow.com/questions/211383/…
Коли ви хочете, щоб один елемент був розміщений внизу іншого елемента, ви використовуєте цей код у CSS. Він використовується для поплавців.
Якщо ви плаваєте вмістом, ви можете плавати ліворуч або праворуч ... тож у загальному макеті у вас можуть бути лівий навичок, розділ вмісту та колонтитул.
Щоб колонтитул залишався нижче обох цих поплавків (якщо ви плавали ліворуч та праворуч), ви ставите колонтитул як clear: both
.
Таким чином він залишиться нижче обох поплавків.
(Якщо ви лише розчищаєте ліворуч, тоді вам потрібно дійсно clear: left;
.)
Пройдіть цей підручник:
float
і хочете наступний елемент внизу, а не справа чи зліва.