Română

Explorați regula CSS @when, o funcție puternică care permite aplicarea condiționată a stilurilor în funcție de suportul browserului, dimensiunea viewport-ului și multe altele. Învățați cu exemple practice.

Regula CSS @when: Stăpânirea Aplicării Condiționate a Stilurilor

Lumea CSS evoluează constant, oferind dezvoltatorilor modalități mai puternice și mai flexibile de a stiliza paginile web. O astfel de caracteristică care câștigă teren este regula @when, cunoscută și sub numele de Modulul de Reguli Condiționate CSS Nivelul 1. Această regulă vă permite să aplicați stiluri CSS în mod condiționat, pe baza îndeplinirii anumitor condiții specifice. Este un instrument puternic pentru design responsiv, detectarea funcțiilor și crearea de foi de stil mai robuste și mai adaptabile.

Ce este regula CSS @when?

Regula @when este o regulă condiționată în CSS care vă permite să definiți stiluri care sunt aplicate numai dacă anumite condiții sunt adevărate. Gândiți-vă la ea ca la o instrucțiune if pentru CSS-ul dvs. Spre deosebire de interogările media, care se concentrează în principal pe caracteristicile viewport-ului (dimensiunea ecranului, orientarea etc.), @when oferă o modalitate mai generală și mai extensibilă de a gestiona stilizarea condiționată. Se extinde pe regulile condiționate existente, cum ar fi @supports și @media.

Avantajele cheie ale utilizării @when

Sintaxa regulii @when

Sintaxa de bază a regulii @when este următoarea:
@when <condiție> {
  /* Reguli CSS de aplicat când condiția este adevărată */
}

<condiție> poate fi orice expresie booleană validă care evaluează la adevărat sau fals. Această expresie implică adesea:

Exemple practice de @when în acțiune

Să explorăm câteva exemple practice pentru a ilustra puterea și versatilitatea regulii @when.

1. Design responsiv cu @when și interogări media

Cel mai frecvent caz de utilizare pentru @when este designul responsiv, unde ajustați stilurile în funcție de dimensiunea ecranului. Deși interogările media pot realiza acest lucru de la sine, @when oferă o abordare mai structurată și mai lizibilă, în special atunci când se ocupă de condiții complexe.

@when (min-width: 768px) and (max-width: 1023px) {
  body {
    font-size: 18px;
    line-height: 1.6;
  }
  .container {
    width: 720px;
    margin: 0 auto;
  }
}

În acest exemplu, stilurile din blocul @when sunt aplicate numai atunci când lățimea ecranului este între 768px și 1023px (dimensiunea tipică a tabletei). Aceasta oferă o modalitate clară și concisă de a defini stiluri pentru intervale specifice de viewport.

Notă de internaționalizare: Designul responsiv este critic pentru un public global. Luați în considerare variația dimensiunilor ecranului în diferite regiuni. De exemplu, utilizarea mobilă este mai mare în unele țări, ceea ce face ca designul mobile-first să fie și mai crucial.

2. Detectarea funcțiilor cu @when și @supports

@when poate fi combinat cu @supports pentru a aplica stiluri numai atunci când o funcție CSS specifică este acceptată de browser. Acest lucru vă permite să vă îmbunătățiți progresiv site-ul web, oferind o experiență mai bună utilizatorilor cu browsere moderne, menținând în același timp compatibilitatea cu cele mai vechi.

@when supports(display: grid) {
  .container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    grid-gap: 20px;
  }
}

@when not supports(display: grid) {
  .container {
    /* Stiluri de fallback pentru browserele care nu acceptă grid */
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
  }
  .item {
    width: calc(50% - 10px); /* Ajustați lățimea pentru browserele mai vechi */
  }
}

Aici, folosim @supports pentru a verifica dacă browserul acceptă CSS Grid Layout. Dacă o face, aplicăm stiluri bazate pe grid la .container. În caz contrar, oferim stiluri de rezervă folosind flexbox pentru a ne asigura că o structură similară este obținută în browserele mai vechi.

Notă de accesibilitate globală: Detectarea funcțiilor este importantă pentru accesibilitate. Este posibil ca browserele mai vechi să nu aibă suport pentru atributele ARIA mai noi sau elementele HTML5 semantice. Furnizați fallback-uri adecvate pentru a vă asigura că conținutul rămâne accesibil.

3. Combinarea interogărilor media și a interogărilor de funcții

Adevărata putere a @when provine din capacitatea sa de a combina interogări media și interogări de funcții pentru a crea reguli de stilizare condiționată mai complexe și mai nuanțate.

@when (min-width: 768px) and supports(backdrop-filter: blur(10px)) {
  .modal {
    background-color: rgba(255, 255, 255, 0.8);
    backdrop-filter: blur(10px);
  }
}

În acest exemplu, elementul .modal va avea un fundal estompat numai atunci când lățimea ecranului este de cel puțin 768px și browserul acceptă proprietatea backdrop-filter. Acest lucru vă permite să creați efecte atractive din punct de vedere vizual pe browserele moderne, evitând în același timp potențiale probleme de performanță sau erori de randare pe cele mai vechi.

4. Stilizarea bazată pe proprietăți personalizate (variabile CSS)

@when poate fi, de asemenea, utilizat împreună cu Proprietăți personalizate CSS (cunoscute și sub numele de variabile CSS) pentru a crea stiluri dinamice și orientate spre stare. Puteți utiliza JavaScript pentru a actualiza valoarea unei proprietăți personalizate și apoi utilizați @when pentru a aplica stiluri diferite pe baza acelei valori.

Mai întâi, definiți o proprietate personalizată:

:root {
  --theme-color: #007bff; /* Culoare temă implicită */
  --is-dark-mode: false;
}

Apoi, utilizați @when pentru a aplica stiluri pe baza valorii proprietății personalizate:

@when var(--is-dark-mode) = true {
  body {
    background-color: #333;
    color: #fff;
  }
  a {
    color: #ccc;
  }
}

În cele din urmă, utilizați JavaScript pentru a comuta valoarea proprietății personalizate --is-dark-mode:

document.getElementById('darkModeToggle').addEventListener('click', function() {
  document.documentElement.style.setProperty('--is-dark-mode', this.checked);
});

Acest lucru permite utilizatorilor să comute între temele deschise și întunecate, CSS-ul actualizându-se dinamic pe baza valorii proprietății personalizate. Rețineți că comparația directă a variabilelor CSS în `@when` s-ar putea să nu fie acceptată universal în toate browserele. În schimb, s-ar putea să aveți nevoie să utilizați o soluție cu o interogare media care verifică o valoare nenulă:

@when ( --is-dark-mode > 0 ) { ... }

Cu toate acestea, asigurați-vă că proprietatea personalizată are o valoare numerică pentru ca aceasta să funcționeze corect.

Notă de accesibilitate: Furnizarea de teme alternative (de exemplu, modul întunecat) este crucială pentru accesibilitate. Utilizatorii cu deficiențe de vedere pot beneficia de teme cu contrast ridicat. Asigurați-vă că comutatorul de temă este accesibil prin tastatură și cititoare de ecran.

5. Stilizarea bazată pe atributele de date

Puteți utiliza, de asemenea, @when cu atribute de date pentru a stiliza elementele pe baza valorilor lor de date. Acest lucru poate fi util pentru crearea de interfețe dinamice în care elementele își schimbă aspectul în funcție de interacțiunea utilizatorului sau de actualizările datelor.

De exemplu, să presupunem că aveți o listă de sarcini și fiecare sarcină are un atribut data-status care indică starea sa (de exemplu, „de făcut”, „în curs”, „finalizat”). Puteți utiliza @when pentru a stiliza fiecare sarcină în mod diferit, pe baza stării acesteia.

[data-status="todo"] {
  /* Stiluri implicite pentru sarcinile de făcut */
  color: #333;
}

@when attribute(data-status string equals "in-progress") {
  [data-status="in-progress"] {
    color: orange;
    font-style: italic;
  }
}

@when attribute(data-status string equals "completed") {
  [data-status="completed"] {
    color: green;
    text-decoration: line-through;
  }
}

Notă: suportul pentru condiția de test attribute() ar putea fi limitat sau nu este complet implementat în toate browserele în prezent. Testați întotdeauna temeinic.

Compatibilitatea browserului și polyfills

La sfârșitul anului 2024, suportul browserului pentru regula @when este încă în evoluție. Deși multe browsere moderne acceptă funcționalitatea de bază, unele browsere mai vechi este posibil să nu o facă. Prin urmare, este crucial să verificați tabelele de compatibilitate și să utilizați fallback-uri sau polyfills adecvate acolo unde este necesar.

Consultați întotdeauna resurse precum Can I use... pentru a verifica starea actuală a suportului browserului pentru @when și funcțiile conexe.

Bune practici pentru utilizarea @when

Concluzie

Regula @when este o completare puternică a setului de instrumente CSS, oferind dezvoltatorilor o modalitate mai flexibilă și mai expresivă de a aplica stiluri în mod condiționat. Combinând-o cu interogări media, interogări de funcții și Proprietăți personalizate CSS, puteți crea foi de stil mai robuste, adaptabile și ușor de întreținut. Deși suportul browserului este încă în evoluție, @when este o funcție care merită explorată și încorporată în fluxul de lucru modern de dezvoltare web.

Pe măsură ce web-ul continuă să evolueze, stăpânirea caracteristicilor precum @when va fi esențială pentru crearea de experiențe captivante, accesibile și performante pentru utilizatorii din întreaga lume. Îmbrățișați puterea stilizării condiționate și deblocați noi posibilități în dezvoltarea CSS.

Regula CSS @when: Stăpânirea Aplicării Condiționate a Stilurilor | MLOG