Junior
Čo viete o špecifickosti CSS selektorov?
sobes.tech AI
Odpoveď od AI
Špecifickosť určuje prioritu CSS pravidiel pri ich konflikte, keď sa na jeden prvok aplikujú rôzne štýly. Vypočíta sa pre každý selektor v pravidle.
Špecifickosť je číselné hodnotenie pozostávajúce zo štyroch kategórií (A, B, C, D), zapísané ako 0,0,0,0. Čím je číslo väčšie, tým je špecifickosť vyššia.
Kategórie:
- A (inline štýl): Štýly zadané atribútom
stylev HTML prvku. Majú najvyššiu špecifickosť (napr.1,0,0,0). - B (ID): Selektory podľa ID (napr.
#my-id). Zvyšujú druhú číslicu (napr.0,1,0,0). - C (Trieda, atribút, pseudo-trieda): Selektory podľa triedy (napr.
.my-class), atribútu (napr.[type="text"]), pseudo-triedy (napr.:hover,:first-child). Zvyšujú tretiu číslicu (napr.0,0,1,0). - D (Prvok, pseudo-prvok): Selektory podľa HTML prvku (napr.
div,p) a pseudo-prvkov (napr.::before,::after). Zvyšujú štvrtú číslicu (napr.0,0,0,1).
Príklad výpočtu:
p-0,0,0,1.my-class-0,0,1,0#my-id-0,1,0,0div p-0,0,0,2(súčet špecifickostí dvoch prvkov)#my-id .my-class-0,1,1,0(súčet špecifickostí ID a triedy)div#my-id.my-class:hover-0,1,2,1(súčet špecifickostí prvku, ID, triedy a pseudo-triedy)
Pravidlá:
- Špecifickosť
inline štýlje vždy vyššia ako akákoľvek kombinácia iných selektorov, okrem pravidiel s flagom!important. - Pravidlá s flagom
!importantmajú najvyšší prioritu, prepisujúc ajinline štýl. Používanie!importantsa neodporúča kvôli zložitosti ladenia. - Pri rovnakej špecifickosti sa použije pravidlo, ktoré bolo posledné v CSS súbore.
- Univerzálny selektor (
*) a pseudo-trieda:where()majú špecifickosť0,0,0,0a nezvyšujú celkovú špecifickosť.
/*
Špecifickosť: 0,0,0,1
Aplikovať, ak nie sú prísnejšie pravidlá
*/
p {
color: blue;
}
/*
Špecifickosť: 0,0,1,0
Prepisuje pravidlo pre tag p
*/
.text {
color: green;
}
/*
Špecifickosť: 0,1,0,0
Prepisuje pravidlo pre triedu .text
*/
#main-text {
color: red;
}
/*
Špecifickosť: 1,0,0,0
Bude aplikované, ak prvok má atribút style="color: purple;"
*/
/* <p style="color: purple;">Text</p> */
/*
Veľmi vysoká špecifickosť, prepíše všetko
Neodporúča sa používať bez krajnej núdze
*/
.override-text {
color: black !important;
}