5 snippet CSS che ogni sviluppatore front-end dovrebbe conoscere nel 2024

Una risorsa CSS affidabile, potente e stabile che puoi utilizzare subito.

Credo che ogni sviluppatore front-end dovrebbe sapere che :has() non è solo un "selettore principale", le modalità e i motivi di un subgrid, come nidificare con la sintassi CSS integrata, come consentire al browser di bilanciare il testo del titolo a capo e come utilizzare le unità di query del container.

Questo post è una continuazione dei 6 snippet CSS dell'anno scorso che ogni sviluppatore front-end dovrebbe conoscere nel 2023.

CSS:has(.potential-beyond-being-a-parent-selector)

:has()

Supporto dei browser

  • 105
  • 105
  • 121
  • 15,4

Fonte

:has() è arrivato su tutti i principali browser alla fine del 2023. Questo nuovo selettore sembra piccolo e innocente, ma ti sorprenderà per tutti i casi d'uso che può offrire: giochi, reattività, layout basato sui contenuti, componenti intelligenti e molto altro ancora, che è illustrato in questo articolo di Jhey.

Sono visualizzati 4 riquadri, ciascuno con un'immagine e una didascalia.
Ogni immagine mostra un cervello che attiva sempre più energia. Nel primo riquadro c'è :has(), mentre nel secondo riquadro figura:has(caption) come selettore principale.
Nel terzo riquadro, come selettore di quantità, viene indicato .layout:has(> :nth-child(5)).
Il quarto riquadro indica html:has(#checked) .new-subject come selettore di modifica del soggetto condizionale.

Ecco un paio di esempi di utilizzo di :has() come selettore principale. Ha questo nome perché di solito il soggetto di un selettore si trova alla fine, ad esempio ul li, dove li è il soggetto e riceve gli stili. Con :has(), l'elemento all'inizio del selettore può diventare il soggetto. Nell'esempio seguente, il pulsante presenta uno spazio vuoto se all'interno è presente un elemento con classe .icon. Se all'interno è presente un'immagine, la scheda cambia l'orientamento.

button:has(.icon) {
  gap: 1ch;
}

.card:has(img) {
  grid-auto-flow: row;
}

Un selettore desiderato lungo deve modificare un layout in base al numero di elementi che contiene. Ora questo è possibile con :has() perché può mantenere il container come oggetto durante l'esecuzione della query sul numero di figli.

main:has(> :nth-child(5)) {…}

Un altro esempio di livello superiore consiste nel modificare gli stili impostati sull'intero documento quando viene attivata una casella di controllo specifica nella pagina:

html:has(#dark-mode:checked) {…}

Questi sono casi d'uso semplici che non cambiano l'oggetto del selettore. Se guardi solo esempi come questo, potresti pensare che :has() sia un selettore padre. Considera però gli esempi che seguono. Questi cercano qualcosa in base a un predecessore comune, quindi ruotano il selettore in base a un elemento figlio in un punto più interno della pagina.

Questo mostra un elemento di errore del modulo se uno qualsiasi dei suoi input non è valido:

form:has(:user-invalid) .error {
  display: block;
}

Questo fa scorrere l'area dei contenuti principale quando una barra di navigazione laterale ha una classe .--is-open:

html:has(#sidenav.--is-open) main {
  translate: -320px;
}

Ecco una demo divertente che utilizza :has() come selettore principale, :has() con query sulla quantità e query container per creare un layout a griglia in grado di visualizzare elegantemente da 1 a 12 elementi con orientamenti verticale o orizzontale:

Prova Codepen

Crea una griglia

subgrid

Supporto dei browser

  • 117
  • 117
  • 71
  • 16

Fonte

Per molti anni la community web front-end ha chiesto che la sottogriglia aiutasse a completare e completare il popolarissimo e potente motore di layout a griglia CSS. Ora è disponibile in tutti e tre i motori principali.

Per una panoramica, scopri di più sulla griglia di sottotitoli qui.

body {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(30ch, 1fr));

  > article {
    display: grid;
    grid-row: span 4; 
    grid-template-rows: subgrid;
  }
}

Nest in modalità CSS

nesting

Supporto dei browser

  • 120
  • 120
  • 117
  • 17.2

Fonte

La nidificazione CSS integrata è diventata disponibile in tutti i principali browser nel 2023. Ho anche aggiornato il sito web rimuovendo il processo di compilazione con nidificazione e ora spedisco un foglio di stile più piccolo. Esatto, i fogli di stile con nidificazione hanno dimensioni più piccole e tutti gli strumenti per sviluppatori dei browser sono pronti per rappresentarli.

Puoi trovare una panoramica della sintassi di nidificazione dei CSS qui, per tutti i dettagli. Il seguente esempio di codice mostra un esempio di sintassi.

.you {
  .can-totally-ship-this {
    &.if-you-wanted {
      /* it's VERY MUCH like SCSS */
      
      &:is(:hover, :focus-visible) {
        /* put a bird on it */
      }
    }
  }
}

.for-theming {
  @media (prefers-color-scheme: dark) {
    /* you can nest media queries */
  }
}

/* or for theming with [data-theme="dark"] */
.button {
  background: black;
  color: white;

  /* nest and do more than just append, flip it and reverse it */
  [data-theme="dark"] & {
    background: white;
    color: black;
  }
}

Consenti al browser di bilanciare i titoli

balance

Supporto dei browser

  • 114
  • 114
  • 121

Fonte

pretty

Supporto dei browser

  • 117
  • 117
  • x
  • x

Fonte

Senza text-wrap: balance, gli sviluppatori e gli autori dei testi possono lasciare i suggerimenti di interruzione di riga, ad esempio gli elementi <wbr> o &shy;. È per lo più una battaglia persa perché, non appena i contenuti vengono tradotti, ingranditi o modificati in alcun modo, non c'è garanzia che quei suggerimenti siano nel posto giusto per la nuova presentazione dei contenuti.

Con il testo a capo bilanciato, puoi lasciare questa operazione al browser. Puoi visualizzare un confronto nel codepen di seguito.

Utilizza unità di query container

cqw

Supporto dei browser

  • 105
  • 105
  • 110
  • 16

Fonte

Il post dell'anno scorso suggeriva che ogni sviluppatore front-end dovrebbe sapere come scrivere una query container. Se non l'hai ancora fatto, fai in modo che il 2024 sia l'anno giusto e dai un'occhiata alle unità di query dei container. Per riassumere, Ahmad Shadeed ha scritto un ottimo articolo sulle unità di query container nel 2021.

Sono disponibili sei nuove unità di poster:

  1. Una variante in linea cqi.
  2. Una variante di larghezza cqw.
  3. Una variante di blocco cqb.
  4. Una variante di altezza cqh.
  5. Una variante per qualsiasi lunghezza inferiore a cqmin.
  6. Una variante per qualsiasi lunghezza è maggiore di cqmax.

Considera uno scenario per animazioni relative e intrinseche in un contenitore. Un elemento secondario che esce completamente dal container utilizzando 100cqi, che corrisponde al 100% delle dimensioni incorporate del container.

@keyframes slide-out-of-container {
  to {
    translate: -100cqi;
  }
}

Ecco una scheda con una tipografia adattabile al container e un'immagine che si adatta all'orientamento del contenitore, diventando metà delle dimensioni se l'orientamento è orizzontale.

.card {
  :is(h2,h3) {
    font-size: clamp(1.5rem, 5cqi, 4rem);
  }

  img {
    inline-size: 100cqi;

    @container (orientation: landscape) {
      inline-size: 50cqi;
    }
  }
}

Se non conosci queste unità, probabilmente sarebbe opportuno esaminare tutte le unità disponibili nel 2024.