Martin Michálek Martin Michálek  – 4. 12. 2020

„Box Alignment“ je modul specifikace CSS, který definuje zarovnání boxů v různých modelech rozvržení CSS: blokovém, tabulkovém, vícesloupcovém, flexboxu nebo gridu.

V tomto textu se podíváme na jednotlivé vlastnosti pro zarovnávání layoutů. Specifikace „Box Alignment Module Level 3“ v podstatě převzala všechna zarovnání a rozdělení prostoru definovaného ve flexboxu, něco přidala a zpřístupnila je ostatním systémům pro layout.

Nijak se zde nezabýváme zarovnáváním textu (vlastnosti jako text-align, vertical-align) ani staršími (ale stále funkčními) metodami zarovnávání boxů pomocí margin a tak dále.

Rychlý tahák k vlastnostem

Vlastností, které obstarávají zarovnávání v CSS, je na jednu webařskou hlavu opravdu hodně. Naštěstí jsou ale ty nejdůležitější z nich pojmenované podle jednoduchého klíče.

Než vyberete tu správnou, musíte si ujasnit:

  1. Směr zarovnávání (hlavní osa je obvykle vodorovná, jinak též řádková; příčná osa svislá, jinak též bloková). Na obrázku výše se podívejte k šipkám.
  2. Co budete zarovnávat (všechny položky, jednu položku, nebo obsah mezi nimi). Na obrázku výše se podívejte do layoutu.
Hlavní osa
justify-*
Příčná osa
align-*
Zarovnání položek
*-items
justify-items align-items
Zarovnání sebe sama
*-self
justify-self align-self
Distribuce obsahu
*-content
justify-content align-content

Jen připomínám, že směr hlavní a příčné osy rozvržení se může změnit – například pomocí vlastnosti flex-direction nastavené na column.

V tabulce nejsou obsaženy zdaleka všechny zarovnávací vlastnosti, na ty se pojďme podívat hned v další části textu.

Jak si zapamatovat správný směr?

Docela dlouho se trápím s tím, jak si bez taháku zapamatovat správný směr zarovnání. „Justify“ je totiž většinou vodorovný, „align“ pak svislý směr.

Na asi nejlepší trik mě v jedné diskuzi přivedl David Grudl. Přitom je to tak prosté, podívat se do anglicko-českého slovníku:

  • „justify“ znamená „zarovnat“ (text)
  • „align“ znamená „srovnat“ (do roviny)

Další mnemotechnickou pomůckou může být, že „justify“ je typ zarovnání, který se vždy používá pro text, tedy u nás vodorovný směr.

Musíme ovšem zapomenout na to, že nejen různé textové editory, ale i samotné CSS (text-align) nás to léta učily špatně.

Následuje už referenční příručka k jednotlivým vlastnostem. Každou vlastnost si zde můžete rozkliknout a dostat se tak na její specifikaci.

Zarovnání položek (*-items)

Na kontejneru definujeme, jak se budou zarovnávat jednotlivé položky.

justify-items

Vlastnost justify-items

Zarovnání na řádkové ose (obvykle vodorovně).
Např. justify-items:center centruje všechny položky.

align-items

Vlastnost align-items

Zarovnání na blokové ose (obvykle svisle).
Např. align-items:end zarovná položky ke spodní hraně kontejneru.

place-items

Vlastnost place-items

Zkratka pro zarovnání položek v obou směrech.
Např. place-items:end center zarovná položky ke spodní hraně a vodorovně na střed.

Zarovnání samostatné položky (*-self)

Pro konkrétní položku definujeme, jak se bude zarovnávat.

justify-self

Vlastnost justify-self

Zarovnání na řádkové ose (obvykle vodorovně).
Např. justify-self:center vodorovně centruje položku.

align-self

Vlastnost align-self

Zarovnání na blokové ose (obvykle svisle).
Např. align-self:end zarovná položku ke spodní hraně.

place-self

Vlastnost place-self

Zkratka pro zarovnání jednotlivé položky v obou směrech.
Např. place-self:end center zarovná položku ke spodní hraně a vodorovně doprostřed.

Distribuce prostoru mezi položkami (*-content)

Vlastnosti, které řídí rozdělení volného prostoru, jenž uvnitř kontejneru zůstává mezi položkami.

gap

CSS vlastnost gap

Definice mezery mezi buňkami.
Např. gap:1rem definuje mezeru 1rem v obou směrech.

justify-content

Vlastnost justify-content

Rozdělení prostoru na řádkové ose (obvykle vodorovně).
Např. justify-content:space-between rozdělí prostor mezi položky.

align-content

Vlastnost align-content

Rozdělení prostoru na blokové ose (obvykle svisle).
Např. align-content:start zajistí zarovnání položek k horní hraně kontejneru.

place-content

Vlastnost place-content

Zkratka pro rozdělení prostoru v obou směrech.
Např. place-content:start space-between zarovná položky k horní hraně a vodorovně dělí prostor.

Změna pořadí

order

CSS vlastnost order

Změna pořadí prvků layoutu.
Např. order:-1 přesune položku před všechny ostatní.

Některé zarovnávací vlastnosti nefungují ve flexboxu

Vlastnosti justify-itemsjustify-self nejsou dostupné pro layouty tvořené flexboxem.

Namísto justify-items můžeme použít starý dobrý margin nebo pro centrování třeba justify-content. Stejně tak nebudou fungovat zkratky place-itemsplace-self.

Hlavní osa
justify-*
Příčná osa
align-*
Oba směry
place-*
Zarovnání položek
*-items
justify-items
flex, grid
align-items
flex, grid
place-items
flex, grid
Zarovnání sebe sama
*-self
justify-self
flex, grid
align-self
flex, grid
place-self
flex, grid
Distribuce obsahu
*-content
justify-content
flex, grid
align-content
flex, grid
place-content
flex, grid

Podpora v prohlížečích

Na úrovni celé této velké specifikace je těžké mluvit o podpoře či nepodpoře. Různé prohlížeče mohou nepodporovat některé vlastnosti, některé mohou nepodporovat zase určité hodnoty nebo jejich kombinaci s různými systémy rozvržení, jako je grid, flexbox nebo vícesloupcový layout.

Toto řešíme v textech příručky k jednotlivým vlastnostem. Zde se ale zaměřme na konkrétní zásadnější nedostatky v podpoře.

  • Internet Explorer 11 – pokud ještě musíte podporovat tento prehistorický prohlížeč, je třeba vědět, že vlastnosti pro zarovnání umí jen v kombinaci s flexboxem, nikoliv gridem.
  • Zkratky jako place-self neumí MSIE 11, ale zatím bohužel také Safari, což je daleko nepříjemnější. Na druhou stranu, zkratku place-content Safari ovládá, takže tato vlastnost je použitelná ve většině moderních projektů.
  • Vlastnosti gap v layoutu tvořeném gridem a flexboxem umí všechny prohlížeče, kromě MSIE 11, ale v kombinaci s vícesloupcovým layoutem to je složitější.
  • Vlastnost overflow-position neumí v době psaní textu žádný prohlížeč.

Aby vás to ale neodradilo – celkově vzato jde o část CSS s velmi dobrou podporou a není nutné moc dumat, zda ji jako celek používat nebo ne. Prostě to používejte. Nic jiného vám stejně nezbývá, pokud chcete vytvářet nějaké ty layouty.

Odkazy pro další studium

Udělal jsem maximum pro to, aby vám tento průvodce vystačil a jiné zdroje jste hledat nemuseli. Přesto si neodpustím několik odkazů jinam: