Ieri abbiamo discusso del futuro del layout CSS e di alcuni dei nuovi moduli che CSS3 porta in tavola in questa arena. Uno di questi che abbiamo brevemente toccato era CSS3 Flexbox.
Oggi approfondiremo questo modello e costruiremo una pagina web completa. Non sarà affatto pronto per implementare i tuoi progetti, ma ti fornirà ulteriori informazioni su un possibile modo in cui codificheremo i siti web negli anni a venire. Inoltre, questa roba è semplicemente divertente da giocare!
Altamente sperimentale: solo Webkit
Il mio obiettivo per questo post era di avere una pagina funzionante attiva e funzionante su diversi browser, ma non è successo. A questo punto l'implementazione è buggata e incoerente tra i browser, anche dopo aver installato Flexie.js, stavo ancora ottenendo risultati molto diversi tra Firefox e Safari (penso che abbia a che fare con il mixaggio di contenitori tipici centrati sul margine e Flexbox).
Per questo motivo, il progetto di oggi sarà rivolto principalmente a Safari e Chrome perché francamente, è ancora un casino in altri browser! Sicuramente ti incoraggio a seguire e poi a giocare con il prodotto finito per vedere se riesci a farlo funzionare in un'implementazione cross-browser. Se hai suggerimenti, mi piacerebbe sentirli nei commenti!
Passaggio 1: Classi riutilizzabili
Da quando ho brevemente spiegato il concetto base di Flexbox nel post di ieri, mi concentrerò sull'implementazione qui. Ma non preoccuparti, dovresti ottenere il succo mentre procediamo.
La prima cosa che vogliamo fare è creare alcune classi base che aiuteranno a definire il nostro layout. Questi attributi possono essere applicati a un ID in base alle necessità, ma trovo utile e ordinato farlo in questo modo.
Parliamo di come funzionano queste classi. La prima classe, hasflex, verrà applicato a un contenitore padre di cui vogliamo creare i figli utilizzando questo nuovo sistema Flexbox. Una cosa che noterete è che questo intero design sarà completamente privo di fluttuazioni, così da darvi alcune indicazioni su dove implementeremo Flexbox nel nostro codice.
Successivamente, impostiamo alcune altre classi per applicarle varie box-flex valori. Flexbox distribuirà comodamente i nostri elementi figlio attraverso il contenitore e questi definiranno le proporzioni. io credere che il valore predefinito è? 0? ma i risultati sono sembrati un po 'buggy con questa ipotesi, quindi ho trovato utile applicare sempre un valore manualmente.
Passaggio 2: HTML iniziale e CSS
Per iniziare il tuo documento HTML, crea un contenitore e un'intestazione. A questo punto, questi sono elementi base che costruiremo come sempre senza l'aiuto di Flexbox.
Una volta che hai ottenuto questo, inserisci gli stili di base qui sotto. Fondamentalmente ho creato un corpo scuro con un contenitore leggero da 1.000 px che conserverà tutto il nostro contenuto. Toss in alcuni margini al centro e alcuni stili di testo di base e siamo pronti per passare alle cose divertenti.
Nota: Il carattere principale che userò è Oswald, di Google Fonts.
Passaggio 3: navigazione
Ora, per l'area di navigazione, si crea in genere un elenco di collegamenti e quindi li si sposta a sinistra. Con Flexbox, il processo è leggermente diverso. Qui applichiamo semplicemente il hasflex classe che abbiamo creato in precedenza e quindi utilizzare box0 per ciascuna delle voci dell'elenco. applicando box0 a tutti e tre ha l'effetto di far fluttuare i collegamenti a sinistra ma non li distribuirà lungo tutta la larghezza del contenitore.
Dopo questo, applichiamo semplicemente gli stessi tipi di stili che utilizzeremmo su qualsiasi altra pagina web. L'obiettivo principale qui è quello di distanziare leggermente i collegamenti con alcuni margini e assicurarsi che i nostri collegamenti siano disegnati correttamente.
Passaggio 4: l'immagine
Ogni buona pagina web ha bisogno di un'immagine. Per illustrare ulteriormente come applicare Flexbox in modo selettivo solo a quegli elementi che ne hanno bisogno, inseriremo un'immagine di intestazione di grandi dimensioni usando lo stesso codice esatto che fareste normalmente.