Tananyag
15. lecke · Kaszkád és specificitás

3. modul · CSS alapok · 15. lecke

Kaszkád és specificitás

„Beírtam a szabályt, és mégsem az történik!" — ennek a mondatnak a kilencven százaléka erre a leckére vezethető vissza. Megtanulod, mi dönti el, melyik szabály nyer, ha több is vonatkozik ugyanarra az elemre. Ha ezt megérted, a CSS többé nem fog „önfejűnek" tűnni.

≈ 35 perc Előtte: 12–14. lecke 11 élő példa

Mit fogsz tudni a lecke végén

1Amikor két szabály ütközik

Egy valódi stíluslapban gyakran több szabály is vonatkozik ugyanarra az elemre. Egy bekezdésre hathat egy p szabály, egy .bevezeto szabály és egy .kartya p szabály is. Ha ezek ugyanazt a tulajdonságot állítják be különböző értékre, a böngészőnek döntenie kell.

Két szabály, egy tulajdonság — melyik nyer?
index.html
<p>Milyen színű lettem?</p>
style.css
p {
  color: blue;
}

p {
  color: crimson;
}
Eredmény a böngészőben
Bordó lett. A két szabály kijelölője teljesen egyforma, tehát egyforma „erős" — ilyenkor a később írt nyer. Ez a kaszkád legegyszerűbb esete.

Ez eddig egyszerű. De mi van akkor, ha a két kijelölő nem egyforma? Erről szól a lecke többi része.

2Ami nem ütközik, összeadódik

Fontos tisztázni: a böngésző nem egész szabályok között választ, hanem tulajdonságonként. Ha két szabály különböző tulajdonságokat állít be, akkor nincs ütközés — mindkettő érvényesül.

Csak a szín ütközik, a többi összeadódik
index.html
<p class="kiemelt">
  Figyeld meg, honnan jön a stílusom!
</p>
style.css
p {
  color: blue;
  font-size: 20px;
  font-style: italic;
}

.kiemelt {
  color: crimson;
  background-color: #fef3c7;
  padding: 8px;
}
Eredmény a böngészőben
A bekezdés nagy és dőlt (a p szabályból), sárga hátterű és kitöltött (a .kiemelt szabályból). Egyedül a color tulajdonság ütközött — azt a .kiemelt nyerte. Hogy miért, az az 5. pontban derül ki.
GONDOLJ RÁ ÍGY

A böngésző minden elemnek minden tulajdonságára külön versenyt rendez. A color tulajdonságért versenyezhet három szabály, a padding tulajdonságért meg csak egy — az utóbbi tehát automatikusan nyer.

3A kaszkád három lépése

A kaszkád (vízesés, lépcsőzetesség) az a szabályrendszer, ami eldönti, ki nyer egy ütközésnél. A böngésző sorban megy végig ezeken a kérdéseken, és az első olyan lépésnél megáll, ahol eldől a verseny.

1. FONTOSSÁG Van rajta !important? 2. SPECIFICITÁS Melyik kijelölő a pontosabb? 3. SORREND Melyik szerepel később? ha egyforma → tovább a 2. lépésre ha egyforma → tovább a 3. lépésre itt mindig eldől: két szabály nem lehet egy helyen Ha egyik szabály sem vonatkozik az elemre: öröklődés, végül a böngésző alapértelmezése
Az első lépés, ahol különbség van, eldönti a versenyt. A későbbi lépéseket a böngésző már meg sem nézi.
A SORREND FONTOS — ÉS KÖVETKEZETES

Egy erősebb kijelölő mindig nyer, akármilyen korán szerepel a fájlban. A sorrend csak döntetlen esetén számít. Ezt a kezdők gyakran fordítva gondolják: azt hiszik, hogy „ami alul van, az nyer" — pedig ez csak egyforma erős szabályokra igaz.

4A sorrend

Kezdjük a legegyszerűbbel, a harmadik lépéssel. Ha két szabály egyforma erős, a később szereplő nyer. „Később" alatt nemcsak a fájlon belüli sorrendet értjük:

HelyzetMi számít „későbbinek"?
Egy fájlon belülAmi lejjebb van a fájlban
Több <link> a head-benAmi később van becsatolva
<link> és <style> együttAmelyik később áll a head-ben
Az alap és a felülírás
index.html
<button class="gomb">Mentés</button>
<button class="gomb">Mégse</button>
style.css
/* ===== ALAPBEÁLLÍTÁS ===== */
.gomb {
  background-color: #6b7280;
  color: white;
  border: none;
  padding: 8px 16px;
  border-radius: 6px;
}

/* ===== KÉSŐBBI MÓDOSÍTÁS ===== */
.gomb {
  background-color: #be123c;
}
Eredmény a böngészőben
A gombok bordók: a második .gomb szabály felülírta a háttérszínt, de az összes többi beállítás (fehér szöveg, kitöltés, lekerekítés) megmaradt az elsőből.
EZÉRT RENDEZZÜK SORBA A STÍLUSLAPOT

A bevett felépítés: legfelül az általános szabályok (body, h1, p, a), alattuk a komponensek (.kartya, .gomb), és legalul a kivételek, változatok. Így a sorrend magától a kívánt irányba dolgozik.

5A specificitás

A specificitás azt méri, mennyire pontosan céloz egy kijelölő. A logika hétköznapi: minél konkrétabban nevezel meg valamit, annál inkább rád kell hallgatni. „Minden bekezdés" gyengébb utasítás, mint „a kiemelt osztályú bekezdések", és az is gyengébb, mint „pontosan az a bekezdés, amelyiknek ez az azonosítója".

A pontozás: három oszlop

A böngésző minden kijelölőt három számmal jellemez. Megszámolja, hány darab található benne az egyes fajtákból:

1. OSZLOP Azonosítók #fejlec a legerősebb 2. OSZLOP Osztályok és társaik .kartya :hover [type="email"] közepes 3. OSZLOP Elemek p h1 ::before a leggyengébb Példa: #menu .link span 111 egy azonosító – egy osztály – egy elem
A specificitást három szám adja. A tananyagban így írjuk: azonosító – osztály – elem.
OszlopMi számít bele?
1. azonosítók #fejlec
2. osztályok és társaik osztályok (.kartya), attribútum-kijelölők ([type="email"]), pszeudo-osztályok (:hover, :nth-child())
3. elemek elemnevek (p, div), pszeudo-elemek (::before)
Semmi a *, a kombinátorok (szóköz, >, +, ~), a vessző

Hogyan hasonlítunk össze két értéket?

Balról jobbra, oszloponként — pontosan úgy, ahogy egy sportversenyen az aranyérmek számítanak először, és az ezüstöket csak akkor nézik, ha aranyból egyforma a mérleg.

  1. Akinek több azonosítója van, az nyer. Ha egyforma, tovább:
  2. Akinek több osztálya van, az nyer. Ha egyforma, tovább:
  3. Akinek több eleme van, az nyer. Ha ez is egyforma: döntetlen → a sorrend dönt.
EZ NEM TÍZES SZÁMRENDSZER!

A 0 – 0 – 11 nem „11", ami nagyobb lenne, mint a 0 – 1 – 0 „10"-e. Egyetlen osztály legyőz akármennyi elemet, és egyetlen azonosító legyőz akármennyi osztályt. A magasabb oszlop mindig mindent visz.

Az osztály nyer — pedig előbb szerepel
index.html
<div>
  <p class="kiemelt">Milyen színű lettem?</p>
</div>
style.css
/* 0 – 1 – 0 */
.kiemelt {
  color: crimson;
}

/* 0 – 0 – 2 */
div p {
  color: blue;
}
Eredmény a böngészőben
Bordó lett. A div p ugyan később szerepel és két elemből áll, de a .kiemelt a második oszlopban vezet — ott eldőlt a verseny, a sorrendet a böngésző meg sem nézte.
Azonosító, osztály és elem egymás ellen
index.html
<p id="bevezeto" class="szoveg">
  Három szabály versenyez értem.
</p>
style.css
/* 1 – 0 – 0 */
#bevezeto {
  color: crimson;
}

/* 0 – 1 – 1 */
p.szoveg {
  color: green;
}

/* 0 – 0 – 1 */
p {
  color: blue;
}
Eredmény a böngészőben
Bordó: az azonosító az első oszlopban nyer, így a másik két szabálynak esélye sincs — a sorrendtől függetlenül. Próbáld ki fejben: ha kivennénk a #bevezeto szabályt, zöld lenne (0 – 1 – 1 a 0 – 0 – 1 ellen).

6Specificitás a gyakorlatban

Gyakorolj! Takard le a jobb oldali oszlopot, és számold ki magad a specificitást.

KijelölőSpecificitásMiért?
*0 – 0 – 0A csillag nem számít.
p0 – 0 – 1Egy elem.
ul li0 – 0 – 2Két elem; a szóköz nem számít.
ul > li + li0 – 0 – 3Három elem; a > és a + nem számít.
.gomb0 – 1 – 0Egy osztály.
a:hover0 – 1 – 1A pszeudo-osztály az osztályok oszlopába tartozik.
input[type="email"]0 – 1 – 1Az attribútum-kijelölő is osztály-erejű.
.kartya p0 – 1 – 1Egy osztály, egy elem.
.gomb.veszelyes0 – 2 – 0Két osztály.
li:nth-child(2n)::before0 – 1 – 2Egy pszeudo-osztály; két elem (li és ::before).
li:not(.kesz)0 – 1 – 1A :not() maga nem számít, csak ami a zárójelében van.
#menu a1 – 0 – 1Egy azonosító, egy elem.
#menu .link:hover1 – 2 – 0Egy azonosító, egy osztály, egy pszeudo-osztály.

A döntetlen

Két különbözően megírt kijelölőnek is lehet pontosan ugyanakkora a specificitása. Ilyenkor a sorrend dönt — és ez gyakran okoz meglepetést.

Két eltérő kijelölő, azonos erő
index.html
<div class="kartya">
  <p class="ar">3 490 Ft</p>
</div>
style.css
/* 0 – 1 – 1 */
p.ar {
  color: crimson;
  font-weight: bold;
}

/* 0 – 1 – 1 — ugyanannyi! */
.kartya p {
  color: gray;
}
Eredmény a böngészőben
Az ár szürke lett, pedig a p.ar sokkal „célzottabbnak" tűnik. A két kijelölő specificitása azonos (0 – 1 – 1), tehát a később írt nyert. A félkövérség megmaradt, mert azért nem volt verseny.

7Inline stílus és !important

A style attribútum

A 12. leckében láttuk, hogy CSS-t közvetlenül az elemre is írhatsz a style attribútummal. Ez erősebb bármilyen kijelölőnél — még egy azonosítónál is. Gondolj rá úgy, mint egy negyedik, mindent megelőző oszlopra.

Az inline stílus legyőzi az azonosítót is
index.html
<p id="cim" style="color: green;">
  Milyen színű lettem?
</p>
style.css
/* 1 – 0 – 0 */
#cim {
  color: crimson;
}
Eredmény a böngészőben
Zöld. Ezért mondtuk a 12. leckében, hogy az inline stílust kerüld: a stíluslapból szinte lehetetlen felülírni.

Az !important kulcsszó

Van egy vészfék: ha egy érték után odaírod, hogy !important, az a deklaráció a kaszkád első lépésében nyer — megelőzve minden specificitást és még az inline stílust is.

Az !important mindenen átgázol
index.html
<p id="cim" class="szoveg"
   style="color: green;">
  Milyen színű lettem?
</p>
style.css
#cim {
  color: crimson;
}

/* 0 – 1 – 0, DE !important */
.szoveg {
  color: orange !important;
}
Eredmény a böngészőben
Narancssárga. Egy sima osztályszabály legyőzte az azonosítót és az inline stílust — kizárólag az !important miatt.
MIÉRT KERÜLJÜK AZ !important KULCSSZÓT?

Mert nem megoldja a problémát, hanem eltakarja. A tipikus történet:

  1. Egy szabály nem működik, mert egy erősebb felülírja.
  2. Odaírod: !important. Működik!
  3. Egy hét múlva máshol kellene felülírnod ezt. Csak újabb !important segít.
  4. A stíluslapod tele lesz velük, és már semmi nem úgy működik, ahogy a kaszkád szerint kellene.

Ha egy szabályod nem hat, derítsd ki, mi írja felül (10. pont), és oldd meg rendesen — például egy megfelelő osztállyal.

MIKOR ELFOGADHATÓ MÉGIS?

Ritka, tudatos esetekben: egy segédosztálynál, aminek garantáltan mindig érvényesülnie kell (például .rejtett { display: none !important; }), vagy ha egy külső, nem módosítható stíluslapot kell felülírni. Kezdőként ökölszabály: ha kétségeid vannak, ne használd.

Az erősorrend összesítve — fentről lefelé gyengül
#Mi?
1!important deklaráció
2style attribútum (inline stílus)
3Stíluslap szabálya — specificitás szerint, azon belül sorrend szerint
4Örökölt érték a szülőtől (8. pont)
5A böngésző alapértelmezése

8Öröklődés

Eddig arról volt szó, mi történik, ha több szabály vonatkozik egy elemre. Most nézzük a fordítottját: mi van, ha egy sem?

Ilyenkor bizonyos tulajdonságok a szülőtől öröklődnek. Ha a body elemnek megadod a betűtípust, az oldal összes szövege azt fogja használni — nem kell minden bekezdésnek, címsornak és listaelemnek külön megadnod.

A szöveg jellemzői öröklődnek, a doboz jellemzői nem
index.html
<div class="doboz">
  <h3>Címsor a dobozban</h3>
  <p>Bekezdés, benne egy
    <strong>kiemelt</strong> szóval.</p>
</div>
style.css
.doboz {
  /* ezek öröklődnek */
  color: #be123c;
  font-family: Georgia, serif;

  /* ezek NEM öröklődnek */
  border: 3px solid #be123c;
  padding: 12px;
  background-color: #fff5f7;
}
Eredmény a böngészőben
A címsor, a bekezdés és a strong is bordó és Georgia betűs — egyikre sem írtunk szabályt, a .doboz elemtől örökölték. A keretet viszont csak a doboz kapta meg: a benne lévő bekezdésnek nincs saját kerete.
A GYAKORLATI SZABÁLY

Ami a szöveg kinézetére vonatkozik, az általában öröklődik. Ami a doboz méretére, keretére, helyére vonatkozik, az nem. Gondolj bele, miért így logikus: ha a keret öröklődne, egy dobozban lévő minden bekezdés és minden szó köré is keret kerülne.

✔ Öröklődik✘ Nem öröklődik
color
font-family, font-size, font-weight, font-style
line-height, letter-spacing
text-align, text-transform
list-style
cursor, visibility
border
padding, margin
background
width, height
display
position

Az inherit kulcsszó

Ha egy olyan tulajdonságot, ami magától nem öröklődne, mégis a szülőtől szeretnél átvenni, írd értéknek: inherit.

.kartya p {
  border-color: inherit;   /* vedd át a szülő keretszínét */
}
EGY HASZNOS APRÓSÁG

Az űrlapelemek (button, input, select, textarea) a böngészők többségében nem öröklik a betűtípust — ezért látod őket furcsa, eltérő betűvel. A megoldás, amit érdemes minden stíluslap elejére betenni: button, input, select, textarea { font: inherit; }

9Örökölt érték vagy célzott szabály?

Ez a lecke legmeglepőbb szabálya, és a legtöbb „megmagyarázhatatlan" CSS-hibát ez okozza:

AZ ÖRÖKÖLT ÉRTÉKNEK NINCS SPECIFICITÁSA

Ha egy elemre közvetlenül vonatkozik egy szabály, az mindig nyer az örökölt érték ellen — akármilyen gyenge is ez a szabály, és akármilyen erős volt az, amelyiktől a szülő az értékét kapta. Az öröklés csak akkor jut szóhoz, ha az elemre egyáltalán semmi nem vonatkozik.

Egy azonosító a szülőn, egy elemszelektor a gyereken — ki nyer?
index.html
<div id="tartalom">
  <h3>Címsor</h3>
  <p>Milyen színű a bekezdés?</p>
</div>
style.css
/* 1 – 0 – 0 — a SZÜLŐRE vonatkozik */
#tartalom {
  color: crimson;
}

/* 0 – 0 – 1 — közvetlenül a p-re */
p {
  color: blue;
}
Eredmény a böngészőben
A címsor bordó (őrá semmi nem vonatkozik, tehát örököl), a bekezdés viszont kék. Pedig az azonosító sokkal erősebb! Csakhogy az azonosító a div elemnek szólt; a bekezdés csak örökölte volna az értéket — de mivel a p szabály közvetlenül rá vonatkozik, az örökölt érték a versenybe be sem száll.

A klasszikus eset: a link

Ez magyarázza az egyik leggyakoribb kezdő kérdést: „Miért nem lett piros a link, ha a szülőjének piros színt adtam?"

A szülő színe a linkig nem jut el
index.html
<p class="figyelmeztetes">
  Ez a szöveg bordó. Ez pedig egy
  <a href="#">link a mondatban</a>,
  ami nem lesz bordó.
</p>

<p class="figyelmeztetes jav">
  Itt viszont a
  <a href="#">link is átveszi</a>
  a színt.
</p>
style.css
.figyelmeztetes {
  color: #be123c;
  font-weight: bold;
}

/* a megoldás */
.jav a {
  color: inherit;
}
Eredmény a böngészőben
Az első bekezdésben a link kék maradt. Miért? Mert a böngészőnek van egy saját, beépített szabálya az a elemre (az adja a kék színt) — ez közvetlenül a linkre vonatkozik, tehát legyőzi az örökölt bordót. A második bekezdésben a color: inherit kifejezetten kéri az öröklést, és ez a célzott szabály már nyer.
EZ A MAGYARÁZAT A CÍMSOROKRA IS

Ugyanezért nem öröklik a címsorok a szülő betűméretét: a böngésző beépített stíluslapja közvetlenül ad nekik méretet. Minden elemnél, amelyiknek van alapértelmezett megjelenése (link, címsor, gomb, beviteli mező), számíts erre.

10Nyomozás az F12-vel

A jó hír: nem kell fejben számolgatnod. A böngésző fejlesztői eszköze pontosan megmutatja, mi történt. Jobb gomb az elemen → Vizsgálat (Inspect), majd a jobb oldali panel:

Amit látszMit jelent?
Styles fül, szabályok egymás alatt Az elemre vonatkozó összes szabály, erősorrendben: legfelül a legerősebb. Mindegyik mellett ott van, melyik fájl melyik sorából jön.
Áthúzott deklaráció Ez a deklaráció vesztett — egy feljebb lévő szabály felülírta.
Inherited from … szakasz A szülőktől örökölt értékek. Halványan jelennek meg azok, amelyek ennél az elemnél nem öröklődnek.
user agent stylesheet A böngésző saját alapértelmezett szabálya — például a link kék színe.
Computed fül A végső, ténylegesen érvényes érték minden tulajdonságra. Rákattintva megmutatja, melyik szabályból származik.
Egérrel a kijelölő fölé állva Sok böngésző kiírja a kijelölő specificitását is.
A NYOMOZÁS MENETE
  1. Keresd meg a szabályodat a Styles panelen. Nincs ott? Akkor a kijelölő nem talál rá az elemre (13. lecke), vagy a CSS nem töltődött be (12. lecke).
  2. Ott van, de áthúzva? Görgess feljebb: a felette lévő, át nem húzott szabály nyert.
  3. Hasonlítsd össze a két kijelölő specificitását. Ha azonos, a sorrend döntött.
  4. Javítsd a kijelölők szintjén — ne !important kulcsszóval.

11A jó stratégia

Az egész lecke egyetlen gyakorlati tanácsba sűríthető: tartsd alacsonyan és egyenletesen a specificitást. Ha a legtöbb szabályod nagyjából egyforma erős, a sorrend dönt — azt pedig te irányítod.

SzokásMiért jó?
Stílust osztályokkal írsz (0 – 1 – 0)Egyforma erősek, könnyen felülírhatók egy későbbi osztállyal.
Azonosítót nem használsz stílushozAz 1 – 0 – 0 erőt csak újabb azonosítóval vagy !important kulcsszóval lehet legyőzni.
Rövid kijelölőket írszA hosszú lánc (.oldal .tartalom .kartya p) feleslegesen erős, és a HTML szerkezetéhez ragad.
Általánostól a speciális felé rendezed a fájltA sorrend magától jó irányba dolgozik.
Inline stílust nem írszA stíluslapból gyakorlatilag felülírhatatlan.
!important kulcsszót nem írszEltakarja a problémát, és újabb !important kulcsszavakat szül.
Az öröklődést kihasználodA betűtípust és az alapszínt a body elemnél egyszer adod meg.
✘ Specificitási háború
#oldal .tartalom div.kartya p {
  color: gray;
}
/* később nem működik, tehát: */
.kiemelt {
  color: crimson !important;
}
✔ Egyenletesen alacsony
.kartya-szoveg {
  color: gray;
}
/* később, ugyanakkora erővel: */
.kartya-szoveg.kiemelt {
  color: crimson;
}

Önellenőrző kérdések

Előbb válaszolj magadban, csak utána nézd meg a megoldást.

1. Számold ki a specificitást: .menu li a:hover

0 – 2 – 2. Egy osztály (.menu) és egy pszeudo-osztály (:hover) a második oszlopba; két elem (li, a) a harmadikba.

2. Melyik nyer: body div ul li p span vagy .cimke?

A .cimke. A hosszú lánc 0 – 0 – 6, az osztály 0 – 1 – 0. A második oszlopban az osztály vezet, és ott eldől a verseny — a harmadik oszlopot már meg sem nézik. A specificitás nem tízes számrendszer.

3. Két szabályod van: .kartya p { color: gray; } és utána p.ar { color: red; }. Milyen színű lesz a <p class="ar"> egy kártyában? És ha megcseréled a sorrendjüket?

Mindkettő 0 – 1 – 1, tehát döntetlen, és a sorrend dönt. Az eredeti sorrendben piros (a p.ar van később). Megcserélve szürke.

4. A szülő div elemnek #doboz { color: red; } szabályt adtál, a benne lévő bekezdésre pedig p { color: blue; } vonatkozik. Milyen színű a bekezdés, és miért?

Kék. Az azonosító a div elemre vonatkozik, nem a bekezdésre — a bekezdés csak örökölné a pirosat. Az örökölt értéknek viszont nincs specificitása: a közvetlenül a bekezdésre vonatkozó p szabály mindig nyer ellene.

5. A .hirdetes elemnek bordó színt adtál, de a benne lévő link kék maradt. Miért, és hogyan javítod?

A böngésző beépített stíluslapjában van egy közvetlenül az a elemre vonatkozó szabály (ez adja a kéket), és egy célzott szabály mindig legyőzi az örökölt értéket. Javítás: .hirdetes a { color: inherit; } — vagy közvetlenül megadod a link színét.

6. Mely tulajdonságok öröklődnek ezek közül: color, border, font-family, padding, text-align, background-color?

Öröklődik: color, font-family, text-align — ezek a szöveg kinézetére vonatkoznak. Nem öröklődik: border, padding, background-color — ezek a dobozra.

7. Egy szabályod nem működik. Egy osztálytársad azt tanácsolja: „Írj mögé !important kulcsszót, és kész." Mit válaszolsz?

Hogy ez csak eltakarja a problémát. Előbb F12-vel derítsem ki, melyik szabály írja felül (áthúzott deklaráció a Styles panelen), hasonlítsam össze a specificitásukat, és a kijelölők szintjén javítsam. Az !important később újabb !important kulcsszavakat követelne.

8. Mit jelent, ha az F12 → Styles panelen a deklarációd át van húzva?

Hogy a szabályod megérkezett és vonatkozik is az elemre, de erre a tulajdonságra egy erősebb szabály nyert. Ez a felette lévő, át nem húzott deklaráció.

12Összefoglalás

  1. A böngésző tulajdonságonként dönt. Ami nem ütközik, összeadódik.
  2. A kaszkád lépései: fontosság (!important) → specificitássorrend. Az első különbség eldönti.
  3. Sorrend: egyforma erő esetén a később szereplő nyer — de csak akkor.
  4. Specificitás: azonosító – osztály – elem darabszáma. Osztály-erejű a pszeudo-osztály és az attribútum-kijelölő; elem-erejű a pszeudo-elem.
  5. A *, a kombinátorok és a vessző nem számítanak.
  6. Nem tízes számrendszer: egy osztály legyőz akárhány elemet, egy azonosító akárhány osztályt.
  7. A style attribútum erősebb minden kijelölőnél; az !important még annál is.
  8. Az !important kulcsszó eltakarja a problémát — kerüld.
  9. Öröklődik, ami a szöveg kinézetére vonatkozik (color, font-*, text-align); nem öröklődik, ami a dobozra (border, padding, background).
  10. Az örökölt értéknek nincs specificitása: bármilyen közvetlenül célzó szabály legyőzi — a böngésző beépített szabályai is. Ezért marad kék a link.
  11. Nyomozáshoz: F12 → Styles (áthúzott = vesztes) és Computed (a végső érték).
  12. A jó stratégia: osztályok, rövid kijelölők, se azonosító, se inline stílus, se !important.