Junior
Co víte o specifikaci CSS selektorů?
sobes.tech AI
Odpověď od AI
Specifičnost určuje prioritu pravidel CSS v případě konfliktu, keď na ten istý prvok platí viacero štýlov. Vypočíta sa pre každý selektor v pravidle.
Specifičnosť je číselné hodnotenie pozostávajúce zo štyroch kategórií (A, B, C, D), zapísané ako 0,0,0,0. Čím vyššie číslo, tým vyššia špecifičnosť.
Kategórie:
- A (štýl na riadku): Štýly definované atribútom
stylev HTML prvku. Majú najvyššiu špecifičnosť (napríklad,1,0,0,0). - B (ID): Selektory podľa ID (napríklad,
#moje-id). Zvyšujú druhé číslo (napríklad,0,1,0,0). - C (Trieda, Atribút, Pseudo-trieda): Selektory podľa triedy (napríklad,
.moja-trieda), atribútu (napríklad,[type="text"]), pseudo-triedy (napríklad,:hover,:first-child). Zvyšujú tretie číslo (napríklad,0,0,1,0). - D (Prvok, Pseudo-prvok): Selektory podľa HTML tagu (napríklad,
div,p) a pseudo-prvky (napríklad,::before,::after). Zvyšujú štvrté číslo (napríklad,0,0,0,1).
Príklad výpočtu:
p-0,0,0,1.moja-trieda-0,0,1,0#moje-id-0,1,0,0div p-0,0,0,2(súčet špecifičností dvoch prvkov)#moje-id .moja-trieda-0,1,1,0(súčet ID a triedy)div#moje-id.moja-trieda:hover-0,1,2,1(súčet prvku, ID, triedy a pseudo-triedy)
Pravidlá:
- Špecifičnosť
inline štýluje vždy vyššia ako akákoľvek kombinácia iných selektorov, okrem pravidiel s flagom!important. - Pravidlá s flagom
!importantmajú najvyššiu prioritu, prepíšu ajinline štýl. Používanie!importantsa neodporúča kvôli zložitosti ladenia. - Pri rovnakom stupni špecifičnosti sa aplikuje pravidlo, ktoré bolo deklarované ako posledné v CSS súbore.
- Univerzálny selektor (
*) a:where()majú špecifičnosť0,0,0,0a nezvyšujú celkovú špecifičnosť.
/*
Špecifičnosť: 0,0,0,1
Aplikovať sa bude, ak neexistujú viac špecifické pravidlá
*/
p {
color: blue;
}
/*
Špecifičnosť: 0,0,1,0
Prepisuje pravidlo pre prvok p
*/
.text {
color: green;
}
/*
Špecifičnosť: 0,1,0,0
Prepisuje pravidlo pre triedu .text
*/
#hlavny-text {
color: red;
}
/*
Špecifičnosť: 1,0,0,0
Bude aplikované, ak prvok má atribút style="color: purple;"
*/
/* <p style="color: purple;">Text</p> */
/*
Veľmi vysoká špecifičnosť, prepíše všetko
Neodporúča sa používať bez extrémnej potreby
*/
.override-text {
color: black !important;
}