Curs Web Development
Curs HTML
Curs CSS
Curs Javascript
Curs PHP
Curs Phyton
Curs SQL
Curs SEO

Cascada și moștenire

La un moment dat, vă veți afla în situația în care mai multe reguli CSS vor avea selectori care vor ținti același element. În asemenea cazuri, apare o dilemă, și anume: care regulă CSS „câștigă” și sfârșește ca fiind cea care va fi aplicată, în cele din urmă, elementului.

Acest lucru este controlat de un mecanism numit „Cascade”, dar are legătură și cu moștenirea — „Inheritance” — elementele vor moșteni reguli și de la părinți, dar nu și de la alte elemente.

În acest capitol vom lămuri ce este cascada CSS, specificitatea și importanța, și cum proprietățile CSS moștenesc diferite valori.

Stilul final pentru un element poate fi specificat în multe locuri diferite, care pot interacționa în moduri complexe. Această interacțiune complexă face ca CSS să fie foarte puternic, dar, uneori, să creeze confuzie și să fie greu de depanat.

Voi încerca să clarific o parte din această complexitate, iar dacă nu înțelegeți imediat, este normal, pentru că încerc să vă ajut să înțelegeți una dintre cele mai dificile părți din teoria CSS.

Cascada

CSS este abrevierea pentru „Cascading Style Sheets” (Foi de stil în cascadă). Asta înseamnă că, la nivelul cel mai de bază, ordinea regulilor CSS contează — doar că lucrurile sunt mult mai complexe de atât.

Asupra unui element se pot aplica mai multe seturi de reguli definite în CSS. Pentru a decide ordinea în care trebuie aplicate stilurile, standardul definește cascada. Procesul de selecție a regulilor este următorul:

Care dintre selectorii din cascadă „câștigă” depinde de trei factori enumerați în ordinea greutății, cu precizarea că primii pot suprascrie pe ultimii:

Originea stylesheet-urilor și nivelul de importanță

Din punct de vedere al originii, există trei tipuri de foi de stil (în ordinea crescătoare a priorității):

Din punct de vedere al importanței, există două paliere:

În funcție de origine și importanță, ordinea aplicării regulilor este (în ordinea crescătoare a priorității):

  1. Reguli la nivel de browser (user-agent stylesheets);
  2. Reguli cu importanță normală din user stylesheets;
  3. Reguli cu importanță normală din author stylesheets;
  4. Reguli importante din author stylesheets;
  5. Reguli importante din user stylesheets.

Importanța

În sintaxa CSS există un element care poate fi utilizat pentru a vă asigura că o anumită declarație va câștiga întotdeauna: !important.

Valoarea !important se va utiliza doar dacă nu există o altă soluție, pentru că poate duce la complicarea inutilă a foilor de stil și le face foarte greu de modificat și întreținut.

🔧 Exemplu utilizare "!important"

Specificitatea

Specificitatea este o modalitate de a măsura „greutatea” unui selector.

După cum am menționat mai sus, dacă două seturi de reguli au aceeași origine și aceeași importanță, ordonarea se face în funcție de specificitate.

Specificitatea se poate calcula astfel:

Declarația care întrunește scorul cel mai mare este cea care va fi aplicată, pentru că are cea mai mare specificitate.

Dacă încă există egalitate între declarații, atunci diferența va fi făcută de ordinea în care au fost declarate.

Pentru a ușura procesul de calcul al specificității unui selector, se poate folosi metoda de calcul bazată pe patru valori sau componente: mii, sute, zeci, unități (patru cifre unice în patru coloane).

Pentru a înțelege mai bine, să aruncăm o privire peste tabelul de mai jos:

Selector Mii Sute Zeci Unități Total
h1 0 0 0 1 0001
h1 + p::first-letter 0 0 0 3 0003
li > a[href*="en-US"] > .warning 0 0 2 2 0022
#identifier 0 1 0 0 0100
Niciun selector, inline CSS 1 0 0 0 1000
🔧 Exemplu specificitate

Ordinea sursei

Așa cum am menționat deja, dacă mai mulți selectori concurenți au aceeași importanță și specificitate, al treilea factor care intră în joc pentru a determina regula câștigătoare este source order (ordinea sursei) — ceea ce înseamnă că regulile ulterioare vor bate regulile anterioare.

Un lucru de avut în vedere atunci când ne gândim la teoria cascadei și la regulile care bat alte reguli este că toate acestea se întâmplă la nivel de proprietate — proprietăți care suprascriu alte proprietăți, și nu reguli care înlocuiesc în întregime alte reguli.

🔧 Exemplu ordinea sursei

Când mai multe reguli CSS țintesc același element, inițial, toate regulile sunt aplicate acelui element. Abia după evaluarea conflictelor se decide care reguli câștigă și vor fi aplicate în final.

🔧 Exemplu reguli mixate

Inheritance (moștenirea)

Moștenirea CSS este ultima piesă pe care trebuie să o investigăm pentru a înțelege ce stil este aplicat unui element. Ideea este că unele valori ale proprietății aplicate unui element vor fi moștenite de copiii acelui element, iar altele nu.

De exemplu, are sens ca fontul și culoarea să fie moștenite, deoarece autorul poate seta un font pentru întregul site prin aplicarea lui pe elementul html, urmând ca acesta să fie suprascris doar acolo unde se dorește.

Ar fi neproductiv să fie nevoie să setăm fontul separat pentru fiecare element din site.

Un alt exemplu logic: proprietățile margin, padding, border și background-image nu sunt moștenite. Dacă acestea ar fi moștenite automat, ar trebui eliminate sau modificate manual pentru fiecare element copil.

Lista completă a proprietăților moștenite se poate găsi în documentația CSS.

Controlul moștenirii

CSS furnizează patru valori pentru a controla moștenirea:

Dintre acestea, inherit este cea mai utilă când vrem ca un element să moștenească explicit valoarea de la părinte.

🔧 Exemplu moștenire

Resetarea tuturor valorilor proprietăților

Cu ajutorul proprietății prescurtate all poate fi aplicată oricare dintre valorile de moștenire discutate, aproape tuturor proprietăților simultan. Este o metodă convenabilă pentru a reveni la un „moment zero” înainte de a adăuga noi stiluri.


  all: initial;
  all: inherit;
  all: unset;
  all: revert;

În exercițiul următor, încercați să scrieți o singură regulă care să suprascrie proprietățile color și background-color aplicate implicit link-urilor.

🔧 Exercițiu

🧠 Quiz - CSS Cascada și Moștenirea

Top