Comprensione della griglia CSS Algoritmo di posizionamento automatico

In uno dei nostri primi tutorial introduttivi su CSS Grid abbiamo esaminato colonne fluide e grondaie migliori. Abbiamo appreso che non è necessario specificare esattamente dove vogliamo posizionare i nostri elementi della griglia; se dichiariamo le proprietà della nostra griglia, Grid inserirà i nostri elementi in base al suo algoritmo di posizionamento automatico.

In questo tutorial daremo un'occhiata a come questo algoritmo si basa sul suo lavoro e su come possiamo influenzarlo.

Impostare

Se il tuo browser non è configurato per supportare Grid dovrai sistemarlo per seguirlo. Leggi questo:

  • Layout griglia CSS: una guida rapida

    Il modo in cui affrontiamo il layout sul web sta cambiando e in prima linea in questo cambiamento c'è il layout griglia CSS. Questa guida di avvio rapido aggiornata salterà i dettagli ...
    Ian Yates
    Layout griglia CSS

Ha iniziato con una griglia

Ecco una griglia dimostrativa per dare il via alle cose; è un contenitore che abbiamo dichiarato di essere display: grid; e contiene diciotto elementi figlio. Abbiamo dichiarato che dovrebbe avere cinque colonne, ciascuna di uguale larghezza, almeno la stessa quantità di righe e una stretta grondaia di tutto 2px.

 grid-template-columns: repeat (5, 1fr); grid-template-rows: repeat (5, 1fr); intercapedine: 2px;

Fin qui tutto bene, e puoi vedere che Grid ha preso i nostri diciotto oggetti e li ha spinti dentro, lavorando dall'angolo in alto a sinistra, spostandosi verso destra, per poi scendere riga per riga. Questo comportamento è molto simile al modo in cui i float funzionano.

Nota: il comportamento da sinistra a destra sarebbe invertito se avessimo a che fare con un direzione: RTL; disposizione.

Lanciare una chiave nell'opera

È tutto bello e pulito, ma vediamo cosa succede quando i nostri articoli non si adattano perfettamente. A .item-7 aggiungeremo alcune regole per renderlo più grande estendendo due colonne e due righe:

.item-7 background: # e03f3f; grid-column: span 2; grid-row: span 2; 

Come sembra ora?

Non male! .item-7 riempie più spazio, quindi .item-8 e .item-9 sono posizionati oltre. .item-10 poi guarda se c'è uno spazio vuoto accanto a .item-9, e quando vede non c'è mossa giù una riga e ricomincia dall'estrema sinistra. Gli altri oggetti continuano ad essere inseriti nello stesso modo. 

Ma aspetta, e se lo facciamo anche noi .item-9 un po 'sovrappeso?

Ora diventa interessante; .item-9 non si inserisce più nella colonna alla fine, quindi viene spostato nella riga successiva. Come non può adattarsi a qualcosa di oltre .item-7 rimane messo. .item-10, potresti immaginare, si infilerebbe sotto .item-6 di nuovo, ma, se ricordi, cerca una colonna vuota, quindi non si muove giù di fila e shunts di nuovo a sinistra. Questo è un concetto importante da comprendere.

Dì "Ciao" al flusso automatico della griglia

Se guardi la demo precedente lo vedrai .item-18, non riuscendo a trovare spazio accanto a .item-17, è sceso di fila. Abbiamo solo definito cinque righe, ma Grid ha pensato che avremmo voluto aggiungere un'altra riga. Questo è dovuto a grid-auto-flow, che appartiene all'elemento grid e il cui valore predefinito è riga. Possiamo cambiare questo valore in colonna se vogliamo, che cambierebbe totalmente il modo in cui appare la nostra griglia:

Questo sembra una specie di simile, ma noterete che i nostri articoli sono stati inseriti in alto a sinistra, quindi spostati in basso per riempire ogni riga, quindi spostati nella seconda colonna e così via. Così ora, quando un oggetto è troppo grande per i suoi stivali, il seguente oggetto cerca il successivo spazio di riga libero, quindi non riesce a passare alla colonna successiva.

Dense fa il senso

Possiamo aggiungere un'altra parola chiave al nostro grid-auto-flow proprietà, ed è probabilmente la mia parola chiave CSS preferita fino ad oggi: denso. La sua controparte predefinita è scarso (il mio secondo preferito). Facciamo quanto segue:

grid-auto-flow: row denso;

Nota: non abbiamo bisogno di includere riga qui, è implicito, ma questo evidenzia come funziona la sintassi.

Ora il nostro amico .item-10, dopo aver scoperto che non c'è spazio accanto .item-9, prima controlla cosa c'è sopra prima di passare ad un'altra fila. 

Grazie a questo cambiamento nell'algoritmo di posizionamento, i nostri articoli sono ora densamente imballati, il che ci dà una griglia più efficiente. Ciò significa, tuttavia, che il layout visivo non riflette necessariamente l'ordine dell'origine del documento, che potrebbe non essere sempre utile per l'utente.

Conclusione

Ricapitoliamo:

  1. Se non abbiamo definito in modo specifico la posizione di un oggetto, l'algoritmo di posizionamento automatico di Grid lo posizionerà nel successivo spazio disponibile (e abbastanza grande).
  2. Dove non ci sono slot disponibili nella riga corrente, inizierà la ricerca nella seguente riga, anche se questo lascia degli spazi vuoti.
  3. Possiamo cambiare questo ordine di ricerca alterando grid-auto-flow a partire dal riga a colonna.
  4. grid-auto-flow accetta una parola chiave per descrivere l'approccio "imballaggio". Di default questo valore è scarso, ma possiamo modificarlo denso che tenta di colmare tutte le lacune disponibili.

Risorse utili

  • grid-auto-flow su MDN
  • La specifica della proprietà auto-flusso della griglia