Čo je to zmrštenie okrajov (margin collapse) a na čo sa používa?
sobes.tech AI
Odpoveď od AI
Zlúčenie okrajov (margin collapsing) je mechanizmus v CSS, pri ktorom sa vertikálne okraje dvoch alebo viacerých susedných blokových prvkov, ako aj rodiča a jeho prvého/posledného dieťaťa, nesčítavajú, ale zlučujú do jedného okraja rovného najväčšiemu z nich.
Zlučovanie nastáva v týchto prípadoch:
- Susedné prvky: horný
margin-bottomjedného prvku amargin-topnasledujúceho. - Rodič a prvé/posledné dieťa:
margin-toprodiča amargin-topprvého dieťaťa;margin-bottomrodiča amargin-bottomposledného dieťaťa. Vzniká, ak medzi nimi nie je hranica (border), odsadenie (padding), vložený (inline) obsah alebo ak rodič nie je flex/grid kontajner. - Prázdne bloky:
margin-topamargin-bottomprvku, ak nemá obsah, hranice alebo odsadenia.
Príklad susedných prvkov:
<div style="margin-bottom: 20px;">Prvok 1</div>
<div style="margin-top: 30px;">Prvok 2</div>
V tomto prípade bude vzdialenosť medzi prvkami 30px, nie 50px.
Príklad rodiča a prvého dieťaťa:
<div style="margin-top: 40px;">
<div style="margin-top: 30px;">Dieťa prvok</div>
</div>
Vzdialenosť od horného okraja rodiča po jeho obsah bude 40px.
Na čo sa používa:
Zlučovanie okrajov pomáha udržiavať predvídateľné vertikálne vzdialenosti medzi blokmi v normálnom toku dokumentu, zabraňuje nadbytočným medzerám. Uľahčuje vytváranie zladeného vertikálneho rytmu typografie, pretože dizajnéri môžu nezávisle nastavovať okraje pre odstavce alebo nadpisy a prehliadač sa postará o správne zlúčenie priestoru.
Ako zabrániť zlučovaniu:
- Pridaním hranice (
border) medzi prvkami alebo medzi rodičom a dieťaťom. - Pridaním odsadenia (
padding) medzi prvkami alebo medzi rodičom a dieťaťom. - Použitím vlastnosti
overflows hodnotou odlišnou odvisiblena rodičovskom prvku. - Použitím plávajúceho prvku (
float). - Použitím pozicovania
absolutealebofixed. - Premenením prvkov na kontext formátovania Flexbox alebo Grid (rodičovský prvok).
- Premenením prvku na inline-block.
/* Prevencia pre rodiča a dieťa */
.parent {
border-top: 1px solid transparent; /* alebo padding-top */
}
/* Prevencia pre susedné prvky */
.element + .element {
margin-top: 0; /* alebo border-top */
}