Come configurare smartphone e PC. Portale informativo
  • casa
  • Ferro
  • Esempi di Flexbox. Cos'è Flexbox? Descrizione di tutte le proprietà CSS, principi di base, vantaggi e svantaggi

Esempi di Flexbox. Cos'è Flexbox? Descrizione di tutte le proprietà CSS, principi di base, vantaggi e svantaggi

La proprietà align-content imposta il tipo di allineamento delle linee all'interno di un contenitore flessibile lungo l'asse trasversale quando c'è spazio libero.

Si applica a: contenitore flessibile.

Valore di default: stirata.

Le linee Flex-start sono posizionate all'inizio dell'asse trasversale. Ogni riga successiva è a filo con quella precedente. flex-end Le righe vengono posizionate a partire dalla fine dell'asse trasversale. Ogni riga precedente è a filo con la successiva. centro Le linee sono centrate sul contenitore. space-between Le linee sono spaziate uniformemente nel contenitore e la distanza tra loro è la stessa. space-around Le linee sono spaziate uniformemente in modo che lo spazio tra due linee adiacenti sia uguale. Lo spazio bianco prima della prima riga e dopo l'ultima riga è uguale alla metà dello spazio tra due righe adiacenti. space-evenly Le righe sono spaziate in modo uniforme. Lo spazio bianco prima della prima riga e dopo l'ultima riga ha la stessa larghezza delle altre righe. stretch Le linee si allungano uniformemente per riempire lo spazio libero.

La proprietà align-content allinea le linee di un contenitore flessibile all'interno del contenitore flessibile quando c'è spazio extra nell'asse trasversale, in modo simile a come require-content allinea i singoli elementi all'interno dell'asse principale. Nota, questa proprietà non ha effetto su un contenitore flessibile a riga singola. I valori hanno i seguenti significati:

Nota: solo i contenitori flessibili a più righe hanno sempre spazio libero nell'asse trasversale per l'allineamento delle linee, perché in un contenitore flessibile a riga singola la sola linea si allunga automaticamente per riempire lo spazio.

Si applica a: contenitori flessibili.

Iniziale: stirata.

Le linee Flex-start sono imballate verso l'inizio del contenitore flessibile. Il bordo di inizio incrociato della prima linea nel contenitore flessibile è posizionato a filo con il bordo di inizio incrociato del contenitore flessibile e ogni riga successiva è posizionata a filo con la linea precedente. flex-end Le linee sono imballate verso la fine del contenitore flessibile. Il bordo trasversale dell'ultima riga viene posizionato a filo con il bordo terminale del contenitore flessibile e ogni riga precedente viene posizionata a filo con la riga successiva. centro Le linee sono impacchettate verso il centro del contenitore flessibile. Le linee nel contenitore flessibile sono posizionate a filo l'una con l'altra e allineate al centro del contenitore flessibile, con uguali quantità di spazio tra il bordo del contenuto iniziale incrociato del contenitore flessibile e la prima linea nel contenitore flessibile e tra il bordo del contenuto cross-end del contenitore flessibile e l'ultima riga nel contenitore flessibile. (Se lo spazio libero rimanente è negativo, le linee traboccheranno ugualmente in entrambe le direzioni.) Lo spazio tra le linee è distribuito uniformemente nel contenitore flessibile. Se lo spazio libero rimanente è negativo, questo valore è identico a flex-start. In caso contrario, il bordo di inizio incrociato della prima riga nel contenitore flessibile è posizionato a filo con il bordo del contenuto di inizio incrociato del contenitore flessibile, il bordo di estremità incrociata dell'ultima riga nel contenitore flessibile è posizionato a filo con il bordo del contenuto finale del contenitore flessibile e le linee rimanenti nel contenitore flessibile sono distribuite in modo che la spaziatura tra due linee adiacenti qualsiasi sia la stessa. space-around Le linee sono distribuite uniformemente nel contenitore flessibile, con spazi dimezzati su entrambe le estremità. Se lo spazio libero rimanente è negativo, questo valore è identico al centro. Altrimenti, le linee nel contenitore flessibile sono distribuite in modo tale che la spaziatura tra due linee adiacenti qualsiasi sia la stessa e la spaziatura tra le prime/ultime linee e i bordi del contenitore flessibile sia la metà della spaziatura tra le linee flessibili. space-evenly Le linee sono distribuite uniformemente nel contenitore flessibile. Se lo spazio libero rimanente è negativo, questo valore è identico al centro. Altrimenti, le linee nel contenitore flessibile sono distribuite in modo tale che la spaziatura tra ogni linea flessibile sia la stessa. stretch Le linee si allungano per occupare lo spazio rimanente. Se lo spazio libero rimanente è negativo, questo valore è identico a flex-start. Altrimenti, lo spazio libero viene diviso equamente tra tutte le linee, aumentando la loro dimensione trasversale.

Flexbox CSS (Modulo layout scatola flessibile)- il modulo di layout di un contenitore flessibile - è un modo di organizzare gli elementi, basato sull'idea di un asse.

Flexbox è composto da contenitore flessibile e articoli flessibili... Gli elementi Flex possono essere disposti in una riga o in una colonna e lo spazio libero rimanente è distribuito tra di loro in vari modi.

Il modulo flexbox consente di svolgere le seguenti attività:

  • Disponi gli elementi in una delle quattro direzioni: da sinistra a destra, da destra a sinistra, dall'alto verso il basso o dal basso verso l'alto.
  • Sostituisci l'ordine di visualizzazione degli elementi.
  • Ridimensiona automaticamente gli elementi per adattarli allo spazio disponibile.
  • Risolvi il problema con il centraggio orizzontale e verticale.
  • Avvolgere gli oggetti all'interno del contenitore senza traboccare.
  • Crea colonne di uguale altezza.
  • Crea appuntato in fondo alla pagina.

Flexbox soddisfa le esigenze specifiche della creazione di layout unidimensionali, come una barra di navigazione, poiché gli elementi flessibili possono essere disposti solo lungo un asse.

Per un elenco degli attuali problemi del modulo e delle soluzioni cross-browser, vedere l'articolo di Philip Walton.

Cos'è flexbox?

Supporto browser

CIOÈ: 11,0, 10,0 -ms-
Firefox: 28.0, 18.0 -moz-
Cromo: 29.0, 21.0 -webkit-
Safari: 6.1 -webkit-
Musica lirica: 12.1 -webkit-
Safari iOS: 7.0 -webkit-
Opera Mini: 8
Navigatore Android: 4.4, 4.1 -webkit-
Chrome per Android: 44

1. Concetti di base

Riso. 1. Il modello flexbox

Un insieme specifico di termini viene utilizzato per descrivere un modulo Flexbox. Il valore flex-flow e la modalità di scrittura definiscono come questi termini corrispondono alle direzioni fisiche: alto/destra/basso/sinistra, assi: verticale/orizzontale e dimensioni: larghezza/altezza.

Asse principale- l'asse lungo il quale sono disposti gli articoli flessibili. Si estende nella dimensione principale.

Inizio principale e fine principale- linee che definiscono i lati iniziale e finale del contenitore flessibile, rispetto al quale sono disposti gli elementi flessibili (a partire dall'inizio principale verso l'estremità principale).

Dimensione principale) - La larghezza o l'altezza del contenitore flessibile o degli elementi flessibili, qualunque sia la dimensione di base, determina la dimensione di base del contenitore flessibile o dell'elemento flessibile.

Asse trasversale- un asse perpendicolare all'asse principale. Si estende lateralmente.

Inizio incrociato e fine incrociato- Linee che definiscono i lati iniziale e finale dell'asse trasversale attorno al quale sono disposti gli elementi flessibili.

Dimensione della croce- la larghezza o l'altezza di un contenitore flessibile o di oggetti flessibili, qualunque sia la dimensione trasversale, è la loro dimensione trasversale.


Riso. 2. Modalità riga e colonna

2. Contenitore flessibile

Un contenitore flessibile crea un nuovo contesto di formattazione flessibile per il suo contenuto. Un contenitore flessibile non è un contenitore a blocchi, quindi le proprietà CSS come float, clear, vertical-align non funzionano per gli elementi figlio. Inoltre, il contenitore flex non è influenzato dalle proprietà column-*, che creano colonne nel testo e gli pseudo-elementi :: first-line e :: first-letter.

Il modello di layout flexbox è associato a un valore specifico nella proprietà CSS di visualizzazione dell'elemento html padre che contiene le caselle figlio. Per controllare gli elementi utilizzando questo modello, è necessario impostare la proprietà di visualizzazione come segue:

Flex-container (/ * genera un contenitore flessibile a livello di blocco * / display: -webkit-flex; display: flex;). Flex-container (/ * genera un contenitore flessibile a livello di riga * / display: -webkit-inline- flex; display: inline-flex;)

Dopo aver impostato questi valori di proprietà, ogni figlio diventa automaticamente un elemento flessibile, allineandosi in una riga (lungo l'asse principale). Tuttavia, i bambini bloccati e in linea si comportano allo stesso modo, ad es. la larghezza dei blocchi è uguale alla larghezza del loro contenuto, tenendo conto del riempimento e dei bordi dell'elemento.


Riso. 3. Allineamento degli elementi nel modello flexbox

Se il blocco padre contiene testo o immagini senza wrapper, diventano elementi flessibili anonimi. Il testo è allineato al bordo superiore del blocco contenitore e l'altezza dell'immagine diventa uguale all'altezza del blocco, ad es. si deforma.

3. Articoli flessibili

Gli elementi flessibili sono blocchi che rappresentano il contenuto di un contenitore flessibile nel flusso. Un contenitore flessibile imposta un nuovo contesto di formattazione per il suo contenuto che fornisce le seguenti funzionalità:

  • Per gli elementi flessibili, il valore della proprietà di visualizzazione è bloccato. Valore visualizzato: blocco in linea; e display: cella-tabella; valutato a display: blocco; ...
  • Lo spazio bianco tra gli elementi scompare: non diventa il proprio elemento flessibile, anche se il testo tra elementi è avvolto in un elemento flessibile anonimo. Il contenuto di un elemento flessibile anonimo non può essere definito da solo, ma lo erediterà (come le impostazioni dei caratteri) dal contenitore flessibile.
  • Un elemento flessibile posizionato in modo assoluto non partecipa al layout di un layout flessibile.
  • I campi dei margini degli elementi flessibili adiacenti non vengono compressi.
  • Le percentuali di margine e riempimento vengono calcolate dalla dimensione interna del blocco contenitore.
  • margine: automatico; espandersi, assorbendo ulteriore spazio nella dimensione corrispondente. Possono essere utilizzati per allineare o espandere elementi flessibili adiacenti.
  • La dimensione minima automatica predefinita per gli elementi flessibili è la dimensione minima del suo contenuto, ovvero min-width: auto; ... Per i contenitori a scorrimento, la dimensione minima automatica è solitamente zero.

4. Visualizza l'ordine degli elementi flessibili e l'orientamento

Il contenuto di un contenitore flessibile può essere disposto in qualsiasi direzione e in qualsiasi ordine (riordinare gli elementi flessibili all'interno del contenitore influisce solo sul rendering visivo).

4.1. Direzione dell'asse principale: direzione di flessione

La proprietà è specifica del contenitore flessibile. Controlla la direzione dell'asse principale lungo il quale gli elementi flessibili sono impilati in base alla modalità di scrittura corrente. Non ereditato.

direzione di flessione
I valori:
riga L'impostazione predefinita è da sinistra a destra (in rtl, da destra a sinistra). Gli articoli flessibili sono disposti su una linea. Le direzioni di inizio principale e fine principale dell'asse principale corrispondono all'inizio in linea e alla fine in linea dell'asse in linea.
riga inversa Direzione da destra a sinistra (in rtl da sinistra a destra). Gli elementi flessibili sono disposti in linea rispetto al bordo destro del contenitore (in rtl - sinistro).
colonna Direzione dall'alto verso il basso. Gli elementi flessibili sono disposti in una colonna.
colonna inversa Colonna con elementi in ordine inverso, dal basso verso l'alto.
iniziale
ereditare

Riso. 4. La proprietà flex-direction per le lingue da sinistra a destra

Sintassi

Contenitore flessibile (display: -webkit-flex; -webkit-flex-direction: row-reverse; display: flex; flex-direction: row-reverse;)

4.2. Controllo della multilinea di un contenitore flessibile: flex-wrap

La proprietà determina se il contenitore flessibile sarà a riga singola o multiriga e imposta anche la direzione dell'asse trasversale, che determina la direzione in cui vengono impilate le nuove righe del contenitore flessibile.

Per impostazione predefinita, gli elementi flessibili sono impilati su una riga, lungo l'asse principale. Se traboccano, escono dal riquadro di delimitazione del contenitore flessibile. La proprietà non è ereditata.


Riso. 5. Controllo di più righe con la proprietà Flex-Wrap per i linguaggi LTR

Sintassi

Contenitore flessibile (display: -webkit-flex; -webkit-flex-wrap: avvolgere; display: flex; flex-wrap: avvolgere;)

4.3. Una scorciatoia per direzione e multilinea: flex-flow

La proprietà consente di definire le direzioni dell'asse principale e trasversale, nonché la possibilità di avvolgere elementi flessibili su più righe, se necessario. È una scorciatoia per le proprietà flex-direction e flex-wrap. Flusso flessibile predefinito: riga nowrap; ... la proprietà non è ereditata.

Sintassi

Contenitore flessibile (display: -webkit-flex; -webkit-flex-flow: a capo riga; display: flex; flex-flow: a capo riga;)

4.4. Visualizza l'ordine degli articoli flessibili: ordine

La proprietà determina l'ordine in cui gli elementi flessibili vengono visualizzati e posizionati all'interno del contenitore flessibile. Si applica agli articoli flessibili. La proprietà non è ereditata.

Inizialmente, tutti gli elementi flessibili hanno un ordine: 0; ... Se specifichi un valore compreso tra -1 per un elemento, questo si sposta all'inizio della sequenza temporale e un valore di 1 fino alla fine. Se più articoli flessibili hanno lo stesso valore dell'ordine, verranno visualizzati in base al loro ordine originale.

Sintassi

Contenitore flessibile (display: -webkit-flex; display: flex;) .flex-item (-webkit-order: 1; order: 1;)
Riso. 6. Visualizza l'ordine degli articoli flessibili

5. Flessibilità degli articoli flessibili

Un aspetto che definisce il layout flessibile è la capacità di "piegare" gli elementi flessibili modificando la loro larghezza/altezza (a seconda di quale dimensione si trova sull'asse principale) per riempire lo spazio disponibile nella dimensione di base. Questo viene fatto usando la proprietà flex. Un contenitore flessibile alloca lo spazio libero tra i suoi figli (in proporzione al loro rapporto di flessibilità-crescita) per riempire il contenitore, o li restringe (in proporzione al loro rapporto di flessibilità-restringimento) per evitare il trabocco.

Un elemento flessibile sarà completamente inflessibile se i suoi valori di flex-grow e flex-shrink sono zero, altrimenti si fletterà.

5.1. Dimensionamento flessibile con una proprietà: flex

La proprietà è una scorciatoia per le proprietà flex-grow, flex-shrink e flex-base. Valore predefinito: flex: 0 1 auto; ... È possibile specificare uno o tutti e tre i valori delle proprietà. La proprietà non è ereditata.

Sintassi

Contenitore flessibile (display: -webkit-flex; display: flex;) .flex-item (-webkit-flex: 3 1 100 px; -ms-flex: 3 1 100 px; flex: 3 1 100 px;)

5.2. Tasso di crescita: flex-grow

La proprietà controlla quanto crescerà un elemento flessibile rispetto ad altri elementi flessibili in un contenitore flessibile durante l'allocazione di uno spazio bianco positivo. Se la somma dei valori flex-grow degli elementi flex su una riga è inferiore a 1, occupano meno del 100% dello spazio libero. La proprietà non è ereditata.


Riso. 7. Gestire lo spazio libero nella barra di navigazione con flex-grow

Sintassi

Contenitore Flex (display: -webkit-flex; display: flex;) Flex-item (-webkit-flex-grow: 3; flex-grow: 3;)

5.3. Rapporto di restringimento: flex-shrink

La proprietà specifica di quanto un elemento flessibile si ridurrà rispetto ad altri elementi flessibili durante l'allocazione di spazi vuoti negativi. Moltiplicato per la dimensione della base della base flessibile. Lo spazio negativo viene allocato in proporzione a quanto l'elemento può ridursi, quindi, ad esempio, un elemento flessibile piccolo non si ridurrà a zero finché un elemento flessibile più grande non sarà visibilmente ridotto. La proprietà non è ereditata.


Riso. 8. Restringere gli elementi flessibili di fila

Sintassi

Contenitore flessibile (display: -webkit-flex; display: flex;). Flex-item (-webkit-flex-shrink: 3; flex-shrink: 3;)

5.4. Dimensioni della base: base flessibile

La proprietà imposta la dimensione di base iniziale dell'elemento flessibile prima che lo spazio libero venga allocato in base ai rapporti flessibili. Per tutti i valori eccetto auto e content, la dimensione flessibile di base è definita allo stesso modo della larghezza nelle modalità di scrittura orizzontale. Le percentuali sono relative alla dimensione del contenitore flessibile e, se non viene specificata alcuna dimensione, il valore utilizzato per base flessibile è la dimensione del suo contenuto. Non ereditato.

Sintassi

Contenitore flessibile (display: -webkit-flex; display: flex;) Elemento flessibile (-webkit-flex-basis: 100px; flex-basis: 100px;)

6. Allineamento

6.1. Allineamento dell'asse principale: giustifica-contenuto

La proprietà allinea gli elementi flessibili all'asse principale del contenitore flessibile distribuendo lo spazio libero non occupato dagli elementi flessibili. Quando un articolo viene convertito in un contenitore flessibile, gli articoli flessibili vengono raggruppati insieme per impostazione predefinita (a meno che non abbiano un margine impostato per loro). La spaziatura viene aggiunta dopo aver calcolato i valori di margine e flessione-crescita. Se alcuni elementi hanno flex-grow o margine diverso da zero: auto; , la proprietà non avrà alcun effetto. La proprietà non è ereditata.

I valori:
flex-start Valore di default. Gli elementi flessibili sono disposti in una direzione lontana dalla linea di partenza del contenitore flessibile.
flex-end Gli elementi flessibili sono disposti in una direzione lontana dalla linea finale del contenitore flessibile.
centro Gli elementi flessibili sono allineati al centro del contenitore flessibile.
spazio-tra Gli articoli Flex sono distribuiti uniformemente lungo la linea. Il primo elemento flessibile è posizionato a filo con il bordo della linea iniziale, l'ultimo elemento flessibile è a filo con il bordo della linea finale e il resto degli elementi flessibili sulla linea sono distanziati in modo che lo spazio tra due elementi adiacenti è la stessa. Se lo spazio vuoto rimanente è negativo o se è presente un solo elemento flessibile per riga, questo valore è identico al parametro flex-start.
spazio-intorno Gli elementi flessibili su una linea sono distanziati in modo che la distanza tra due elementi flessibili adiacenti sia la stessa e la distanza tra il primo/ultimo elemento flessibile e i bordi del contenitore flessibile sia metà della distanza tra gli elementi flessibili.
iniziale Imposta il valore della proprietà sul valore predefinito.
ereditare Eredita il valore della proprietà dall'elemento padre.

Riso. 9. Allineamento degli elementi e assegnazione dello spazio libero utilizzando la proprietà Justify-Content

Sintassi

Contenitore flessibile (display: -webkit-flex; -webkit-justify-content: flex-start; display: flex; require-content: flex-start;)

6.2. Allineamento degli assi incrociati: allinea-oggetti e allinea-auto

Gli elementi flessibili possono essere allineati all'asse trasversale della riga corrente del contenitore flessibile. align-items imposta l'allineamento per tutti gli elementi del contenitore flessibile, inclusi gli elementi flessibili anonimi. align-self ti consente di sovrascrivere questo allineamento per i singoli elementi flessibili. Se uno dei margini trasversali dell'elemento flessibile è automatico, align-self non ha effetto.

6.2.1. Allinea-oggetti

Allinea gli elementi flessibili, inclusi gli elementi flessibili anonimi, lungo l'asse trasversale. Non ereditato.

I valori:
flex-start
flex-end
centro
linea di base Le linee di base di tutti gli elementi flessibili coinvolti nell'allineamento sono le stesse.
stirata
iniziale Imposta il valore della proprietà sul valore predefinito.
ereditare Eredita il valore della proprietà dall'elemento padre.
Riso. 10. Allineamento verticale degli oggetti nel contenitore

Sintassi

Contenitore flessibile (display: -webkit-flex; -webkit-align-items: flex-start; display: flex; align-items: flex-start;)

6.2.2. Allinea-sé

La proprietà è responsabile dell'allineamento di un singolo elemento flessibile all'altezza del contenitore flessibile. Sostituisce l'allineamento specificato da align-items. Non ereditato.

I valori:
auto Valore di default. L'elemento flex utilizza l'allineamento specificato nella proprietà align-items del contenitore flex.
flex-start Il bordo superiore dell'elemento flessibile è posizionato a filo con la linea flessibile (o la spaziatura, dati il ​​margine e il bordo specificati dell'elemento) che attraversa l'origine dell'asse trasversale.
flex-end Il bordo inferiore dell'elemento flessibile è posizionato a filo con la linea flessibile (o la spaziatura, dati il ​​margine e il bordo specificati dell'elemento) che attraversa l'estremità dell'asse trasversale.
centro I margini dell'elemento flessibile sono centrati sull'asse trasversale all'interno della linea flessibile.
linea di base L'elemento flessibile è allineato alla linea di base.
stirata Se il ridimensionamento incrociato dell'elemento flessibile è automatico e nessuno dei margini incrociati è automatico, l'elemento viene allungato. Valore di default.
iniziale Imposta il valore della proprietà sul valore predefinito.
ereditare Eredita il valore della proprietà dall'elemento padre.

Riso. 11. Allinea i singoli elementi flessibili

Sintassi

Contenitore flessibile (display: -webkit-flex; display: flex;). Flex-item (-webkit-align-self: center; align-self: center;)

6.3. Allineare le righe di un contenitore flessibile: align-content

La proprietà allinea le righe in un contenitore flessibile quando è presente spazio aggiuntivo sull'asse trasversale, in modo simile all'allineamento di singoli elementi sull'asse principale utilizzando la proprietà giustifica-contenuto. La proprietà non ha effetto sul contenitore flessibile a una riga. Non ereditato.

I valori:
flex-start Le linee vengono impilate verso l'inizio del contenitore flessibile. Il bordo della prima linea è posizionato vicino al bordo del contenitore flessibile, ogni linea successiva è posizionata vicino alla linea precedente.
flex-end Le linee sono impilate verso la fine del contenitore flessibile. Il bordo dell'ultima riga viene posizionato vicino al bordo del contenitore flessibile, ogni riga precedente viene posizionata vicino alla riga successiva.
centro Le linee sono impilate verso il centro del contenitore flessibile. Le righe sono vicine l'una all'altra e allineate al centro del contenitore flessibile con spaziatura uguale tra il bordo iniziale del contenuto del contenitore flessibile e la prima riga e tra il bordo finale del contenuto del contenitore flessibile e l'ultima riga.
spazio-tra Le linee sono distanziate uniformemente nel contenitore flessibile. Se lo spazio libero rimanente è negativo o c'è solo una linea flessibile nel contenitore flessibile, questo valore è identico a flex-start. In caso contrario, il bordo della prima riga viene posizionato vicino al bordo iniziale del contenuto del contenitore flessibile e il bordo dell'ultima riga viene posizionato vicino al bordo finale del contenuto del contenitore flessibile. Il resto delle linee è distribuito in modo che la distanza tra due linee adiacenti sia la stessa.
spazio-intorno Le linee sono distanziate uniformemente in un contenitore flessibile con metà spazio ad entrambe le estremità. Se lo spazio libero rimanente è negativo, questo valore è identico al centro cent. In caso contrario, le linee sono distanziate in modo tale che la spaziatura tra due linee adiacenti qualsiasi sia la stessa e la spaziatura tra la prima/l'ultima riga e i bordi del contenuto del contenitore flessibile sia metà della spaziatura tra le righe.
stirata Valore di default. Le righe di elementi flessibili si estendono uniformemente per riempire tutto lo spazio disponibile. Se lo spazio libero rimanente è negativo, questo valore è identico a flex-start. In caso contrario, lo spazio libero verrà diviso equamente tra tutte le linee, aumentando la loro dimensione laterale.
iniziale Imposta il valore della proprietà sul valore predefinito.
ereditare Eredita il valore della proprietà dall'elemento padre.
Riso. 12. Allineamento multilinea di elementi flessibili

Sintassi

Contenitore flessibile (display: -webkit-flex; -webkit-flex-flow: avvolgimento riga; -webkit-align-content: flex-end; display: flex; flex-flow: avvolgimento riga; align-content: flex-end ; altezza: 100px;)

Nulla si ferma, tecnologie e standard si stanno sviluppando, compaiono nuove tecniche e metodi di layout del sito, ad esempio il layout con elementi tabulari, che non abbiamo considerato per ragioni oggettive, è stato sostituito da layout con elementi flottanti.

Molti editor di codice hanno un comodo plug-in per il markup rapido Emmet integrato per impostazione predefinita o disponibile per il download, ti consente di creare il markup principale di questo esempio come segue: sezione> div * 3> lorem+ Tab (valore lorema genera il testo mostrato nell'immagine sottostante).

Tieni presente che con poco sforzo abbiamo ottenuto che le colonne del nostro layout abbiano la stessa altezza indipendentemente dal loro contenuto, il che è fantastico. Gli elementi

non sono elementi flessibili per impostazione predefinita e si trovano nello stream Terzo elemento

come normali elementi di blocco. Se ciò è necessario, per rendere gli elementi flessibili, come puoi immaginare, è necessario che il genitore imposti che si tratta di un contenitore a blocchi (flex) o inline-flex, ma ne parleremo nel prossimo esempio.

Il risultato del nostro esempio:

Contenitore flessibile in linea

Per analogia con gli elementi a blocchi, i contenitori flessibili possono essere in linea. Diamo un'occhiata a qual è la differenza tra i contenitori flessibili in linea e quelli a blocchi. Nell'esempio precedente, abbiamo esaminato l'utilizzo di un contenitore di blocchi, proprio come un normale elemento di blocco, si estende per l'intera larghezza dello schermo e si comporta come un normale elemento a livello di blocco. Per quanto riguarda i contenitori flessibili in linea, diventano elementi in linea regolari pur mantenendo gli elementi flessibili.

Nel prossimo esempio considereremo questa differenza, poiché l'esempio precedente non sarebbe indicativo, per il motivo che la dimensione degli elementi flex figlio non è stata impostata in modo esplicito e, di conseguenza, il nostro contenitore, sia esso in linea o blocco, si comporterebbe allo stesso modo e occuperebbe l'intera larghezza dello schermo.

La differenza tra contenitori inline-flex e contenitori flex.

In questo esempio, abbiamo posto Due minuscolo e Due block flex container, al loro interno abbiamo posizionato cinque elementi

che diventano automaticamente elementi flessibili. Inoltre, per loro, abbiamo specificato la larghezza e l'altezza pari a 50 ppi.

Per generare rapidamente un layout simile utilizzando Emmet digita quanto segue nell'editor: div.inline-flex * 2> div * 5 + Tab, e la stessa cosa con una classe diversa div.flex * 2> div * 5 + Tab.

Dai un'occhiata al risultato del nostro esempio, la differenza tra i contenitori inline e block flex ora dovrebbe essere ovvia per te. Un contenitore in linea si comporta come un elemento in linea e occupa la larghezza richiesta solo dai suoi elementi flex figlio e un contenitore block flex, indipendentemente dalle dimensioni dei suoi figli flex, occupa l'intera larghezza dello schermo.

Il risultato del nostro esempio:

Riso. 205 Un esempio della differenza tra contenitori inline-flex e contenitori flex.

Direzione? Quale direzione?

La direzione degli elementi flessibili è formata in base alla posizione di due assi: asse principale contenitore flessibile e il suo asse trasversale che si trova sempre perpendicolare alla principale... L'asse principale nella direzione ltr (l'attributo HTML globale dir, o la proprietà CSS direction con il valore ltr) è posizionato da sinistra a destra e l'asse trasversale è dall'alto verso il basso (questo è l'impostazione predefinita), per rtl valore è rispecchiato di conseguenza.

In questo articolo, ti guideremo attraverso 5 tecniche per risolvere i problemi di layout CSS di base. Abbiamo anche aggiunto alcuni casi di studio reali per illustrare come possono essere utilizzate queste tecniche.

Rendere le colonne uguali in altezza

All'inizio può sembrare piuttosto semplice, ma a volte questo compito può essere fastidioso. L'uso dell'altezza minima non funzionerà, perché una volta visualizzato del contenuto, le colonne inizieranno immediatamente a ridimensionarsi.

Anche la risoluzione di questo problema con flexbox non è una soluzione, poiché le colonne create con flexbox CSS inizialmente avranno la stessa lunghezza. Abbiamo solo bisogno di introdurre un modello "fluido" e quindi assicurarci che le proprietà flex-direction e align-item siano impostate correttamente.

...
...
...
.container (display: flex; / * Inizializza il modello flex * / / * Questi sono valori predefiniti, ma puoi comunque cambiarli * / flex-direction: row; / * Gli elementi all'interno del contenitore verranno posizionati orizzontalmente * / align- items : stretch; / * Gli oggetti all'interno del contenitore verranno allungati alla loro altezza completa * /)

Riorganizzare gli elementi

Una volta, cambiare dinamicamente l'ordine di alcuni elementi era un'attività che solo JavaScript poteva svolgere. Ma con l'avvento di flexbox, questa difficoltà non si pone più, poiché la soluzione risiede in una sola proprietà CSS.

La proprietà order, che ci consente di utilizzare il layout flexbox, parla da sola. Ci consente di modificare un numero qualsiasi di elementi "flessibili" e la loro sequenza. L'unico parametro di questa proprietà è un numero intero, che determina la posizione di questo elemento, maggiore è il numero, maggiore è la priorità di questo elemento.

...
...
...
.container (display: flex;) / * Priorità dei numeri decrescenti * / .blue (ordine: 3;) .red (ordine: 2;) .green (ordine: 1;)

La proprietà order ha molti usi. Se vuoi vederne alcuni, puoi dare un'occhiata a questo, in cui utilizziamo questa tecnica per creare una sezione di commenti reattiva.


Centratura orizzontale e verticale

L'allineamento in CSS è ancora un problema piuttosto serio. Anche se ti rivolgi a un motore di ricerca, ti darà un sacco di soluzioni, la maggior parte delle quali offrirà l'uso di tabelle e trasformazioni, il che non è del tutto adatto se parliamo di layout responsive.

Una soluzione semplice sarebbe un layout flexbox, con il quale gli elementi possono essere banalmente spostati lungo il piano delle coordinate, allineandolo a piacimento.

...
.container (display: flex; / * Centrato sull'asse principale * / require-content: center; / * Centrato sull'asse minore * / align-items: center;)

Per vedere questa soluzione in azione e saperne di più, puoi andare a quella nello stesso thread.


Crea griglie completamente reattive

Molti webmaster si affidano a varie librerie e framework CSS per creare griglie reattive. Lo strumento più utilizzato in questo settore è Bootstrap. Tuttavia, non è l'unico nel suo genere. Centinaia di tali assistenti sono già stati sviluppati. Tutti funzionano relativamente bene e vantano una serie impressionante di opzioni, ma non risolveranno mai un problema: è ingombrante. Pertanto, se sei una persona a cui piace fare tutto da solo, o semplicemente non vuoi mettere un intero framework per il bene di una griglia, allora il layout flexbox ti aiuterà!

Una riga in una griglia flexbox è solo un contenitore. Le colonne orizzontali al suo interno possono essere un numero qualsiasi di elementi, la cui dimensione è impostata utilizzando flex. Questo modello si adatterà alle dimensioni di qualsiasi schermo, quindi il risultato finale dovrebbe avere un bell'aspetto sulla maggior parte dei dispositivi. Tuttavia, se decidiamo che non c'è abbastanza spazio sul piano orizzontale, il layout può essere semplicemente trasformato in verticale con una media query.

...
...
...
.container (display: flex;) / * Classi per ogni colonna con dimensione. * / .col-1 (flex: 1;) .col-2 (flex: 2;) @media (max-width: 800px) (.container (/ * Rende verticale un oggetto orizzontale. * / flex-direction: column ;))

Puoi vedere la variabilità di questa tecnica nelle istruzioni: Il modo più semplice per creare.


Creare un piè di pagina fisso

Flexbox CSS ha anche una semplice soluzione a questo problema. Creando una pagina che contiene un piè di pagina ancorato scritto tramite elementi flessibili, non devi più preoccuparti che si sposti.

L'applicazione di display: flex al tag body ci consentirà di utilizzare la "modalità flex" durante la creazione dell'intero layout. Quando tutto è pronto, la parte principale della pagina sarà un elemento "flessibile" e il piè di pagina con un altro, questo semplificherà la manipolazione delle loro posizioni.

...
...
html (altezza: 100%;) body (display: flex; direzione-flessione: colonna; altezza: 100%;) .main (/ * La sezione principale riempirà tutto lo spazio libero disponibile sulla pagina che non è occupato dal piè di pagina * / flex: 1 0 auto;) footer (/ * Il footer allocherà esattamente lo spazio necessario e non un pixel in più * / flex: 0 0 auto;)

Troverai maggiori informazioni su questa tecnica nell'articolo "".


Conclusione

La maggior parte dei browser oggi supporta il layout flessibile, il che significa che è sicuro dire che flexbox è pronto per aiutare molti sviluppatori.

Spero che questo articolo ti sia stato utile e che tu abbia migliorato le tue abilità CSS. Buona fortuna!

Le Flexbox sono ideali per creare layout di siti Web ampiamente utilizzati, come il layout a tre colonne, il cosiddetto layout "Santo Graal", in cui tutte le colonne devono essere a tutta altezza, indipendentemente dal loro contenuto. In questo caso, nel codice sorgente, il contenuto principale va prima della navigazione e nella pagina stessa il contenuto principale va dopo la navigazione.

Come questo.

Esempio

Cap
Articolo
Seminterrato

Prima dell'avvento di flexbox, un layout del genere era abbastanza difficile da ottenere senza utilizzare hack. Gli sviluppatori spesso dovevano fare cose come aggiungere markup extra, applicare margini negativi e altri trucchi per allineare correttamente le cose, indipendentemente dal volume del contenuto o dalle dimensioni dello schermo. Ma, come mostra l'esempio sopra, flexbox è molto più semplice.

Ecco una sintesi del codice. In questo esempio, rendiamo l'elemento #main un contenitore flessibile e lasciamo l'intestazione e il piè di pagina come elementi di blocco. In altre parole, solo la parte centrale diventa un flexbox. Ecco uno snippet che lo rende un contenitore flessibile.

#main (display: flex; altezza minima: calc (100vh - 40vh);)

Basta usare display: flex per creare un contenitore flex. Nota che impostiamo anche l'altezza minima utilizzando la funzione calc() e impostiamo #main al 100% dell'altezza della finestra. meno altezza del cappello e del basamento (20vh ciascuno). Ciò garantisce che il layout occupi l'intera altezza dello schermo, anche se il contenuto è scarso. Di conseguenza, il piè di pagina non si alzerà mai e non lascerà spazio vuoto sotto se il contenuto è inferiore all'altezza dello schermo.

Calcolare l'altezza minima è stato abbastanza facile considerando che abbiamo applicato box-sizing: border-box a tutti gli elementi. In caso contrario, dovremmo aggiungere il valore di riempimento alla somma da sottrarre.

Dopo aver installato il contenitore flessibile, ci occupiamo di elementi flessibili.

#main> articolo (flex: 1;) #main> nav, #main> a parte (flex: 0 0 20vw; background: beige;) #main> nav (order: -1;)

La proprietà flex è una scorciatoia per le proprietà flex-grow, flex-shrink e flex-basis. Nel primo caso, abbiamo scritto un solo valore, quindi flex imposta la proprietà flex-grow. Nel secondo caso, abbiamo scritto tutti e tre i valori per

Principali articoli correlati