Það kom snemma í ljós að noktun á visual formatting model með
position
og float
var ekki nóg til að gera
flókin útlit. Sérstaklega getur verið erfitt að nota það til að
útbúa útlit þar sem hlutir voru jafn háir eða eru miðjaðir lóðrétt
innan foreldris. Flexbox var búið til með það að leiðjarljósi að
einfalda gerð flókinna útlita og bjóða upp á
meiri sveigjanleika.
Í júli 2009 kom fyrsta útgáfa af staðlinum sem kynnti til leiks
display: box;
sem síðan í mars 2011 breyttist í
display: flexbox;
sem að lokum endaði í
display: flex;
árið 2012 þegar fyrsta candidate
recommendation kom út. Stuðningur við flexbox (með vafraforskeytum)
er í dag mjög mikill og er aðalleiðin til þess að útbúa útlit
í dag.
Flexbox er skilgreint með því að setja display
eigindið
display: flex;
en þá er element í eðlilegu flæði og
börnum þess er raðað með flexbox. Einnig er hægt að setja
display: inline-flex;
en þá er element túlkað
inline í eðlilegu flæði en börnum þess raðað með flexbox.
Þegar börnum elements er raðað með flexbox er margin
á
alla kanta gleypt með auto
, ekki bara lárétt.
Börn elements sem er raðað með flexbox eru kölluð
flex items. Þau raðast sjálfgefið í þeirri röð sem þau eru skilgreind í
HTML en við getum
breytt þeirri röðun með order
eigindinu. Hægt er að skilgreina
order
fyrir hvert flex item og er þeim síðan raðað þar
sem hærri tala raðar flex item seinna. Sjálfgefið gildi er
order: 0;
.
Þegar flexbox er notað til að skilgreina útlit er mikilvægt að gera
greinarmun á elementi sem hefur
display: flex;
(flexbox/flex container) og börnum þess
(flexbox/flex items). Það mun ekki virka að skilgreina flexbox
eigindi fyrir container á flex items en það er hinsvegar hægt að
láta flex items væra bæði flex item og flex container.
17.1 Ásar
Í flexbox eru skilgreindir tveir ásar, aðalás (e. main axis) og
krossás (e. cross axis) sem eru hornréttir hvorn annan. Með því að
nota flex-direction
getum við skilgreint aðalásin:
-
flex-direction: row;
, sjálfgefið gildi, aðalás frá vinstri til hægri (eða hægri til vinstri ef texti er lesinn þannig). -
flex-direction: row-reverse;
, aðalás frá hægri til vinstri. -
flex-direction: column;
, krossás (m.v.row
) verður skilgreindur sem aðalás og öfugt. Aðalás frá toppi til botns. -
flex-direction: column-reverse;
, eins ogcolumn
en aðalás frá botni til tops.
Athugið að ekki er skilgreint með heitum á áttum (t.d.
left
) þar sem flexbox á að virka óháð því hvort verið sé að teikna
útlit þar sem lesið er frá vinstri til hægri, hægri til vinstri
eða frá toppi niður. Þetta heldur áfram í
CSS staðli fyrir logical properties
þar sem búið er að bæta við lógískum heitum við hluti sem hafa beina
vísun í vídd eða átt. block
og inline
er
notað sem grunn hugtök um í hvaða átt texti flæðir ásamt
start
og end
, t.d.
margin-inline-start: 1px;
eða
border-block-start-width: 1px;
.
Sjálfgefið er öllum flex itemum troðið á aðalás og þau minnka í
samræmi til að fá pláss. Hægt er að nota flex-wrap
til
að láta flex item flæða í nýja flex-línu ef ekki er
nóg pláss:
-
flex-wrap: nowrap;
, sjálfgefið, ekki flæða í nýja línu. -
flex-wrap: wrap;
, ef það er ekki pláss, flæða í nýja línu (vinstri hægri eða hægri vinstri ef texti lesinn þannig). -
flex-wrap: wrap-reverse;
, eins og wrap en í öfugri röð.
17.2 Röðun á ás
Til að skilgreina hvernig flex item er raðað á aðalás notum við
justify-content
:
-
justify-content: flext-start;
, sjálfgefið, raðar við byrjun á ás. -
justify-content: flex-end;
, raðar við enda á ás. -
justify-content: center;
, raðar fyrir miðju áss. -
justify-content: space-between;
, dreifir plássi milli flex itema. -
justify-content: space-around;
, dreifir plássi milli og utanum flex item.
Staðsetningu innan línu á krossás er skilgreind með
align-items
:
-
align-items: stretch;
, sjálfgefið, jafnar við stærstu línu. align-items: flex-start;
, byrjun línu.align-items: flex-end;
, enda línu.align-items: center;
, miðju línu.-
align-items: baseline;
, jöfnuð við baseline.
Með align-self
getur hvert og eitt flex item skilgreint
hvernig það hagar sér m.t.t. align-items
.
Til að breyta staðsetningu lína á krossás notum við
align-content
, en það hefur því aðeins áhrif ef
flex-wrap
er ekki no-wrap
.
-
align-content: stretch;
, sjálfgefið, línur teygðar til að taka allt pláss. -
align-content: flext-start;
, raðar við byrjun á ás. -
align-content: flex-end;
, raðar við enda á ás. -
align-content: center;
, raðar fyrir miðju áss. -
align-content: space-between;
, dreifir plássi milli flex itema. -
align-content: space-around;
, dreifir plássi milli og utanum flex flex item.
17.3 Stærðir á flex item
Við getum stýrt því hvernig flex item taka pláss innan flexbox með
flex-grow
, flex-shrink
og
flex-basis
.
Við skilgreinum flex-grow
með rauntölu, stærri en
0
og skilgreinir hvernig flex item stækkar, sjálfgefið
er 0
.
-
Ef öll flex item hafa
flex-grow: 1;
taka þau öll jafnt pláss. -
Ef öll hafa
1
en eitt þeirra hefur2
mun það taka tvisvar sinnum meira pláss (eins og hægt er) en hin flex item fá jafn mikið af plássi sem eftir er. -
Ef aðeins eitt flex item hefur
flex-grow
skilgreint mun það taka allt pláss sem önnur flex item þurfa ekki.
Við skilgreinum flex-shrink
eins og
flex-grow
en það stýrir því hvern flex item minnkar,
sjálfgefið er 1
.
Upprunastærð á flex item er skilgreind með flex-basis
,
þá getum við skilgreint hversu mikið pláss flex item á að taka áður
en plássi er dreift til flex itema, sjálfgefið er auto
.
Þessi þrjú eigindi ætti alltaf að skilgreina með
flex
eigindi en það stillir óskilgreind gildi rétt m.v.
sett gildi. Í flestum tilfellum ætti að vera nóg að setja
gildið sem:
-
initial
, sjálfgefið, flex item minnka ef ekki er nóg pláss en stækka ekki umframwidth
ogheight
gildi sín. -
auto
, stærð skv.width
ogheight
en stækkar til að fá auka pláss í flexboxi. none
, flex item stækka hvorki né minnka.-
<tala>
, tilgreinir hlutfall sem flex item fær af plássi.