Hier een uitleg over de flexbox en flexbox gerelateerde properties.
Flexbox bestaat uit properties sommige bestemd voor de parent elementen (flex container) en andere voor child elementen (flex items). Sommige voorbeelden lijken niet te werken of zijn overbodig. Dit is puur om combinaties tussen keywords te laten zien.
Het belangrijkste property voor flex containers is display. Display bevat veel opties voor values zoals block, inline, table, grid ect. Maar de twee values die relevant zijn voor flexbox zijn flex en inline-flex.
<div class="con">
flex-container flex
</div>
.con {
display:flex;
background-color:red;
}
<div class="con">
flex-container inline-flex
</div>
<div class="con" width:400px; ">
flex-container inline-flex breedte 400px
</div>
.con {
display:flex;
background-color:red;
}
Met de flex-direction property stuurt flex-items in een bepaalde richting. Om woorden zoals main-axis en cross-axis te vermijden is het simpel om horizontaal en verticaal te gebruiken. Al is de gebruik van de termen niet hetzelfde.
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
</div>
.con {
display:flex;
flex-direction:row;
background-color:red;
}
.item {
background-color:yellow;
}
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
</div>
.con {
display:flex;
flex-direction:row-reverse;
background-color:red;
}
.item {
background-color:yellow;
}
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
</div>
.con {
display:flex;
flex-direction:column;
background-color:red;
}
.item {
background-color:yellow;
}
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
</div>
.con {
display:flex;
flex-direction:column-reverse;
background-color:red;
}
.item {
background-color:yellow;
}
Met de flex-wrap property kun je de flex-items op meerdere rijen hebben binnen een flex container. De flex-items moeten wel bij elkaar groter zijn dan de wijdte van de flex-container om effect te krijgen.
<div class="con">
<div class="item">child 1, 50% width</div>
<div class="item">child 2, 50% width</div>
<div class="item">child 3, 50% width</div>
</div>
.con {
display:flex;
flex-wrap:no-wrap;
background-color:red;
}
.item {
background-color:yellow;
width:50%;
}
<div class="con">
<div class="item">child 1, 50% width</div>
<div class="item">child 2, 50% width</div>
<div class="item">child 3, 50% width</div>
</div>
.con {
display:flex;
flex-wrap:wrap;
background-color:red;
}
.item {
background-color:yellow;
width:50%;
}
<div class="con">
<div class="item">child 1, 50% width</div>
<div class="item">child 2, 50% width</div>
<div class="item">child 3, 50% width</div>
</div>
.con {
display:flex;
flex-wrap:wrap-reverse;
background-color:red;
}
.item {
background-color:yellow;
width:50%;
}
Flex-flow is een shorthand (Een property waarbij er twee of meerdere properties bij elkaar gevoegd zijn) voor flex-direction en flex-wrap. Als standard staan de values op column en wrap.
.con {
flex-flow: column wrap;
}
De justify-content property zorgt ervoor hoe de flex-items horizontaal (main-axis) moeten staan als er nog ruimte is.
Tussen de onderstaande properties zit weinig verschil en is een beetje moeilijk uit te leggen, maar het verschil moet zitten in de flex-direction en de writing-mode properties.
<div class="con con-1">
<div class="item">child 1</div>
<div class="item">child 2</div>
<div class="item">child 3</div>
</div>
<div class="con con-1 reverse">
<div class="item">child 1</div>
<div class="item">child 2</div>
<div class="item">child 3</div>
</div>
<!--con-2, con-3 ect. hebben dezelfde structuur.-->
/*algemeen*/
.con {
display:flex;
background-color:red;
}
/*row-reverse*/
.reverse{
flex-direction:row-reverse;
}
/*flex-start*/
.con-1{justify-content:flex-start;}
/*flex-end*/
.con-2{justify-content:flex-end;}
/*start*/
.con-3{ justify-content:start;}
/*end*/
.con-4{ justify-content:end;}
/*left*/
.con-5{ justify-content:left;}
/*right*/
.con-6{ justify-content:right;}
.item {
width:25%;
background-color:yellow;
}
flex-start
flex-start + row-reverse
flex-end
flex-end + row-reverse
start
start + row-reverse
end
end + row-reverse
left
left + row-reverse
Right
Right + row-reverse
flex-start + column
flex-start + column-reverse
flex-end + column
flex-end + column-reverse
start + column
start + column-reverse
end + column
end + column-reverse
left + column
left + column-reverse
right + column
right + column-reverse
Er zijn ook 2 extra values die je voor de andere kunt plaatsen. Deze hebben te maken met de overflow property.
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
<div class="item">child 3</div>
</div>
.con {
display:flex;
justify-content: center / space-between / space-around / space-evenly;
background-color:red;
}
.con-safety {
display:flex;
justify-content:safe center;
background-color:red;
width:400;
}
.item {
width:25%;
background-color:yellow;
}
center
space-evenly
space-around
space-between
safe + center
unsafe + center
De align-items property zorgt ervoor hoe de flex-items verticaal (cross-axis) moeten staan.
Tussen de onderstaande properties zit weinig verschil en is een beetje moeilijk uit te leggen, maar het verschil moet zitten in de flex-direction en de writing-mode properties.
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
<div class="item">child 3</div>
</div>
.con {
display:flex;
align-items: flex-start / flex-end / start / end / self-start / self-end;
background-color:red;
}
.item {
width:25%;
background-color:yellow;
height:;//verschillend
}
flex-start
flex-start – column-reverse
flex-end
flex-end – row-reverse
self-end
self-end – row-reverse
start
start
end
end
self-start
self-start – row-reverse
flex-start
flex-start – column-reverse
flex-end
flex-end – column-reverse
self-start
self-start – column-reverse
start
start – column-reverse
end
end – column-reverse
self-end
self-end – column-reverse
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
<div class="item">child 3</div>
</div>
.con {
display:flex;
align-items: Stretch / center / baseline / first baseline / last baseline;
background-color:red;
}
.con-safety {
display:flex;
align-items:safe center;
background-color:red;
width:400;
}
.item {
width:25%;
background-color:yellow;
height:;//verschillend
}
flex-stretch
stretch – column-reverse
baseline
baseline – row-reverse
last baseline
last baseline / row-reverse
center
center / row-reverse
first baseline
first baseline / row-reverse
flex-stretch
stretch – column-reverse
baseline en first
baseline en first – column-reverse
center
center / column-reverse
last baseline
last baseline – column-reverse
Align-content werkt bijna zoals justify-content alleen is dit meer bedoelt voor meerdere rijen en werkt alleen met flex-wrap die de values wrap of wrap-reverse hebben.
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
<div class="item">child 3</div>
</div>
.con {
display:flex;
align-content: normal / flex-start / flex-end / start / end / Stretch / center / space-between / space-around / space-evenly;
flex-wrap:wrap;
background-color:red;
}
.con-safety {
display:flex;
align-content:safe center;
background-color:red;
width:400;
}
.item {
width://verschillend;
background-color:yellow;
}
normal
flex-start
space-between
space-evenly
center
flex-end
space-around
stretch
normal
flex-start
space-between
space-evenly
center
flex-end
space-around
stretch
Gap, row-gap en column gap zijn properties die alleen ruimte toevoegt tussen de items. Dus er komt geen ruimte tussen de container zijdes en items. Als justify-content midden gerelateerde values aan de pas komen en er blijft meer tussen ruimte achter, dan zie je heer geen direct effect van tenzij je de venster kleiner maakt. Gap wordt gezien als minimum voor tussen ruimte. Kijk ook uit dat er items eruit gepusht worden.
Alle vorige voorbeelden hadden ook een gap. Om ruimte om de zijdes van de container te maken is er padding gebruikt.
.con {
display:flex;
background-color:red;
}
.con-gap{
gap:25px 1%;
}
.con-row {
row-gap:25px;
}
.con-col{
column-gap:1%px;
}
.item {
background-color:yellow;
}
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
<div class="item">child 3</div>
</div>
gap
column-gap
row-gap
gap werkt op de juiste manier
Gap en te grote items met no-wrap
gap met te veel overgebleven ruimte en space-between
Flex-items kunnen al goed staan door de properties van de container waar ze in zitten, maar kunnen zelf ook properties hebben voor specifieke aanpassingen.
Standard is dit order van hoe het in de DOM staat, maar is aan te passen met een nummer. Dit is alleen visueel en veranderd niet hoe het in de DOM staat, dus screenreaders houden de DOM volgorde aan.
.con {
display:flex;
background-color:red;
}
.item {
order:verschillend;
background-color:yellow;
}
<div class="con">
<div class="item">child 1</div>
<div class="item">child 2</div>
<div class="item">child 3</div>
</div>
order
order
order + row-reverse
Met flex-grow kan een flex-item groeien als die dat tenminste kan. als alle items op 1 staan worden ze gelijk in grote. En als één van deze een 2 wordt, wordt deze 2 keer zo groot als de andere. Standard is de value van de property 0.
.con {
display:flex;
background-color:red;
}
.item {
flex-grow:vershillend;
background-color:yellow;
}
flex-grow 0
flex grow 1-2-1
flex grow 1-2-1 met te veel content zonder wrap
flex-grow 1
flex grow 1-2-1 met te veel content met wrap
verkleint de flex-item. Een item met een 2 is dan de helft van de andere als die dat kan. Standard heeft deze de value 1. Dit is beter uit te leggen bij de flex shorthand property.
Dit geeft de standard grote van een element aan voordat overgebleven ruimte is verdeelt. Flex-basis kan een lengte (bv. 200px, 50%) of keyword (auto, max-content, min-content, fit-content) bevatten. als flex-grow en flex-shrink op alle flex-items in een container de value 1 hebben groeit of krimpt deze mee.
.con {
display:flex;
background-color:red;
}
.item {
flex-basis:vershillend;
background-color:yellow;
}
flex-basis 200px
flex-basis auto
flex-basis 200px + alles grow en shrink 1
flex-basis 0
Flex is een shorthand voor flex-grow, flex-shrink en flex-basis. Het is beter om de shorthand te gebruiken dan de individuele properties zelf.
.con {
display:flex;
background-color:red;
}
.item {
flex:flex-grow flex-shrink flex-basis;
background-color:yellow;
}
flex 1 1 auto alles gelijk
flex 2 1 auto
flex 1 1 0, 1 1 0, 2 1 0
flex 1 1 60%, 1 1 40%
flex 1 2
flex 0 1 60px
flex 1 1 auto, 1 1 auto, 2 1 auto
Align-self overschrijft de align-items property van de container om een specifieke flex-item anders neer te zetten. De values van align-self zijn hetzelfde als die van align-items.
.con {
display:flex;
background-color:red;
}
.item {
align-self: auto / flex-start / flex-end / center / baseline / stretch / ect.;
background-color:yellow;
}
align-items: center align-self: flex-start
align-items: center align-self: center
align-items: center align-self: flex-end
align-items: center align-self: stretch