Risorse sul web
https://www.w3schools.com/css/css_grid.asp
https://www.ionos.it/digitalguide/siti-web/creare-siti/css-grid/
Il modulo CSS Grid Layout, indubbiamente il più utilizzato, offre un sistema di layout basato su griglia, con righe e colonne, che semplifica la progettazione di pagine Web.
Doversamente dal Felxbox layout, siamo di fronte ad un layout bidimensionale, ovvero, che gestisce due dimensioni contemporaneamente (colonne e righe).
Il funzionamento è sempre lo stesso; avremo proprietà da applicare al container (box contenitore) e proprietà da applicare ai singoli elementi (elementi contenuti).
<div class="grid-container"> <div class="grid-item1">1</div> <div class="grid-item2">2</div> <div class="grid-item3">3</div> <div class="grid-item4">4</div> <div class="grid-item5">5</div> <div class="grid-item6">6</div> <div class="grid-item7">7</div> <div class="grid-item8">8</div> <div class="grid-item9">9</div> </div>
Di seguito raggruppiamo tutte le proprietà per il conteiner:
display | con valore "grid" attiva il Grid layout |
grid-template-rows | con valori multipli imposta dimensioni e numero di righe da visualizzare |
grid-template-columns | con valori multipli imposta dimensioni e numero di colonne da visualizzare |
grid-gap | imposta una spaziatura uniforme tra righe e colonne |
grid-column-gap | imposta spaziatura unicamente tra le colonne |
grid-row-gap | imposta spaziatura unicamente tra le righe |
grid-template-rows | suddivide e raggruppa le celle di una griglia in aree |
justify-items | regola globalmente l’allineamento orizzontale per tutti gli elementi |
align-items | regola globalmente l’allineamento verticale per tutti gli elementi |
palce-items | shorthano per indicare i valori di justify-items e align-items |
Con la proprietà display attribuendole il valore "grid" attiviamo il CSS Grid Layout. Anche in questo caso i valori possibili sono due: grid e inline-grid.
.grid-container{ display: grid; }
Con la proprietà grid-template-columns definiamo contemporaneamente il numero e le dimensioni delle dimensioni da visualizzare nella griglia.
.grid-container{ display: grid; grid-template-columns: 150px 100px 100px 150px; }
Abbiamo definito 4 colonne, indicando 4 valori, la prima e l'ultima larghe 150px mentre le due in mezzo larghe 100px.
Oltre alle specifiche esatte dei pixel, è possibile utilizzare anche una percentuale o altre dimensioni comuni nei CSS. Con le specifiche "max-content" e "min-content" la griglia può essere creata anche in relazione al contenuto.
Questa proprietà è identica alla precedente con l'unica differenza che anziché definire colonne, con questa proprietà definiamo numero e dimensioni delle righe.
.grid-container{ display: grid; grid-template-columns: 150px 100px 100px 150px; grid-template-rows: 100px 100px; }
Le fraction sono un'unità di misura con una caratteristica speciale.
.grid-container { display: grid; grid-template-columns: 1fr 2fr 1fr 1fr 1fr; grid-template-rows: 100px 100px; }
Con questa unità di misura divisiamo lo schermo in modo simile alle percentuali.
Stiamo dicendo di dividere l'area in 5 unità orizzontali (colonne) con una colonna (la seconda) che sarà il doppio delle altre.
Il vantaggio di lavorare con dimensioni relative è che la griglia può adattarsi automaticamente alle dimensioni dello schermo.
Con la proprietà grid-gap indichiamo una spaziatura generale attorno a righe e colonne.
.grid-container{ display: grid; grid-template-columns: 150px 100px 100px 150px; grid-template-rows: 100px 100px; grid-gap: 5px; }
In altermativa con queste due proprietà possiamo specificare distintamente le spaziature per righe e colonne.
.grid-container{ display: grid; grid-template-columns: 150px 100px 100px 150px; grid-template-rows: 100px 100px; grid-column-gap: 10px; grid-row-gap: 5px; }
Con CSS Grid Layout è possibile riunire celle in aree e denominarle.
E' utile per delimitare delle aree all'interno della nostra templete-grid per poterla associare ad un elemento specifico.
Per prima cosa dovremo comunque procederre con la costruzione della griglia con le proprietà grid-templete-column e grid-templete-row:
.grid-container{ grid-templete-column: 100px 100px 100px 100px 100px; grid-templete-row: 50px 50px 50px; grid-gap: 10px; }
Abbiamo creato un templete di 5 colonne e 3 righe per un totale di 15 celle;
Possiamo ora procedere con la suddivisione in aree:
.grid-container{ grid-templete-column: 100px 100px 100px 100px 100px; grid-templete-row: 50px 50px 50px; grid-gap: 10px; grid-template-areas: "area1 area1 area1 area1 area1" "area2 area2 . area3 area3" "area2 area2 area4 area4 area4"; }
Si scrivono cella per cella i nomi delle aree desiderate. Se non si desidera assegnare una cella ma lasciarla vuota, basta inserire un punto.
Ogni riga va aperta e chiusa con le virgolette.
Possiamo ora procedere con l'assegnazione delle aree:
Note: per comprendere questo punto è opportuno conoscere già le proprietà da associale ai singoli elementi.
.grid-item1 { grid-area: area1; } .grid-item2 { grid-area: area2; } .grid-item3 { grid-area: area3; } .grid-item4 { grid-area: area4; }
La proprietà justfy-items, proprietà per il container, regola globalmente l'allineamento in senso orizzontale di tutti gli elementi della griglia.
Note: più avanti vedremo proprietà per i singoli elementi in grado di regolare singolarmente le visualizzazioni.
.grid-container { justify-items: center; }
La proprietà align-items, anch'essa proprietà per il container, regola globalmente l'allineamento in senso verticale di tutti gli elementi della griglia.
.grid-container { justify-items: start; }
start | in senso orizzontale: da sinistra; in senso veriticale: dall'alto; |
end | in senso orizzontale: da destra; in senso veriticale: dal basso; |
center | al centro |
stretch | distendi/espandi |
La proprietà place-items è una shorthand per la sintassi abbreviate; ci consente di indicare contemporaneamente, in ordine, i valori di justify-items e align-items.
.grid-container{ place-items: start / center; }
<div class="grid-container"> <p class="grid-item1">1</p> <p class="grid-item2">2</p> <p class="grid-item3">3</p> <p class="grid-item4">4</p> <p class="grid-item5">5</p> <p class="grid-item6">6</p> <p class="grid-item7">7</p> <p class="grid-item8">8</p> <p class="grid-item9">9</p> <p class="grid-item10">10</p> </div>
.grid-container{ display: grid; grid-template-columns: 100px 100px 100px 100px 100px; grid-template-rows: 100px 100px 100px 100px 100px; grid-gap: 5px; }
Griglia formata da 5 colonne e 5 righe con una spaziatura uniforme di 5px. Layout totale di 25 celle.
Totale di 10 elementi <p> da distribuire sulla griglia.
Con le seguenti proprietà è possibile posizionare i diversi oggetti all'interno della griglia. Le proprietà vanno attribuite singolaremente ad ogni elemento contenuto.
grid-column-start | valore numerico che indica da quale posizione/colonna inizia un elemento |
grid-column-end | valore numerico che indica fino a quale posizione/colonna si estende un elemento |
grid-row-start | valore numerico che indica da quale posizione/riga inizia un elemento |
grid-row-end | valore numerico che indica fino a quale posizione/riga si estende un elemento |
grid-column | shorthand per indicare le colonne da occupare |
grid-row | shorthand per indicare le righe da occupare |
grid-area | associa e posiziona gli elementi nelle aree create nel templete container |
justify-self | imposta allineamento orizzontale per il singolo elemento |
align-self | imposta allineamento verticale per il singolo elemento |
place-self | shorthand per justify-self align-self |
.grid-item1 { grid-column-start: 1; grid-column-end: 6; grid-row-start: 1; grid-row-end: 3; }
Le seguenti proprietà faranno in modo che l'elemento con classe .grid-item1 occuperà uno spazio nella griglia di 5 colonne per 2 righe.
I numeri indicanti non fanno riferimento alle celle bensi alle linee.
valori numerici | indicano le linee per le colonne da sinistra a destra e dall'alto verso il basso per le righe |
span | con "span" si specifica quante celle bisogna includere nella direzione indicata (column o row) |
nomi delle righe | all'interno di "grid-template-rows" e "grid-template-columns" è possibile dare un nome alle righe (tra parentesi quadre) e poi fare riferimento a questi nomi |
Come visto nell'esempio qui sopra possiamo indicano le linee numericamente; per le colonne i numeri faranno riferimento alle linee da sinistra a destra e per le righe, i numeri faranno riferimento alle linee dall'alto verso il basso.
Le proprietà grid-column e grid-row sono delle shorthand; ci permettono di scrivere i valori start ed end di column e row in un'unica proprietà.
E' possibile utilizzarle valorizzandole mediante le paroli chiave span e i line-name.
Con la parola chiave "span" si specifica quante celle bisogna includere nella direzione indicata.
.grid-item1 { grid-column: 1 / span 6; grid-row: 1 / span 3; }
Le proprietà grid-column e grid-row sono delle shorthand
All'interno delle proprietà grid-template-rows e grid-template-columns per il container, che utilizziamo per definire il template della griglia, è possibile includere tra i valori, i nomi delle linee; tali nomi sono da indicare tra parentesi quadre; successivamente sarà possibile utilizzarli come riferimento all'interno delle shorthand grid-column e grid-row.
.grid-container{ grid-template-column: 100px [col-linea1] 100px [col-linea2] 100px [col-linea3]; grid-template-column: 100px [row-linea1] 100px [row-linea2] 100px [row-linea3]; }
.grid-item1{ grid-column: col-linea1 col-linea2; grid-row: row-linea1 row-linea3; }
La proprietà è utilizzate negli elementi contenuti per associare le aree create con la proprietà per il container container grid-templete-areas trattata più sopra.
.grid-item1{ grid-area: area1; }
La proprietà justify-selft, simile a justify-items per il container, è utile per indicare l'allineamento orizzontale del singolo elemento.
.grid-item1{ justify-self: start; }
La proprietà align-selft, simile a align-items per il container, è utile per indicare l'allineamento verticale del singolo elemento.
.grid-item1{ align-self: center; }
La proprietà place-seft, simile a place-items per il container, è una shorthand di sintassi abbreviata che ci permette di indicare contemporaneamente i valori, in ordine, di justify-self e align-self.
.grid-item1{ place-self: start / center; }
I valori possibili sono i medesimi delle proprietà similari dedicate al container.
Con le seguenti proprietà e funzioni, che ci consentono di creare degli automatismi, è possibile impostare un template per una griglia che si adatti automaticamente ai diversi dispositivi.
Le seguenti istruzioni si applicano sempre al box-container.
repeat() | imposta specifica dimensione e frequenza di ripetizione |
minmax( ) | imposta specifiche dimensioni minime e massime |
Con funzione repeat() si può impostare una specifica di dimensione e stabilire la frequenza di ripetizione dello schema.
La funzione va applicata all'interno delle proprietà grid-template-column e grid-template-rows e prevede due paramenti: il primo è il comportamento il secondo è la dimensione specifica.
.grid-container{ grid-template-columns: repeat(auto-fit, 100px); grid-template-rows: repeat(auto-fit, 100px); }
Valori possibili di comportamento
auto-fit | regola le singole celle in modo tale che lo spazio venga utilizzato fino al bordo |
auto-fill | aggiunge il maggior numero possibile di celle senza rompere il confine del container può lasciare spazio inutilizzato |
Con la funzione minmax() è possibile impostare valori minimi e massimi e fare in modo che un item non diventi troppo piccolo o troppo grande.
Anche in questo caso sono previsti due paramentri; in ordine, la misura minima e la misura massima.
All'interno delle proprietà grid-template-columns e grid-template-rows vanno utilizzate in combinata con la funzione repeat() ed al posto del campo desinato alla misura specifica.
.grid-container{ grid-template-columns: repeat(auto-fit, minmax(50px, 150px)); grid-template-rows: repeat(auto-fit, minmax(50px, 150px)); }
Le proprietà grid-auto-columns e grid-auto-rows sono proprietà che incorporano già la funzione repeat().
Possono essere utilizzate con o senza la funzione minmax().
grid-auto-columns | indicando la dimensione della colonna, suddivide la griglia in tante colonne quante quelle possibili |
grid-auto-rows | indicando la dimensione della riga, suddivide la griglia in tante colonne quante quelle possibili |
.grid-container{ grid-auto-columns: 100px; grid-auto-rows: 100px; }
.grid-container{ grid-auto-columns: minmax(50px, 150px); grid-auto-rows: minmax(50px, 150px); }