Det er ikke nødvendig å forstå hver aspekt av Flexbox før du kan hoppe inn og komme i gang. I denne opplæringen skal vi presentere noen få funksjoner i Flexbox mens du designer en "nyhetsoppsett" som den du finner på The Guardian.
Grunnen til at vi bruker Flexbox er at den gir svært kraftige funksjoner:
Så la oss komme i gang!
Å lage kolonner i CSS har alltid vært en utfordring. I lang tid var de eneste alternativene å bruke flyter eller tabeller, men de hadde begge sine egne problemer.
Flexbox gjør prosessen enklere, og gir oss:
skjerm: flex
La oss begynne med å lage to kolonner; en som er 2/3 av bredden på vår container, og en som er 1/3.
2/3 kolonne1/3 kolonne
Det er to elementer her:
kolonner
containerkolonne
barn, en med en ekstra klasse av hoved-kolonne
som vi skal bruke for å gjøre det bredere.kolonner display: flex; .column flex: 1; .main-kolonne flex: 2;
Som hovedkolonnen har en fleksibel verdi på 2
, det vil ta opp dobbelt så mye plass som den andre kolonnen.
Ved å legge til noen ekstra visuelle stiler, er det hva vi får:
Hver av disse to kolonnene vil inneholde flere artikler stablet vertikalt, så vi skal slå kolonne
elementer i Flexbox beholdere også. Vi vil:
.kolonne display: flex; flex-retning: kolonne; / * Gjør artiklene stablet vertikalt * / .artikkel flex: 1; / * Streker artiklene for å fylle opp gjenværende plass * /
De flex-retning: kolonne
regjere på container, kombinert med flex: 1
regjere på barn sikrer at artiklene fyller hele vertikalrommet, og holder de to første kolonnene i samme høyde.
Nå, for å gi oss ekstra kontroll, la oss omdanne hver artikkel til en Flexbox-beholder også. Hver av dem vil inneholde:
Vi bruker Flexbox her for å "skyve" informasjonslinjen til bunnen. Som en påminnelse er dette artikkellayouten vi sikter på:
Her er koden:
.artikkel display: flex; flex-retning: kolonne; flex-basis: auto; / * angir innledende elementstørrelse basert på innholdet sitt / / .artikkel-body display: flex; flex: 1; flex-retning: kolonne; .artikkelinnhold flex: 1; / * Dette vil gjøre innholdet fylle opp gjenværende plass, og dermed skyve informasjonsfeltet nederst * /
Artikkelens elementer er lagt ut vertikalt takket være flex-retning: kolonne;
regel.
Vi søker flex: 1
til artikkel-innhold
element slik at det fyller opp det tomme rommet, og "skyver" den artikkel info
til bunnen, uansett høyden på kolonnene.
I den venstre kolonnen er det vi egentlig vil ha et annet sett av kolonner. Så vi skal erstatte den andre artikkelen med det samme kolonner
container vi allerede har brukt.
Som vi vil at den første nestede kolonnen skal være bredere, legger vi til en nestede-kolonne
klasse med tilleggsstilen:
.nestet-kolonne flex: 2;
Dette vil gjøre vår nye kolonne dobbelt så bred som den andre.
Den første artikkelen er veldig stor. For å optimalisere bruken av plass, la oss bytte layoutet til å være horisontalt.
.første artikkel flex-retning: rad; . første artikkel .artikkel-kropp flex: 1; . første artikkel .artikkel-bilde høyde: 300px; rekkefølge: 2; polstring: 0; bredde: 400px;
De rekkefølge
Egenskapen er veldig nyttig her, da det tillater oss å endre rekkefølgen på HTML-elementer uten å påvirke HTML-oppslaget. De article-image
faktisk kommer før de Artikkelen-legeme
i oppslaget, men det vil oppføre seg som om det kommer etter.
Dette ser alt ut akkurat som vi vil, selv om det er litt klemt. La oss fikse det ved å gå responsivt.
En flott funksjon i Flexbox er at du bare trenger å fjerne skjerm: flex
Regel på beholderen for å deaktivere Flexbox helt, mens du holder alle de andre Flexbox-egenskapene (for eksempel justere elementer
eller flex
) gyldig.
Som et resultat kan du utløse en "responsiv" layout ved å bare aktivere Flexbox ovenfor et bestemt bruddpunkt.
Vi skal fjerne skjerm: flex
fra begge .kolonner
og .kolonne
selektorer, istedenfor å pakke dem inn i en medieforespørsel:
@media skjerm og (min bredde: 800px) .columns, .column display: flex;
Det er det! På mindre skjermer vil alle artiklene være oppå hverandre. Over 800 px blir de lagt ut i to kolonner.
For å gjøre layoutet mer attraktivt på større skjermer, la oss legge til noen CSS-tweaks:
@media skjerm og (min-bredde: 1000px) .first-artikkel flex-retning: rad; . første artikkel .artikkel-kropp flex: 1; . første artikkel .artikkel-bilde høyde: 300px; rekkefølge: 2; polstring: 0; bredde: 400px; .Main-kolonne flex: 3; .nested-column flex: 2;
Den første artikkelen har sitt innhold lagt ut horisontalt, med teksten til venstre og bildet til høyre. Også hovedkolonnen er nå bredere (75%) og den nestede kolonnen for (66%). Her er sluttresultatet!
Jeg håper jeg har vist deg at du ikke trenger å forstå alle aspekter av Flexbox for å hoppe inn og begynne å bruke det! Denne responsive nyhetsoppsettet er et veldig nyttig mønster; trekk den fra hverandre, lek med den, gi oss beskjed om hvordan du går videre!