Non è necessario capire ogni aspetto di Flexbox prima di poter entrare e iniziare. In questo tutorial, introdurremo alcune funzionalità di Flexbox mentre progettiamo un "layout di notizie" come quello che puoi trovare su The Guardian.
Il motivo per cui utilizziamo Flexbox è che fornisce funzionalità molto potenti:
Quindi iniziamo!
Creare colonne in CSS è sempre stata una sfida. Per molto tempo, le uniche opzioni erano usare i float o le tabelle, ma entrambi avevano i loro problemi.
Flexbox semplifica il processo, dandoci:
display: flex
Iniziamo facendo due colonne; uno che è 2/3 della larghezza del nostro contenitore, e uno che è 1/3.
2/3 colonna1/3 colonna
Ci sono due elementi qui:
colonne
contenitorecolonna
bambini, uno con una classe aggiuntiva di main-column
che useremo per renderlo più ampio.columns display: flex; .column flex: 1; .main-column flex: 2;
Come la colonna principale ha un valore di flex di 2
, occuperà il doppio dello spazio rispetto all'altra colonna.
Aggiungendo alcuni stili visivi aggiuntivi, ecco cosa otteniamo:
Ciascuna di queste due colonne conterrà diversi articoli impilati verticalmente, quindi andremo a girare il colonna
elementi anche nei contenitori Flexbox. Vogliamo:
.column display: flex; direzione della flessione: colonna; / * Rende gli articoli impilati verticalmente * / .article flex: 1; / * Allunga gli articoli per riempire lo spazio rimanente * /
Il direzione della flessione: colonna
regola sul contenitore, combinato con il flex: 1
regola sul bambini assicura che gli articoli riempiano tutto lo spazio verticale, mantenendo le nostre prime due colonne alla stessa altezza.
Ora, per darci un controllo extra, trasformiamo anche ciascun articolo in un contenitore Flexbox. Ciascuno di essi conterrà:
Stiamo usando Flexbox qui per "spingere" la barra delle informazioni verso il basso. Come promemoria, questo è il layout dell'articolo a cui miriamo:
Ecco il codice:
.articolo display: flex; direzione della flessione: colonna; flex-base: auto; / * imposta la dimensione dell'elemento iniziale in base al suo contenuto * / .article-body display: flex; flex: 1; direzione della flessione: colonna; .article-content flex: 1; / * Questo farà riempire il contenuto dello spazio rimanente e quindi spingerà la barra delle informazioni in basso * /
Gli elementi dell'articolo sono disposti verticalmente grazie a direzione della flessione: colonna;
regola.
Applichiamo flex: 1
al articolo-content
elemento in modo che riempia lo spazio vuoto e "spinga" il informazioni sull'articolo
verso il basso, indipendentemente dall'altezza delle colonne.
Nella colonna di sinistra, ciò che realmente vogliamo è un altro set di colonne. Quindi sostituiremo il secondo articolo con lo stesso colonne
contenitore che abbiamo già utilizzato.
Dato che vogliamo che la prima colonna nidificata sia più ampia, stiamo aggiungendo a nested-colonna
classe con lo stile aggiuntivo:
.nested-column flex: 2;
Questo renderà la nostra nuova colonna due volte più ampia dell'altra.
Il primo articolo è davvero grande. Per ottimizzare l'uso dello spazio, cambiamo il layout in orizzontale.
.primo articolo flex-direction: row; .primo articolo .article-body flex: 1; .primo articolo .article-image height: 300px; ordine: 2; padding-top: 0; larghezza: 400 px;
Il ordine
la proprietà è molto utile qui, in quanto ci consente di modificare l'ordine degli elementi HTML senza influire sul markup HTML. Il articolo-image
in realtà viene prima il articolo-body
nel markup, ma si comporterà come se arrivasse dopo.
Tutto ciò sembra proprio come vogliamo, anche se è un po 'schiacciato. Risolviamo ciò andando responsivi.
Una grande caratteristica di Flexbox è che devi solo rimuovere il display: flex
regola sul contenitore per disabilitare completamente Flexbox, mantenendo tutte le altre proprietà di Flexbox (come ad esempio allineare-articoli
o flettere
) valido.
Di conseguenza, puoi attivare un layout "reattivo" abilitando solo Flexbox sopra un certo punto di rottura.
Stiamo per rimuovere display: flex
da entrambi .colonne
e .colonna
selettori, invece li avvolge in una query multimediale:
@media screen e (min-width: 800px) .columns, .column display: flex;
Questo è tutto! Sugli schermi più piccoli, tutti gli articoli saranno uno sopra l'altro. Sopra 800 px, saranno disposti in due colonne.
Per rendere il layout più accattivante su schermi più grandi, aggiungiamo alcune modifiche ai CSS:
@media screen e (min-width: 1000px) .primo articolo flex-direction: row; .primo articolo .article-body flex: 1; .primo articolo .article-image height: 300px; ordine: 2; padding-top: 0; larghezza: 400 px; .main-column flex: 3; .nested-column flex: 2;
Il primo articolo ha il suo contenuto disposto orizzontalmente, con il testo a sinistra e l'immagine a destra. Inoltre, la colonna principale è ora più ampia (75%) e anche la colonna nidificata (66%). Ecco il risultato finale!
Spero di averti dimostrato che non è necessario comprendere ogni aspetto di Flexbox per entrare e iniziare a usarlo! Questo layout di notizie reattivo è un modello davvero utile; separalo, giocaci, facci sapere come vai avanti!