Вплив float на батьківський елемент у CSS
Розбираємо, чому елементи з float не враховуються у висоті батьківського контейнера та як це впливає на верстку.
Вплив float на батьківський елемент у CSS
Плаваючі елементи мають особливість: вони можуть випадати з розрахунку висоти свого батьківського елемента.
Через це батьківський блок може втратити свою висоту, навіть якщо всередині нього знаходиться зображення.
Картинка без float
Спочатку створимо контейнер div із зображенням без використання float.
<div>
<img src="img.png" alt="">
</div>div {
border: 1px solid red;
}Картинка з float: left
Тепер додамо зображенню float зі значенням left.
img {
float: left;
}Чому це відбувається
Елементи з float вилучаються з нормального потоку документа, тому батьківський елемент більше не враховує їхню висоту.
- Звичайний елемент збільшує висоту батька.
- Елемент із float не впливає на висоту батьківського контейнера.
- Батьківський блок може стати порожнім з точки зору висоти.
Картинка з float: right
Якщо замість left використати right, поведінка батьківського елемента залишиться такою ж.
img {
float: right;
}Як виправити проблему
Щоб батьківський блок знову враховував висоту float-елементів, використовують спеціальні методи очищення float.
- clear: both — очищення обтікання.
- Створення псевдоелемента ::after.
- Використання overflow: hidden або overflow: auto.
- Сучасний спосіб — Flexbox або Grid.
Ця проблема називається 'collapsing parent' або 'згортання батьківського контейнера' через float.
Практичне завдання
- №1. Створіть div із зображенням всередині.
- №2. Додайте div червону межу.
- №3. Перевірте результат без float.
- №4. Додайте img { float: left; }.
- №5. Порівняйте висоту батьківського елемента.
- №6. Замініть left на right.
💡 Показати підказку
float виводить елемент із нормального потоку, тому батьківський блок перестає бачити його висоту.