Схлопування відступів (margin) у CSS, Vaden Pro

margin

Бувають моменти, коли вертикальні відступи верхнього і нижнього margin приводять верстальника-початківця в подив. Розглянемо такий варіант на прикладі:

Верстальник очікує побачити таке:

відступів

Однак на практиці виходить зовсім інша картина:

margin

І тоді постає питання: чому немає деяких відступів?

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

Схлопування маржин - це напливання граничних відступів один на одного.

Варто звернути увагу, що схлопування піддається тільки вертикальний margin. При цьому у горизонтального маржина такої особливості не спостерігається.

Як це виглядає практично?

Схлопування виглядає так, наприклад, у нас є картинка з підписом:

Всупереч очікуванням відступ між картинкою та її підписом не дорівнюватиме 35 px, більший маржин поглине менший, отже, картинку та її підпис розділить шлях у 25 px.

Дочірні елементи та їхні батьки

У такому випадку відступ від тега h1 і тега p буде дорівнює 30px. Отже, дочірній елемент, у якого більший відступ, потягне за собою і батька, а батьківський відступ зхлопнеться з дочірнім.

Єдиним варіантом, коли відступи сумуються є випадок, якщо вони мають різноіменні знаки (один має знак +, інший знак -)

Чим це допоможе?

Ця властивість вертикального margin стане в нагоді при розмітці тексту. Приміром якщо тегу p задати:

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

Коли схлопування не відбувається?

Схлопування не відбудеться, якщо:

  1. Елемент має якийсь paddingабо border;
  2. Блок є кореневим;
  3. Блок або дочірній плаваючий елемент;
  4. Блок має повну позицію;
  5. Блок або дочірній елемент є малим.
  6. У блока встановлено відмінний від стандартного контекст форматування.