Griglia CSS

La griglia CSS è un motore di layout molto potente, ma le righe e le Le tracce di colonne create su una griglia principale possono essere utilizzate solo per il posizionamento diretto secondari del container della griglia. Qualsiasi autore ha definito aree della griglia con nome e linee sono andate perse su qualsiasi altro elemento diverso da una come figlio diretto. Con subgrid puoi monitorare dimensioni, modelli e nomi con griglie nidificate. Questo articolo spiega come funziona.

Prima della griglia secondaria, i contenuti venivano spesso personalizzati manualmente per evitare layout irregolari come questo.

Vengono mostrate tre schede affiancate, ciascuna con tre frammenti di contenuti:
intestazione, paragrafo e link. Ognuno di questi ha una lunghezza di testo diversa, creando alcune
strani allineamenti nelle schede affiancate.

Dopo la griglia secondaria, è possibile allineare i contenuti con dimensioni variabili.

Vengono mostrate tre schede affiancate, ciascuna con tre frammenti di contenuti:
intestazione, paragrafo e link. ciascuna ha una lunghezza di testo diversa, ma la griglia secondaria contiene
ha corretto gli allineamenti consentendo all'elemento più alto di ogni elemento di contenuto di impostare la riga
l'altezza, risolvendo eventuali problemi di allineamento.

Supporto dei browser

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 71.
  • Safari: 16.

Origine

Nozioni di base sulla griglia secondaria

Ecco un caso d'uso semplice che introduce le nozioni di base di CSS subgrid. R la griglia è definita con due colonne denominate, la prima è larga 20ch e la seconda è "il resto" dello spazio 1fr. I nomi delle colonne non sono obbligatori, ma ideale per scopi illustrativi ed educativi.

.grid {
  display: grid;
  gap: 1rem;
  grid-template-columns: [column-1] 20ch [column-2] 1fr;
}

Poi, un elemento secondario di quella griglia occupa queste due colonne, viene impostato come contenitore della griglia e adotta le colonne di quella principale impostando grid-template-columns su subgrid.

.grid > .subgrid {
  grid-column: span 2;

  display: grid;
  grid-template-columns: subgrid; /* 20ch 1fr */
}
Uno screenshot della griglia CSS DevTools, che mostra due colonne affiancate con un nome all'inizio della riga delle colonne.
https://codepen.io/web-dot-dev/pen/NWezjXv

Ecco fatto, le colonne di una griglia principale sono state effettivamente passate a un livello una griglia secondaria. Questa griglia secondaria ora può assegnare elementi secondari a una di queste colonne.

Sfida! Ripeti la stessa demo ma fallo per grid-template-rows.

Condividere una "macro" a livello di pagina griglia

I designer spesso lavorano con griglie condivise, disegnando linee su un intero design, allineando qualsiasi elemento desiderato. Ora anche gli sviluppatori web possono farlo. Questo valore e molto altro ancora.

Dalla macro griglia al design finito. Le aree denominate nella griglia vengono create in anticipo e successivi vengono posizionati come desiderato.

L'implementazione del flusso di lavoro della griglia del designer più comune può fornire eccellenti informazioni sulle funzionalità, sui flussi di lavoro e sulle potenzialità di subgrid.

Questo è uno screenshot acquisito da Chrome DevTools di una macro di layout delle pagine per dispositivi mobili a griglia. Le righe hanno nomi e sono presenti aree chiare per il posizionamento dei componenti.

R
screenshot da DevTools a griglia CSS di Chrome che mostra un layout a griglia per dispositivi mobili
in cui le righe e le colonne vengono denominate per un'identificazione rapida: fullbleed,
sistema-stato, nav-principale, intestazione-principale, principale, piè di pagina e gesti di sistema.

Il seguente CSS crea questa griglia, con righe e colonne denominate per il dispositivo layout. Ogni riga e colonna ha una dimensione.

.device {
    display: grid;
    grid-template-rows:
      [system-status] 3.5rem
      [primary-nav] 3rem
      [primary-header] 4rem
      [main] auto
      [footer] 4rem
      [system-gestures] 2rem
    ;
    grid-template-columns: [fullbleed-start] 1rem [main-start] auto [main-end] 1rem [fullbleed-end];
}

Alcuni stili aggiuntivi conferiscono il seguente design.

La stessa griglia CSS DevTools di prima, ma questa volta con alcune
UI di sistema mobile presente, alcune ombre e un po' di colore. Aiuta a vedere dove
la progettazione.

All'interno di questo elemento padre, sono presenti vari elementi nidificati. Il design richiede una sotto le righe di intestazione e di navigazione. La colonna più lontana a sinistra e a destra i nomi delle righe sono fullbleed-start e fullbleed-end. Assegna un nome alle linee della griglia in questo modo consente ai bambini di allinearsi contemporaneamente al posizionamento sintetica di fullbleed. È molto comodo, come vedrai a breve.

R
screenshot dell'overlay della griglia di DevTools ingrandito, in particolare su
i nomi delle colonne fullbleed-start e fullbleed-end.

Dopo avere creato il layout generale del dispositivo con righe e colonne con nomi utili, utilizza subgrid per passare le righe e le colonne con nome corretto ai layout a griglia nidificati. Questo è quel momento magico di subgrid. Il layout del dispositivo trasmette le righe denominate al contenitore di app, che poi le passa a ciascuno dei suoi bambini.

.device > .app,
.app > * {
    display: grid;
    grid: subgrid / subgrid;

    /* same as */
    grid-template-rows: subgrid;
    grid-template-columns: subgrid;
}

La griglia secondaria CSS è un valore utilizzato al posto di un elenco di tracce della griglia. Le righe e le risorse le colonne separate da quelle dell'elemento principale, sono ora le stesse righe e colonne che offre. In questo modo sono disponibili i nomi delle linee della griglia .device agli elementi secondari di .app, anziché solo .app. Gli elementi all'interno di .app erano impossibile fare riferimento alle tracce della griglia create da .device prima della griglia secondaria.

Con tutto questo definito, l'immagine nidificata è ora in grado di spostarsi al vivo layout grazie a subgrid. Non ci sono valori negativi o trucchi, piuttosto un bel una riga con la scritta "il mio layout va da fullbleed-start a fullbleed-end".

.app > main img {
    grid-area: fullbleed;
}
Il layout della macro finito, completo di un'immagine nidificata a larghezza intera che si posiziona correttamente sotto la barra di navigazione principale e le righe di intestazione e che si estende a ciascuna delle righe di colonna con nome al vivo.
https://codepen.io/web-dot-dev/pen/WNLyjzX

Eccola, una griglia di macro implementata in CSS, come quella usata dai designer. Questo può crescere e crescere insieme a te in base alle tue esigenze.

Verifica la presenza di assistenza

Il miglioramento progressivo con CSS e la griglia secondaria è familiare e diretto. Usa @supports e chiedi al browser se comprende all'interno della parentesi come valore per le colonne o le righe del modello. L'esempio seguente controlla se la proprietà grid-template-columns supporta la parola chiave subgrid, che se true, significa che la griglia secondaria può essere usata

@supports (grid-template-columns: subgrid) {
  /* safe to enhance to */
}

Devtools

Chrome, Edge, Firefox e Safari hanno tutti DevTools una griglia CSS efficace, mentre Chrome, Edge e Firefox dispongono di strumenti specifici per supportare la gestione della griglia secondaria. Annuncio di Chrome dei loro strumenti 115 mentre Firefox li utilizza da almeno un anno.

Anteprima screenshot del badge della griglia secondaria negli elementi di Elementi
dal riquadro.

Il badge della griglia secondaria funziona come il badge della griglia, ma distingue visivamente quali sono invece griglie secondarie.

Risorse

Questo elenco è una raccolta di articoli, demo e ispirazioni generali sulle sottogriglie per iniziare. Se stai cercando il passaggio successivo per la tua griglia secondaria istruzione, divertiti a esplorare tutte queste fantastiche risorse.