Selectori CSS
Selectorii CSS sunt instrumente esențiale pentru stilizarea elementelor HTML. Ei permit selectarea precisă a elementelor din DOM, pe baza tipului, clasei, ID-ului, atributelor, stării sau poziției.
Principalele categorii de selectori
- Selectori simpli - selectează elemente pe baza numelui, clasei sau ID-ului
- Selectori de atribute - selectează elemente pe baza atributelor și valorilor acestora
- Pseudo-clase - selectează elemente aflate într-o anumită stare (hover, focus, etc.)
- Pseudo-elemente - selectează o parte din conținutul unui element (::before, ::after, etc.)
- Combinatori - definesc relații între elemente (copil, frate, etc.)
- Selectori multipli - aplică stiluri la mai multe elemente simultan
1. Selectori simpli
Exemplu clasic: selectarea tuturor elementelor p și div.
Selectori moderni: :is() și :where()
Permite gruparea selectorilor. :is() păstrează specificitatea, :where() are
specificitate zero.
2. Selectori de atribute - Attribute Selectors
Selectorii de atribute permit selectarea elementelor pe baza atributelor HTML și valorilor acestora. Sunt
extrem de utili în aplicații moderne, mai ales când folosim atribute personalizate data-*.
2.a Potrivire exactă
- [atr] - selectează toate elementele care au atributul „atr”
- [atr=val] - selectează elementele unde valoarea atributului este exact „val”
- [atr~=val] - selectează elementele unde valoarea atributului conține cuvântul „val” într-o listă separată prin spații
2.b Potrivire parțială (substring)
- [atr^=val] - valoarea începe cu „val”
- [atr$=val] - valoarea se termină cu „val”
- [atr*=val] - valoarea conține „val”
- [atr|=val] - valoarea este „val” sau începe cu „val-” (ideal pentru
lang="ro-RO")
☞ Atributele data-* sunt utile pentru a stoca informații
personalizate în HTML. Pot fi accesate ușor cu JavaScript și sunt frecvent folosite în aplicații moderne.
3. Pseudo-clase - Pseudo-classes
Pseudo-clasele sunt adăugate la sfârșitul selectorilor cu două puncte (:) și permit stilizarea
elementelor aflate într-o anumită stare (ex: hover, focus, visited).
Ordinea aplicării pseudo-claselor pentru linkuri este importantă: LVHA -
:link → :visited → :hover → :active. Schimbarea ordinii poate duce la comportamente imprevizibile.
☞ Doar :link și :visited sunt dedicate linkurilor.
:hover, :focus și :active sunt pseudo-clase dinamice și pot fi folosite
pe orice element HTML.
4. Pseudo-elemente - Pseudo-elements
Pseudo-elementele seamănă cu pseudo-clasele, dar sunt precedate de două puncte duble (::) și
permit stilizarea unei părți specifice dintr-un element, cum ar fi primul cuvânt, linia sau adăugarea de
conținut înainte/după.
Exemplu clasic cu ::before și ::after:
Exemplu cu ::marker și ::placeholder
5. Combinatori și selectori multipli
Combinatorii definesc relații între elemente HTML. Folosind literele A și B, putem înțelege cum se leagă elementele între ele:
| Nume | Sintaxă | Selectează |
|---|---|---|
| Selectori multipli | A, B | Toate elementele A și/sau B |
| Descendent | A B | Elemente B aflate în interiorul lui A |
| Copil direct | A > B | Elemente B direct sub A |
| Frate adiacent | A + B | Elementul B imediat după A |
| Frate general | A ~ B | Toate elementele B care urmează după A |
☞ Există câteva elemente precum a, button, input și textarea
care au o stare de focus implicită. Putem extinde această stare la orice element HTML5 folosind
tabindex sau contenteditable (cu precauție). Stilul implicit de focus (linie
punctată) provine din foaia de stil a browserului și poate fi personalizat cu CSS, dar trebuie păstrat sau
înlocuit cu grijă pentru a menține accesibilitatea.
🧠 Recomandări de bune practici
- Folosește pseudo-elementele pentru decor, nu pentru conținut esențial.
- Respectă ordinea LVHA pentru linkuri:
:link → :visited → :hover → :active. - Nu elimina complet
outlinela focus — înlocuiește-l cu ceva vizibil. - Testează combinatorii în contexte reale pentru a înțelege relațiile DOM.
- Folosește
:is()și:where()pentru grupări eficiente de selectori. - Explorează
:has()pentru selecții condiționate (suportat în majoritatea browserelor moderne).
🧠 Quiz - Selectori CSS
