Flexbox

Flexbox er en måte vise elementer i rader eller kolonner med CSS.

Du lager en flexbox ved å skrive display: flex; i CSS-koden til HTML elementet. Alle elementer inni flexboxen blir automatisk flex items.

Flexbox vs grid

Flexbox er svært god egnet for mindre layouter. Hvis du skal lage en layout for en hel nettside kan Grid være bedre egnet.

Flexbox er også mye bedre egnet hvis du bare skal justere layout langs én akse.

Eksempler

Eksempelet under er bygget opp av en hoveddiv (flexboxen) med blå farge. Inne i flexboxen ligger det 4 nye diver, som blir flex items til flexboxen. Se CSS-koden lenger nede.

Item 1
Item 2
Item 3
Item 4
div.container {
	display: flex;
	background-color: blue;
	height: 5rem; /* for å gi boksen en høyde */
	gap: 1rem; /* mellomrom mellom items */
	padding: 1rem; /* for å vise boksen bedre */
	font-size: 30px;
}
div.item {
	background-color: darkgreen;
}

Hvis man ønsker at flex items skal bruke opp plassen i flexboxen så kan kan man legge til flex: 1; til hver av flex itemene.

Item 1
Item 2
Item 3
Item 4
div.item {
	background-color: darkgreen;
	flex: 1;
}

Ulike typer flexboxer

See the Pen Demo av Flexbox by stalegjelsten (@stalegjelsten) on CodePen.

Akser

Flexbox vil som standard velge den horisontale aksen som hovedakse (main axis) og legge flex items bortover langs denne. Den vertikale aksen vil dermed gå på tverrs og kalles på engelsk for cross axis.

Vi kan bytte akse ved å bruke flex-direction: column;. Dersom vi ønsker å ha motsatt rekkefølge på elementene i flexboxen bruker vi flex-direction: row-reverse; eller flex-direction: column-reverse;.

Huskeliste flexbox

CSS Forklaring
display: flex Gjør elementet til en flexbox
justify-content Justerer flex items langs hovedaksen til flexboxen
gap Mellomrom mellom flex items
align-items Justerer flex items på tvers av hovedaksen
flex-direction Velger hovedakse og retning for hovedaksen
flex-wrap Angir om items skal legge seg på en ny linje dersom det ikke er plass til dem
flex Settes på flex items. Et tall som forteller hvor stort dette elementet skal være
order Settes på flex items. Et tall som påvirker rekkefølgen til itemet. Standard er order: 0;

Midtstille innhold

Å midtstille en div eller annet innhold i både vertikal og horisontal retning gjøres på følgende måte: 1. Bruk display:flex; på forelderen til elementet du ønsker å midtstille
2. Bruk deretter justify-content: center; og align-items: center; for å midtstille innholdet langs begge akser.

This text is centered
.container {height:4rem; background-color: purple; display:flex; justify-content: center; align-items:center;}
.centered {background-color: hotpink}

Historikk

Å midtstille en div ble lenge (spøkefullt) betegnet som noe av det vanskeligste man kunne gjøre i CSS.

Meme som viser Boromir fra Ringenes Herre som sier "One does not simply center a div"

Ressurser