Úloha 3 – Kaskádování a specifikace stylů v CSS
Úvod k úloze
Samotné psaní CSS pravidel je jen začátek. Skutečná síla (a někdy i záludnost) CSS spočívá v tom, že styly se kaskádují – tedy vrství a kombinují podle určité logiky. Pokud dva různé selektory určují pro stejný prvek rozdílný vzhled, musí prohlížeč rozhodnout, který z nich má přednost. Tento proces se nazývá kaskádování a specifikace stylu. Správné porozumění těmto pravidlům je klíčové, jinak se snadno ocitnete v situaci, kdy „styly nefungují“ – přitom fungují, jen jinak, než čekáte.
Teorie a principy
-
Kaskádování (cascading)
-
Pokud má prvek více stylů, uplatní se poslední platné pravidlo (pokud není ovlivněno specifitou nebo
!important). -
Pořadí načítání souborů a zápisu v kódu má tedy význam.
-
-
Specifita (specificity)
-
Určuje „sílu“ selektoru. Čím konkrétnější selektor, tím má vyšší váhu.
-
Zjednodušené pořadí síly:
-
inline styly (nejvyšší, např.
style="color:red") -
ID selektory (
#id) -
třídní, atributové a pseudotřídy (
.class,[type=text],:hover) -
elementy a pseudoelementy (
p,h1,::before) -
univerzální selektor
*(nejnižší)
-
-
-
Pravidlo
!important-
Přepíše všechny ostatní styly, bez ohledu na pořadí a specifitu.
-
Používat jen výjimečně – jinak vzniká chaos.
-
Příklad:
-
Praktické příklady kódu
Konflikt stylů podle pořadí
Výsledná barva: zelená (poslední pravidlo má přednost).
Konflikt stylů podle specificity
Výsledná barva: červená (ID má vyšší váhu než třída i element).
Použití !important
Výsledná barva: zelená (přetlačilo !important).
Typické chyby / záludnosti
-
Přehnané používání
!important– vede k nepřehlednému a těžko udržovatelnému kódu. -
Nerozpoznání vlivu specificity – studenti si často myslí, že poslední pravidlo vždy vyhraje, ale ID či inline styl může mít přednost.
-
Zapomenuté pořadí načítání souborů – pokud načtete
reset.csspo svémstyle.css, může vám přepsat vlastní styly. -
Stejná specifita → rozhoduje pořadí v kódu.
Shrnutí
-
Kaskádování = vrstvení pravidel podle pořadí, specificity a
!important. -
Specifita určuje sílu selektoru: inline > ID > class/pseudotřídy > elementy > univerzální selektor.
-
!importantpřebíjí všechno ostatní, ale má se používat jen výjimečně. -
Konflikty stylů se řeší pochopením této hierarchie, ne chaotickým přidáváním
!important.