La griglia CSS è un motore di layout molto potente, ma le tracce di riga e colonna create in una griglia principale possono essere utilizzate solo per posizionare i figli diretti del contenitore della griglia. Tutte le aree e le linee della griglia
denominate definite dall'autore andranno perse su qualsiasi altro elemento rispetto a un
elemento secondario diretto. Con subgrid
, le dimensioni, i modelli e i nomi dei canali possono essere condivisi con le griglie nidificate. Questo articolo spiega come funziona.
Prima della griglia secondaria, i contenuti venivano spesso personalizzati per evitare layout frastagliati come questo.
Dopo la griglia secondaria, è possibile allineare i contenuti con dimensioni variabili.
Nozioni di base sulla griglia secondaria
Ecco un caso d'uso semplice che introduce le nozioni di base di CSS subgrid
. Una
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 sono molto utili a scopo illustrativo e didattico.
.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 dell'elemento principale impostando grid-template-columns
su
subgrid
.
.grid > .subgrid {
grid-column: span 2;
display: grid;
grid-template-columns: subgrid; /* 20ch 1fr */
}
Ecco fatto: le colonne di una griglia principale sono state trasferite di un livello a 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
.
Condividi una griglia "macro" a livello di pagina
I designer spesso lavorano con griglie condivise, tracciando linee su un intero design e allineando a queste qualsiasi elemento. Ora anche gli sviluppatori web possono farlo. Ora è possibile realizzare questo flusso di lavoro esatto e molti altri.
L'implementazione del flusso di lavoro più comune della griglia di progettazione può fornire eccellenti
insight sulle funzionalità, sui flussi di lavoro e sulle potenzialità di subgrid
.
Questo è uno screenshot acquisito da Chrome DevTools di una macro del layout delle pagine per dispositivi mobili. Le linee hanno nomi e sono presenti aree ben definite per il posizionamento dei componenti.
Il seguente CSS crea questa griglia, con righe e colonne denominate per il layout dispositivo. 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 generano il seguente design.
All'interno di questo elemento padre, sono presenti vari elementi nidificati. Il design richiede un'immagine
a larghezza intera sotto le righe di navigazione e di intestazione. I nomi delle righe di colonna più a sinistra e a destra sono fullbleed-start
e fullbleed-end
. L'assegnazione di nomi alle linee della griglia consente agli elementi secondari di allinearsi a ciascuno contemporaneamente con la scorciatoia del posizionamento di fullbleed
. È molto pratico, come vedremo a breve.
Con il layout generale del dispositivo creato con righe e colonne ben denominate, utilizza
subgrid
per passare le righe e le colonne ben denominate ai layout di griglia nidificati. Questo
è quel momento magico di subgrid
. Il layout del dispositivo passa le righe e le colonne denominate al contenitore dell'app, che le trasmette a tutti i suoi elementi secondari.
.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 colonne che l'elemento comprende rispetto all'elemento principale, ora sono le stesse righe e colonne che offre. In questo modo, i nomi delle righe della griglia .device
sono disponibili per i figli di .app
, anziché solo per .app
. Gli elementi all'interno di .app
non potevano fare riferimento alle tracce della griglia create da .device
prima della griglia secondaria.
Una volta definiti tutti questi elementi, l'immagine nidificata può ora occupare tutto lo spazio a disposizione nel layout grazie a subgrid
. Non ci sono valori negativi o trucchi, ma un bel testo
di riga che dice "il mio layout va da fullbleed-start
a fullbleed-end
".
.app > main img {
grid-area: fullbleed;
}
Eccola, una griglia di macro implementata in CSS, come quella usata dai designer. Questo concetto può crescere e crescere insieme a te in base alle tue esigenze.
Verifica la presenza di assistenza
Il miglioramento progressivo con CSS e sottogriglia è familiare e semplice.
Utilizza @supports
e all'interno delle parentesi chiedi al browser se riconosce la sottogriglia come valore per le colonne o le righe del modello. Il seguente esempio verifica se la proprietà grid-template-columns
supporta la parola chiave subgrid
. Se il valore è true, significa che è possibile utilizzare la sottogriglia.
@supports (grid-template-columns: subgrid) {
/* safe to enhance to */
}
DevTools
Chrome, Edge, Firefox e Safari dispongono di ottimi strumenti per sviluppatori CSS grid e Chrome, Edge e Firefox dispongono di strumenti specifici per la gestione delle sottogriglia. Chrome ha annunciato i propri strumenti in 115, mentre Firefox li ha da un anno o più.
Il badge della sottogriglia funziona come il badge della griglia, ma distingue visivamente le griglie che sono sottogriglie da quelle che non lo sono.
Risorse
Questo elenco è una raccolta di articoli, demo e ispirazioni generali sulle sottogriglie per iniziare. Se stai cercando il passaggio successivo per la formazione sulla sottostruttura, divertiti a esplorare tutte queste fantastiche risorse.
- MDN
- Rachel Andrew con sottotitoli codificati allineati
- Rachel Andrew con 10 esempi fantastici
- Rachel Andrew con un sito di esempi
- Articolo di Ahmad Shadeed
- Michelle Barker al CSS Day 2022
- Carte
- Chris Coyier con i moduli
- Facundo Corradini con allineamento modulo
- Chris Coyier con gli indicatori per allineare gli elementi dell'elenco
- Michelle Barker esce dal contenitore per allinearsi alla griglia principale
- Miriam Suzanne che mostra i nomi delle linee con nome e le interazioni con la griglia secondaria
- Kevin Powell con nozioni di base sulle aree denominate
- Kevin Powell con elenchi allineati
- Shannon Moeller con elenchi allineati
- Kevin Powell con una griglia a livello di pagina trasferita ai componenti
- Elad Shechter con un overlay devtool e un fallback
- Aaron Iker ha fatto un buon utilizzo tipografico della griglia secondaria per l'allineamento di base dei footnotes a piè di pagina
- Adam Argyle con un'immagine a tutta pagina all'interno di un articolo