Kun useampi sääntö voisi tyylittää elementtiä, kaksi mekanismia päättävät tuloksen: kaskadi (mikä sääntö voittaa) ja periytyminen (mitkä ominaisuudet siirtyvät vanhemmista).
Kaskadi — ristiriitojen ratkaisu, järjestyksessä
Selain valitsee voittavan julistuksen tarkistamalla prioriteettijärjestyksen:
1. Importance → !important beats normal declarations
2. Specificity → more specific selector wins (ids > classes > elements)
3. Source order → if still tied, the LAST rule defined wins
p { color: blue; } /* specificity 0,0,1 */
.text { color: green; } /* specificity 0,1,0 → wins over the element rule */
p { color: red; } /* same specificity as first, but LATER → would beat blue */
/* result for <p class="text">: green (class beats element) */
Periytyminen — jotkut ominaisuudet siirtyvät lapsille
Tietyt ominaisuudet (pääasiassa tekstityyppiin liittyvät) peritään automaattisesti jälkeläisille; suurin osa ei.
body {
color: #333; /* ✅ inherited — all text descendants get it */
font-family: serif; /* ✅ inherited */
border: 1px solid; /* ❌ NOT inherited — children don't get a border */
}
Peritään oletuksena: color, font-*, line-height, text-align, visibility, cursor. Ei peritä: border, margin, padding, background, width, height, display.
Periytymisen nimenomaisesti hallitseminen
.child {
color: inherit; /* force-take the parent's value */
border: initial; /* reset to the property's default */
all: unset; /* reset everything: inherit if inheritable, else initial */
}
Spesifisyyden yhteenveto kaskaadissa
Tämä on syy siihen, miksi matalan spesifisyyden sääntö voi hävitä vaikka se kirjoitetaan myöhemmin — spesifisyys tarkistetaan ennen lähteen järjestystä. Järjestyksen ymmärtäminen (tärkeys → spesifisyys → lähteen järjestys) selittää lähes jokaisen "tyylini ei sovellu" -tapauksen.
Miksi sillä on väliä
Kaskadi ja periytyminen ovat kuinka CSS todella ratkaisee oleellinen malli.
Prioriteetin järjestyksen tunteminen debuggaa ristiriidat, tietäminen mitkä ominaisuudet peritään antaa sinulle asettaa color/font kerran bodyssä kaikkialla sijaan, ja inherit/initial/unset antavat sinulle tarkan hallinnan — yhdessä ne tekevät CSS:stä ennustettavan sen sijaan että se olisi taikaa.
