Cascade Layers (directiva @layer) oferă dezvoltatorilor control absolut asupra ordinii în care se aplică regulile CSS, introducând un nou nivel de precedență situat deasupra specificității obișnuite a selectorilor.
Înainte de @layer, dacă o bibliotecă externă (precum Bootstrap sau un widget third-party) avea un selector cu specificitate mare (ex: #navbar ul.nav > li.active), erai obligat să scrii selectori urâți și fragili sau să folosești !important pentru a-i suprascrie stilurile. Cu @layer, un selector simplu dintr-un strat superior bate automat un selector oricât de complex dintr-un strat inferior.
/* 1. Declarăm ordinea de prioritate a straturilor la începutul fișierului
(Straturile declarate mai la dreapta au prioritate mai mare!) */
@layer reset, framework, custom, utilities;
/* 2. Stratul de reset (prioritate mică) */
@layer reset {
button {
background: none;
border: none;
padding: 0;
}
}
/* 3. Stratul bibliotecii externe */
@layer framework {
.btn-alert {
background-color: #ef4444;
color: white;
padding: 12px 24px;
}
}
/* 4. Stratul tău custom (suprascrie 'framework' chiar și cu specificitate mai mică!) */
@layer custom {
button {
background-color: #3858e9; /* Câștigă garantat în fața .btn-alert! */
}
}
/* 5. Stratul de utilități (prioritate maximă) */
@layer utilities {
.d-none { display: none; }
}
Regula de Aur a Straturilor
Stilurile care nu aparțin niciunui strat explicit (unlayered styles) au întotdeauna prioritate mai mare decât toate stilurile din interiorul blocurilor @layer. Această proprietate garantează compatibilitatea deplină cu codul moștenit (legacy CSS).