Hvordan bygge en nyhetsnettstedlayout med Flexbox

Hva du skal skape

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:

  • Vi kan enkelt lage lydhørste kolonner
  • vi kan lage kolonner av samme høyde
  • Vi kan skyve innhold til bunn av en beholder

Så la oss komme i gang!

1. Start med to kolonner

Å 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:

  • renere kode: Vi trenger bare en container med skjerm: flex
  • ikke nødvendig klar flyter, og forhindrer uventet layoutadferd
  • semantisk markering
  • fleksibilitet: Vi kan endre størrelse, strekke, justere kolonnene i noen få linjer med CSS

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 kolonne
1/3 kolonne

Det er to elementer her:

  1. de kolonner container
  2. to kolonne 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:

2. Gjør hver kolonne en Flexbox Container

Hver av disse to kolonnene vil inneholde flere artikler stablet vertikalt, så vi skal slå kolonne elementer i Flexbox beholdere også. Vi vil:

  • artiklene skal stables vertikalt
  • artiklene til tøye ut og fyll ut ledig plass
.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.

3. Gjør hver artikkel en Flexbox Container

Nå, for å gi oss ekstra kontroll, la oss omdanne hver artikkel til en Flexbox-beholder også. Hver av dem vil inneholde:

  • en tittel
  • en paragraf
  • en informasjonslinje med forfatteren og antall kommentarer
  • et valgfritt responsivt bilde

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.

4. Legg til noen nestede kolonner

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.

5. Gi første artikkel a Horisontal layout

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.

6. Gjør Layout Responsive

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.

7. Legg til etterbehandling

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!

Konklusjon

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!