Ebben a fejezetben a terminológia egy új elemét kell
bevezetnünk: a "súlyt". A stíluslap-szabályok súlya jelzi, hogy az adott
szabály milyen prioritást élvez. Természetszerűen a nagyobb súlyú szabály
erősebben érvényesül, mint az alacsonyabb súllyal rendelkező.
CSS használatával egyidejűleg egynél több stíluslap is befolyásolhatja
a HTML oldal megjelenését. E tulajdonságnak két fő oka van: a modularitás
és a szerző (tervező) / olvasó - egyensúly.
Modularitás A stíluslap tervezője a redundancia csökkentése
érdekében több stíluslaprész használatát
kombinálhatja:
H1 {color: red} /*
Felülbírálja az importált stílust */
Szerző / olvasó egyensúly: Stíluslappal a szerző és az olvasó is
befolyásolhatja a dokumentum megjelenését. Ehhez mindkettejüknek
ugyanazt a stílusnyelvet kell használniuk, így tükrözve a web egyik
alapvető tulajdonságát: mindenki közzéteheti elképzelését. A böngészők a
saját stíluslapokra hivatkozás kiválasztását szabadon lehetővé teszik.
Néha ellentét merül fel a dokumentum megjelenését meghatározó
stíluslapok között. Az ellentét feloldását a stílusszabályok súlyozása
teszi lehetővé. Alapértelmezésben az olvasó által felállított
stílusszabályok súlya kisebb, mint a dokumentum szerzője által
felállítottaké. Tehát, ha ellentét merül fel egy dokumentum szerzői és
olvasói stíluslapja között, a szerzői stíluslap kerül alkalmazásra. Mind a
szerzői, mind az olvasói stíluslap-szabályok felülbírálják a böngésző
alapértelmezett beállításait.
Az importált stíluslapok szintén jól meghatározott rangsorban állnak
egymással. A rangsor az alább meghatározott szabályok szerint dől el.
Bármely szabály, amely a stíluslapban van leírva, erősebb, mint az
importált stíluslap(ok)ban levő(k). Tehát, az importált stíluslapokban
leírt szabályok súlya kisebb a stílusok rangsorában, mint a stíluslapban
magában leírt szabályoké. Az importált stíluslapok maguk is rekurzívan
importálhatnak és ezáltal felülbírálhatnak más stíluslapokat.
A CSS minden @import utasításának a stíluslap legelején
kell megjelennie, megelőzve minden más deklarációt. Ez megkönnyíti annak
átláthatóságát, hogy melyik stíluslap melyik másikat bírálja felül.
A stíluslapok tervezői deklarációik súlyát megnövelhetik:
H1 {color: black ! important; background: white ! important }
P {font-size: 12pt ! important; font-style: italic }
Ebben a példában az első három deklaráció súlya a fontos!
kiemeléssel meg van növelve, míg az utolsó deklaráció súlya normál.
Egy olvasó által felállított fontos szabály prioritásban
megelőzi a szerző normál súlyú szabályát. A szerző által felállított
fontos szabály prioritásban megelőzi az olvasó által felállított
fontos szabályt.
Ebben a példában a lap háttérszínét beállítottuk
szürkére, és a H1-re vonatkozóan két (részben ellentmondó) utasítást
adtunk. (legyen fekete, majd legyen kék) Normális esetben a később
szereplő utasítás felülbírálná az előzőt, de most az ! important szabály
érvényesül. Ha kitöröljük az első definícióból kitöröljük az important
szabályt, akkor a Címsor kék színű lesz.
A deklaráció-rangsor felállításának szabályai lényegesek a CSS
működésében. Egy elem/tulajdonság páros értékének meghatározásához az
alábbi algoritmust kell követni:
A kérdéses elem/tulajdonság párosra alkalmazott összes
deklaráció előkeresése. A deklaráció akkor 'alkalmazott', ha a
kérdéses elem szelektorként szerepel. Ha nincs az elemhez alkalmazott
deklaráció, az öröklés szabályai érvényesülnek. Ha nincs örökölt érték
(pl.: a HTML elem esetében), a kezdeti értékek lesznek
irányadóak.
A deklarációk explicit súlya szerinti rendezés: az
!important jelölésű deklarációk erősebbek, mint a
jelöletlen (normál) deklarációk.
Eredet szerinti rendezés: A szerző stíluslapjában
meghatározott szabályok mint az olvasó által meghatározottak; mindkettő
erősebb a böngésző alapértelmezett beállításainál. Az importált
stíluslapok eredete megegyezik annak a stíluslapnak az eredetével,
ahonnan importálták.
Szelektor egyedisége szerinti rendezés: Az egyedileg
meghatározott szelektororhoz tartozó szabály erősebb, mint az általános
meghatározásban leírtak. Az egyediség megállapításához meg kell
állapítani a szelektorban található ID attribútumokat
(a), a CLASS attribútumokat (b),
és a tag-nevek számát (c). A három szám
'összeláncolásával' (concatenating) állapítható meg az adott szelektor
egyedisége. A könnyebb megértés kedvéért néhány példa:
LI {...} /* a=0 b=0 c=1 => egyediség = 1 */
UL LI {...} /* a=0 b=0 c=2 => egyediség = 2 */
OL UL LI {...} /* a=0 b=0 c=3 => egyediség = 3 */
LI.red {...} /* a=0 b=1 c=1 => egyediség = 11 */
OL UL LI.red {...} /* a=0 b=1 c=3 => egyediség = 13 */
#x34y {...} /* a=1 b=0 c=0 => egyediség = 100 */
A látszólagos elemeket és látszólagos osztályokat a számítás
során normál elemekként, osztályokként kell figyelembe venni.
Rendezés a meghatározás sorrendje szerint: Ha két szabály
ugyanakkora súllyal bír, a később meghatározott győz. Az importált
stíluslapban leírt szabályok a saját lapban írtak után lesznek csak
figyelembe véve.
A tulajdonság-értékek keresése megszakítható, ha az egyik kiértékelt
szabály súlya egy elem/tulajdonság vonatkozásban egyértelműen nagyobb
bármely más szabályénál.
Egy elem STYLE attribútumában történő deklarációnak
ugyanolyan súlya van, mint egy - a stíluslap végén meghatározott -
ID alapú szelektornak.
A fenti példában a P elem színe vörös (red) lesz. Bár
mindkét deklarációs forma egyedisége megegyezik, mégis - a
rangsor-meghatározás 5. pontjában írt szabály alkalmazása miatt - a
STYLE attribútumban levő deklaráció erősebb lesz a
STYLE elem által tartalmazott deklarációnál.