Як прибрати обтікання і розкрити батьківський блок з float елементами

Коли всередині батьківського блоку знаходяться тільки float (плаваючі) елементи, то батьківський блок схлопивается. Як прибрати обтікання і розкрити батьківський блок розглянемо далі.

Перед тим як почати, давайте позначимо деякі визначення:
- батьківським блоком можна назвати будь-який блок щодо вкладених в нього блоків, наприклад блок

    - батьківський для вкладених в нього елементів списку -
  • ;
    - дочірній блок - це відповідно будь-який вкладений блок щодо боки верхнього рівня.

    Позначимо проблему з обтічністю

    Зробимо звичайний список, елементи якого мають float: left;

    В результаті батьківський блок схлопивается:
    (Для наочності я прописав червоний бордер для батьківського елемента)

    Як прибрати обтікання і розкрити батьківський блок з float елементами

    Для того щоб цього не відбувалося необхідно прибрати обтічність після елементів списку і для цього є кілька способів.

    Прибрати обтічність

    Перший спосіб боротьби - це задати overflow: hidden для батьківського елемента.

    Таким чином ми прибираємо обтічність, батьківський блок розуміє де кінчається плаваючі елементи і схлопування не відбувається.

    Такий варіант може не підійти в разі, якщо у вас меню з випадають підпунктами, тому що батьківський блок буде обрізати випадають елементи.

    Другий спосіб.
    Другий спосіб дуже хороший і має кросбраузерності підтримку. Необхідно батьківський елемент позначити як inline-block і задати 100% ширину.

    Проблему з whitespace`ом у інлайнових елементів можна вирішити почитавши цей пост CSS - як прибрати проміжки між inline блоками?

    Третій спосіб.
    Можна банально додати всередину батьківського блоку, в самому кінці ще один блок, якому прописати стилі з очищенням обтічності.

    І прописати стилі для класу .clear

    Але цей варіант досить не практичний, тому що ми створюємо окремий порожній елемент в нашій верстці, що не їсти гуд

    Четвертий спосіб.
    По суті він відштовхується від попереднього рішення, але замість створення порожнього блоку, ми скористаємося псевдо-елементом: after.

    Ось таке рішення набагато естетичніше!

    Для вас все приклади зі стилю ми виклав в демке, можете потестить на різних браузерах і підібрати собі свій варіант.