Jak na styly odrážkového seznamu

Představíme vám možnosti stylování odrážkových seznamů pomocí kaskádových stylů.
Nálepky:
Článek původně vyšel na autorově webu Je čas.
CSS vlastnost list-style upravuje vzhled seznamů <ul> a <ol>.
Pro lepší přehlednost se obsah webových stránek kromě do nadpisů a odstavců zadává i do seznamů.
Používají se dva základní typy odrážkových seznamů:
<ul>(unordered list) – nečíslovaný seznam- Položka
- Položka
- Položka
<ol>(ordered list) – číslovaný seznam- Položka
- Položka
- Položka
Kromě toho existují ještě značky <menu> a <dir>. Obě se v prohlížečích chovají přibližně stejně jako <ul>. Element <dir> je „obsolete“ – zastaralý, překonaný. Značku <menu> původně čekal stejný osud, ale nakonec byla znovuzrozena pro kontextovou nabídku s využitím značky <menuitem>.
Srovnání seznamů <ul>, <menu> a <dir>.
Nakonec existujte ještě seznam definiční – <dl>, ten ale ve výchozím stylu žádné odrážky nemá.
Stylování
Pro jiný než výchozí styl seznamů existuje vlastnost list-style. Pomocí list-style v kombinaci s display: list-item jde také vytvořit odrážky z jiných elementů než <li> (ukázka).
Zápis
ul {
list-style: typ umístění obrázek;
}
Vlastnost list-style je zkratkou pro další list-style-* vlastnosti:
list-style-type(typ),list-style-position(umístění),list-style-image(obrázek)
Vzhled stylu seznamu jde nastavovat pro celý seznam (<ul>/<ol>) nebo pro jednotlivé položky <li> (položky mají vyšší váhu).
list-style-type
Stanovuje typ odrážky. Pro nečíslovaný seznam (<ul>) připadají v úvahu.
- puntík –
list-style-type: disc - kolečko –
list-style-type: circle - čtvereček –
list-style-type: square
Pro číslované seznamy je potom několik stylů čísel.
- číslo –
list-style-type: decimal - číslo s nulou na začátku –
list-style-type: decimal-leading-zero - římské číslice –
list-style-type: lower-roman - velké římské číslice –
list-style-type: upper-roman - malá řecká písmena –
list-style-type: lower-greek - malá písmena –
list-style-type: lower-latin - velká písmena –
list-style-type: upper-latin - malá písmena –
list-style-type: lower-alpha - velká písmena –
list-style-type: upper-alpha
Existuje jich ještě mnohem víc pro různé exotické jazyky (např. hiragana, katakana, mongolian atd.).
Zajímavé je, že list-style-type je nezávislý na typu seznamu (<ul>/<ol>). Číslovaný seznam se tak může stát nečíslovaným a obráceně.
V případě zanoření více seznamů do sebe se typicky (dle výchozích stylů prohlížečů) mění styly jednotlivých úrovní.
U nečíslovaných seznamů (<ul>) se v prvních třech úrovních vyskytne tečka, kolečko a čtvereček. V následujících úrovních už je pouze čtvereček.

Nastavit pro všechny úrovně to samé (puntík – disc) dokáže prostý kód:
ul {
list-style: disc;
}
Nastavit si vlastní styl pro jednotlivé úrovně jde nějak takto:
ul {
list-style: circle;
}
ul ul {
list-style: square;
}
ul ul ul {
list-style: disc;
}
U číslovaných seznamů se podobná změna stylu na základě úrovně ve všech rozšířenějších prohlížečích nekoná.
Ukázka – testovací stránka zanořených seznamů
Umístění list-style-position
Odrážky položek seznamu mohou mít dvojí umístění.
- mimo –
list-style-position: outside - uvnitř –
list-style-position: inside
Rozdíl outside (výchozí) a inside je zvlášť patrný u víceřádkových položek, kde vypadá inside většinou špatně.

Odrážka/číslo v případě umístění venku (outside) se zobrazuje mimo element <li>, je tedy nutné, aby byl okolo prostor, má-li se odrážka zobrazit. Ve výchozím CSS proto mají prohlížeče pro seznamy levý padding o hodnotě 40 pixelů.
Obrázková odrážka list-style-image
Jako odrážku jde použít i obrázek.
ul {
list-style-image: url(odrazka.png);
}
V drtivé většině případů ale není list-style-image k užitku, protože chybí kontrola nad umístěním obrázku. Pokud není obrázek odrážky ve velikosti řádku, nebude správně zarovnaný. Jelikož písmo může být různě velké, nejde na to spoléhat, takže je lepší list-style-image vůbec nepoužívat.
Pro obrázkové odrážky se proto používá využívá běžné pozadí (background) pro <li> nebo absolutně posicované :before/:after elementy, kde si jde s požadovaným umístěním vyhrát.
- Obrázkové odrážky stejné ve všech prohlížečích – srovnání odrážek přes
list-style-imageabackground
Pravidlo @counter-style a symbols
Pro možnost si nadefinovat vlastní styl odrážek a číslování bez používání různých hacků v podobě :before/:after, obrázků a posicování jde od Firefoxu 33 používat @counter-style a symbols.
@counter-style
Zápis celého stylu může vypadat následovně:
@counter-style cisla {
/* opakování symbolů (cyclic, fixed, …) */
system: cyclic;
/* symboly */
symbols: 'tři' 'dva';
/* znaky před symbolem */
prefix: "";
/* znaky po symbolu */
suffix: ") ";
/* rozsah, kde se symboly použijí */
range: 2 3;
/* co má číst hlasová čtečka */
speak-as: numbers;
}
Styl se potom připojí podle svého názvu do list-style:
ul {
list-style: cisla;
}
Výsledek bude následovný:

Živá ukázka – Firefox 33+
Funkce symbols
Symbols je potom funkce, která se dá použít přímo v list-style bez nutnosti deklarovat styl pomocí @counter-style. Stejných výsledků jde dosáhnout oběma způsoby – @counter-style se hodí pro deklaraci stylů v rámci celého CSS, aby se styly nemusely v kódu opakovat a šly snadno změnit na jednom místě.
Příklad použití smybols:
ul {
list-style: symbols(cyclic '✔');
}
Živá ukázka – použití symbols
Živá ukázka – totéž s @counter-style
- Hacks.mozilla.org: Introducing @counter-style – kompletní přehled vlastností použitelných v
@counter-style/symbols
Vlastní styl odrážky
Ve starších prohlížečích jde vlastní textové odrážky dosáhnout absolutním posicováním pseudo-elementu :before nebo :after.
- Odrážka
- Odrážka
Odlišná barva odrážky
Ani pro jinou barvu odrážky a obsahu položky neexistuje elegantní řešení. Jedna možnost je obalit obsah v <li>:
- Text položky
Barva odrážky se bere z barvy (color) položky. Takže není možné nastavit jednu barvu pro <ul>/<ul> a druhou pro <li>.
Pokud je komplikované měnit HTML kód (aby byl kolem obsahu v <li> další element), nezbývá něž opět odrážku vytvořit pomocí :before a vhodně ji naposicovat.
Odlišný styl a číslování
S využitím CSS vlastnosti counter (IE8+) jde postup s :before odrážkou použít i pro číslování v odlišném stylu.
Živá ukázka – zajímavější styl číslování
Odkazy
- MDN:
list-style - Jak psát web: Vlastnost
list-style, Seznamy v HTML
Jo, nepoužitelnost list-style-image, stejně jako nepřítomnost čárky/pomlčky coby list-style, mně vždycky vrtaly hlavou. Jinak hezké shrnutí.