margin
Vlastnost definuje vnější část box modelu, vytváří prostor kolem prvku, mimo všechny definovaných hranic.
Okraje se nastavují pomocí délek, procent nebo klíčového slova auto
a mohou mít záporné hodnoty. Zde je příklad:
.box ( margin: 0 3em 0 3em; )
margin
je zkratková vlastnost a přijímá až čtyři hodnoty, které jsou uvedeny zde:
.box ( margin: || || || )
Pokud jsou nastaveny méně než čtyři hodnoty, předpokládají se chybějící hodnoty na základě definovaných hodnot. Například následující dvě sady pravidel by získaly stejné výsledky:
.box ( margin: 0 1.5em; ) .box ( margin: 0 1.5em 0 1.5em; )
Pokud je tedy definována pouze jedna hodnota, nastaví se všechny čtyři okraje na stejnou hodnotu. Pokud jsou deklarovány tři hodnoty, je margin: (top) (left-and-right) (bottom);
.
Libovolný z jednotlivých okrajů lze deklarovat pomocí longhand, v takovém případě byste definovali pouze jednu hodnotu pro každou vlastnost:
.box ( margin-top: 20px; margin-right: 10px; margin-bottom: 20px; margin-left: 10px; )
auto
a centrování
Každá z vlastností okraje může také přijmout hodnotu auto
. Hodnota v auto
podstatě říká prohlížeči, aby pro vás definoval okraj. Ve většině případů bude hodnota auto
ekvivalentní hodnotě 0
(což je počáteční hodnota pro každou vlastnost okraje) nebo jakémukoli prostoru, který je k dispozici na této straně prvku. Je však auto
užitečné pro horizontální centrování:
.container ( width: 980px; margin: 0 auto; )
V tomto příkladu jsou provedeny dvě věci, aby se tento prvek vycentroval vodorovně v rámci dostupného prostoru:
- Prvek má zadanou šířku
- Levý a pravý okraj jsou nastaveny na
auto
Bez zadané šířky auto
by hodnoty v podstatě neměly žádný účinek, nastavení levého a pravého okraje na 0
nebo jinak na jakýkoli dostupný prostor uvnitř nadřazeného prvku.
Je také třeba zdůraznit, že auto
je to užitečné pouze pro horizontální centrování, a proto použití auto
pro horní a dolní okraj nebude centrovat prvek vertikálně, což může být pro začátečníky matoucí.
Sbalující se okraje
Svislé okraje na různých prvcích, které se navzájem dotýkají (tedy nemají žádný obsah, polstrování nebo hranice je oddělují), se sbalí a vytvoří jediný okraj, který se rovná většímu z přilehlých okrajů. To se neděje na vodorovných okrajích (vlevo a vpravo), pouze na svislých (nahoře a dole).
Pro ilustraci použijte následující HTML:
Collapsing Margins
Example text.
A následující CSS:
h2 ( margin: 0 0 20px 0; ) p ( margin: 10px 0 0 0; )
V tomto příkladu má h2
prvek spodní okraj 20px. Prvek odstavce, který na něj ve zdroji bezprostředně navazuje, má horní okraj nastavený na 10 pixelů.
Zdá se, že zdravý rozum naznačuje, že tloušťka svislého okraje mezi h2
odstavcem by byla celkem 30px (20px + 10px). Ale kvůli kolapsu okraje bude skutečná tloušťka nakonec 20px. To je ukázáno v níže vloženém peru:
Podívejte se na toto pero!
Ačkoli se na první pohled mohou kolabující okraje zdát neintuitivní, jsou skutečně užitečné z několika důvodů. Nejprve zabrání prázdným prvkům v přidávání dalšího, obvykle nežádoucího, svislého okrajového prostoru.
Zadruhé umožňují konzistentnější přístup k deklarování univerzálních okrajů napříč prvky stránky. Například nadpisy mají obvykle svislý okraj, stejně tak odstavce. Pokud se okraje nesbalily, nadpisy, které následují po odstavcích (nebo naopak), by často vyžadovaly resetování okrajů u jednoho z prvků, aby se dosáhlo konzistentního množství svislých mezer.
Za třetí, sbalení okraje platí také pro vnořené prvky. Podívejte se na následující pero:
Podívejte se na toto pero!
Zde má prvek odstavce horní okraj nastavený na 30 pixelů a je vnořený do div
prvku s horním okrajem 40 pixelů. Kromě toho má h2
prvek spodní okraj 20px.
Zdravý rozum by opět naznačoval, že celkový prostor svislého okraje by zde byl 90px (20px + 40px + 30px), ale místo toho se všechny okraje sbalí do jediného okraje 40px (nejvyššího ze tří). To je užitečné ve většině případů, protože není nutné předefinovat horní okraj, aby se odstranil další svislý prostor.
Negativní marže
Jak můžete tušit, zatímco kladná hodnota marže tlačí další prvky pryč, záporná marže buď vytáhne samotný prvek v tomto směru, nebo vytáhne další prvky směrem k němu.
Zde je příklad kontejneru s polstrováním a záhlaví h2 má záporné okraje, které se táhnou skrz toto polstrování zpět k okrajům:
Podívejte se na
Nejběžnější případ použití pera pro negativní marže od Chrisa Coyiera (@chriscoyier)
na CodePen.
Zde je příklad, kdy první odstavec má záporný spodní okraj, který táhne další odstavec proti.
Podívejte se na Pen
Negative Margin, který táhne spodní odstavec Chrisa Coyiera (@chriscoyier)
na CodePen.
Podpora prohlížeče
Chrome | Safari | Firefox | Opera | TJ | Android | iOS |
---|---|---|---|---|---|---|
Funguje | Funguje | Funguje | Funguje | Funguje | Funguje | Funguje |
IE6 je náchylný k zdvojnásobené chybě float-margin, kterou lze ve většině případů vyřešit přidáním display: inline
k floatovanému prvku.