Naast elkaar stap 7: layout met flexbox
(00:13:25)
Bij flexbox kun je prima layouten. Je moet je realiseren dat je iets niet direct over de items zegt maar eerst iets codeert voor de parent.
Je geeft de parent display: flex;
. Dan gaan de children sowieso naast elkaar staan.
Daarnaast zijn de hoogtes van de items gelijk gemaakt.
De verdeling blijkt in ons geval niet gewenst. Het eerste item dat brede paragrafen met lange regels had, krijgt het meest.
De children (in ons geval de sections) kunnen met flex: 1 0 20%;
gelijk gemaakt worden in breedte. De flex: 1 0 20%;
heeft dus 3 waarden. De eerste is de flex-grow
: de mate waarin de overblijvende breedte over de items wordt verdeeld.
De tweede waarde is geeft aan hoeveel het item mag krimpen bij een tekort aan ruimte. De derde waarde geeft de basiswaarde mee: de hoeveelheid ruimte waarbij er in de verdeling vanuit gegaan wordt. Dit is hier bewust te weinig gekozen, want dan zou alles te smal worden, maar ze mogen daarna toch van flexbox groeien. In ons geval gelijkmatig.
We kunnen zonder moeite nu ook padding en marge meegeven voor extra tussenruimtes.
Maar flexbox kan ook verticaal ingezet worden om elementen te verdelen.
In de body
zijn 4 children: nav
, h1
, main
en footer
. De parent is dus body
. Eerst geven we deze hoogte mee, want dat heeft de body gek genoeg niet van zichzelf. De hoogte wordt minimaal 100vh
: precies zo hoog als de viewport.
Met een display: flex;
voor de body worden de children in horizontale zin naast elkaar geperst. Dat komt omdat de richting default horizontaal is (flex-direction: row;
). We geven dus flex-direction: column;
. Er lijkt nu weer dat alles lijkt op de uitgangspositie, maar we kunnen de children nu in lengte laten 'groeien'. We geven de main
een flex: 1 0 auto;
Dan rekt deze zover op dat alles in de viewport staat. Dat kunnen we ook met footer
en h1
doen, en dan verdelen zij het overschot aan hoogte.
Als de main nu een flex: 3 0 auto;
krijgt zal deze 3 keer zo hard groeien als de h1
en footer
.
Centreren met flexbox
De inhoud van beide laatste kunnen we met flexbox ook heel mooi centreren. Recept begint vertrouwd: ze zijn voor hun inhoud een parent. Dus geef je deze elementen eerst display: flex;
Daarna geef je met justify-content: center;
een horizontale centrering en met align-items: center;
een verticale centrering van de inhoud.
De sections hoeven tenslotte geen achtergrondkleur meer om te laten zien wat er met ze gebeurd is in deze trainingen.