Italiano

Esplora la regola @when di CSS, una potente funzionalità che consente l'applicazione condizionale dello stile in base al supporto del browser, dimensioni e altro.

Regola @when di CSS: Padroneggiare l'Applicazione Condizionale dello Stile

Il mondo dei CSS è in continua evoluzione, offrendo agli sviluppatori modi più potenti e flessibili per definire lo stile delle pagine web. Una di queste funzionalità che sta guadagnando terreno è la regola @when, nota anche come CSS Conditional Rules Module Level 1. Questa regola consente di applicare stili CSS in modo condizionale, in base al verificarsi di condizioni specifiche. È uno strumento potente per il design responsivo, il rilevamento delle funzionalità e la creazione di fogli di stile più robusti e adattabili.

Cos'è la regola @when di CSS?

La regola @when è una at-rule condizionale in CSS che permette di definire stili che vengono applicati solo se determinate condizioni sono vere. Pensala come un'istruzione if per i tuoi CSS. A differenza delle media query, che si concentrano principalmente sulle caratteristiche della viewport (dimensioni dello schermo, orientamento, ecc.), @when fornisce un modo più generale ed estensibile per gestire lo styling condizionale. Espande le at-rule condizionali esistenti come @supports e @media.

Vantaggi Chiave dell'Uso di @when

Sintassi della Regola @when

The basic syntax of the @when rule is as follows:
@when <condizione> {
  /* Regole CSS da applicare quando la condizione è vera */
}

La <condizione> può essere qualsiasi espressione booleana valida che restituisce true o false. Questa espressione spesso include:

Esempi Pratici di @when in Azione

Esploriamo alcuni esempi pratici per illustrare la potenza e la versatilità della regola @when.

1. Design Responsivo con @when e Media Query

Il caso d'uso più comune per @when è il design responsivo, in cui si adattano gli stili in base alle dimensioni dello schermo. Sebbene le media query possano raggiungere questo obiettivo da sole, @when fornisce un approccio più strutturato e leggibile, specialmente quando si ha a che fare con condizioni complesse.

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

In questo esempio, gli stili all'interno del blocco @when vengono applicati solo quando la larghezza dello schermo è compresa tra 768px e 1023px (dimensione tipica di un tablet). Ciò fornisce un modo chiaro e conciso per definire stili per intervalli specifici della viewport.

Nota sull'Internazionalizzazione: Il design responsivo è fondamentale per un pubblico globale. Considera le diverse dimensioni degli schermi nelle varie regioni. Ad esempio, l'uso dei dispositivi mobili è più elevato in alcuni paesi, rendendo il design mobile-first ancora più cruciale.

2. Rilevamento delle Funzionalità con @when e @supports

@when può essere combinato con @supports per applicare stili solo quando una specifica funzionalità CSS è supportata dal browser. Ciò consente di migliorare progressivamente il tuo sito web, offrendo un'esperienza migliore agli utenti con browser moderni pur mantenendo la compatibilità con quelli più vecchi.

@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 {
    /* Stili di fallback per i browser che non supportano grid */
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
  }
  .item {
    width: calc(50% - 10px); /* Regola la larghezza per i browser più vecchi */
  }
}

Qui, usiamo @supports per verificare se il browser supporta CSS Grid Layout. Se lo supporta, applichiamo stili basati su grid al .container. In caso contrario, forniamo stili di fallback utilizzando flexbox per garantire che venga ottenuto un layout simile nei browser più vecchi.

Nota sull'Accessibilità Globale: Il rilevamento delle funzionalità è importante per l'accessibilità. I browser più vecchi potrebbero non supportare i nuovi attributi ARIA o gli elementi semantici di HTML5. Fornisci fallback appropriati per garantire che il contenuto rimanga accessibile.

3. Combinare Media Query e Feature Query

La vera potenza di @when deriva dalla sua capacità di combinare media query e feature query per creare regole di stile condizionali più complesse e sfumate.

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

In questo esempio, l'elemento .modal avrà uno sfondo sfocato solo quando la larghezza dello schermo è di almeno 768px e il browser supporta la proprietà backdrop-filter. Ciò consente di creare effetti visivamente accattivanti sui browser moderni, evitando potenziali problemi di prestazioni o glitch di rendering su quelli più vecchi.

4. Styling Basato su Proprietà Personalizzate (Variabili CSS)

@when può anche essere utilizzato in combinazione con le Proprietà Personalizzate CSS (note anche come variabili CSS) per creare uno styling dinamico e basato sullo stato. È possibile utilizzare JavaScript per aggiornare il valore di una proprietà personalizzata e quindi utilizzare @when per applicare stili diversi in base a tale valore.

Per prima cosa, definisci una proprietà personalizzata:

:root {
  --theme-color: #007bff; /* Colore del tema predefinito */
  --is-dark-mode: false;
}

Quindi, usa @when per applicare gli stili in base al valore della proprietà personalizzata:

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

Infine, usa JavaScript per alternare il valore della proprietà personalizzata --is-dark-mode:

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

Ciò consente agli utenti di passare da un tema chiaro a uno scuro, con il CSS che si aggiorna dinamicamente in base al valore della proprietà personalizzata. Nota che il confronto diretto delle variabili CSS in `@when` potrebbe non essere universalmente supportato su tutti i browser. Potrebbe essere necessario utilizzare un workaround con una media query che controlla un valore diverso da zero:

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

Tuttavia, assicurati che la proprietà personalizzata abbia un valore numerico affinché questo funzioni correttamente.

Nota sull'Accessibilità: Fornire temi alternativi (ad es. modalità scura) è fondamentale per l'accessibilità. Gli utenti con disabilità visive possono beneficiare di temi ad alto contrasto. Assicurati che il selettore del tema sia accessibile tramite tastiera e screen reader.

5. Styling Basato su Attributi Data

Puoi anche usare @when con gli attributi data per applicare stili agli elementi in base ai loro valori. Questo può essere utile per creare interfacce dinamiche in cui l'aspetto degli elementi cambia in base all'interazione dell'utente o agli aggiornamenti dei dati.

Ad esempio, supponiamo di avere un elenco di attività, e ogni attività ha un attributo data-status che ne indica lo stato (es. "todo", "in-progress", "completed"). Puoi usare @when per definire uno stile diverso per ogni attività in base al suo stato.

[data-status="todo"] {
  /* Stili predefiniti per le attività da fare */
  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;
  }
}

Nota: il supporto per la condizione di test attribute() potrebbe essere limitato o non completamente implementato in tutti i browser al momento. Testa sempre a fondo.

Compatibilità dei Browser e Polyfill

Alla fine del 2024, il supporto dei browser per la regola @when è ancora in evoluzione. Sebbene molti browser moderni supportino la funzionalità principale, alcuni browser più vecchi potrebbero non farlo. Pertanto, è fondamentale controllare le tabelle di compatibilità e utilizzare fallback o polyfill appropriati dove necessario.

Consulta sempre risorse come Can I use... per verificare lo stato attuale del supporto dei browser per @when e le funzionalità correlate.

Best Practice per l'Uso di @when

Conclusione

La regola @when è un'aggiunta potente al toolkit CSS, offrendo agli sviluppatori un modo più flessibile ed espressivo per applicare stili in modo condizionale. Combinandola con media query, feature query e Proprietà Personalizzate CSS, puoi creare fogli di stile più robusti, adattabili e manutenibili. Sebbene il supporto dei browser sia ancora in evoluzione, @when è una funzionalità che vale la pena esplorare e integrare nel tuo flusso di lavoro di sviluppo web moderno.

Mentre il web continua a evolversi, padroneggiare funzionalità come @when sarà essenziale per creare esperienze coinvolgenti, accessibili e performanti per gli utenti di tutto il mondo. Sfrutta la potenza dello styling condizionale e sblocca nuove possibilità nel tuo sviluppo CSS.