Junior
Ką žinote apie CSS selektorių specifiką?
sobes.tech AI
Atsakymas iš AI
Specifiškumas nustato CSS taisyklių prioritetą jų konfliktų atveju, kai vienam elementui taikomi skirtingi stiliai. Ji skaičiuojama kiekvienam selektoriui taisyklėje.
Specifiškumas yra skaitinė įvertinimo reikšmė, sudaryta iš keturių kategorijų (A, B, C, D), užrašyta kaip 0,0,0,0. Kuo didesnis skaičius, tuo aukštesnis specifiškumas.
Kategorijos:
- A (tarpinė stiliaus): Stiliai, nustatyti
styleatributu HTML elemente. Jie turi aukščiausią specifiškumą (pavyzdžiui,1,0,0,0). - B (ID): Selektoriai pagal ID (pavyzdžiui,
#my-id). Jie padidina antrą skaitmenį (pavyzdžiui,0,1,0,0). - C (Klasė, atributas, pseudo-klasė): Selektoriai pagal klasę (pavyzdžiui,
.my-class), atributą (pavyzdžiui,[type="text"]), pseudo-klasę (pavyzdžiui,:hover,:first-child). Jie padidina trečią skaitmenį (pavyzdžiui,0,0,1,0). - D (Elementas, pseudo-elementas): Selektoriai pagal HTML žymą (pavyzdžiui,
div,p) ir pseudo-elementus (pavyzdžiui,::before,::after). Jie padidina ketvirtą skaitmenį (pavyzdžiui,0,0,0,1).
Pavyzdys skaičiavimui:
p-0,0,0,1.my-class-0,0,1,0#my-id-0,1,0,0div p-0,0,0,2(dviejų žymių suma)#my-id .my-class-0,1,1,0(ID ir klasių suma)div#my-id.my-class:hover-0,1,2,1(žymės, ID, klasės ir pseudo-klasės suma)
Taisyklės:
inline stylespecifiškumas visada yra aukštesnis už bet kokią kitų selektorių kombinaciją, išskyrus taisykles su!importantžyma.- Taisyklės su
!importantžyma turi aukščiausią prioritetą, perrašydamos netinlinestilių. Naudojimas!importantnerekomenduojamas dėl sudėtingumo. - Esant vienodam specifiškumui, taikoma paskutinė CSS faile deklaruota taisyklė.
- Universalusis selektorius (
*) ir pseudo-klasė:where()turi specifiškumą0,0,0,0ir nesikeičia bendrojo specifiškumo.
/*
Specifiškumas: 0,0,0,1
Taikoma, jei nėra kitų specifiškesnių taisyklių
*/
p {
color: blue;
}
/*
Specifiškumas: 0,0,1,0
Perrašo `p` žymės taisyklę
*/
.text {
color: green;
}
/*
Specifiškumas: 0,1,0,0
Perrašo `.text` klasės taisyklę
*/
#main-text {
color: red;
}
/*
Specifiškumas: 1,0,0,0
Bus taikoma, jei elementas turi atributą style="color: purple;"
*/
/* <p style="color: purple;">Tekstas</p> */
/*
Labai aukštas specifiškumas, perrašo viską
Nerekomenduojama naudoti be būtinybės
*/
.override-text {
color: black !important;
}