Flex-elementide aplusus CSS-is
Oletame, et meil on kaks flex-plokki,
mis on paigutatud ritta. Nende plokkide laius on
määratud kui 100px ja nende vanemale - 300px:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
</div>
.parent {
display: flex;
width: 300px;
height: 200px;
border: 1px solid red;
}
.child {
width: 100px;
height: 100px;
border: 1px solid green;
}
:
Nagu näete, on meie elementide kogulaius väiksem kui vanema laius, seetõttu jääb paremale tühja ruumi.
Soovi korral saab seda tühja ruumi
proportsionaalselt jagada meie elementide vahel.
See tehakse omaduse flex-grow abil,
mida määratakse flex-elementidele. Selle
omaduse väärtuseks on mõõtmeteta number.
Vaatame praktikas, kuidas see omadus töötab.
Näide
Praegu on meil kaks flex-plokki laiusega
100px. Nende elementide kogulaius on
200px ja vanema laius on 300px.
Selgub, et jääb vaba ruumi
100px.
Kui elementidele pole määratud flex-grow,
siis me lihtsalt näeme seda vaba ruumi.
Kui see on neile määratud, siis on elementide
tegelik laius suurem kui määratud - nad jagavad
vaba ruumi proportsionaalselt
enda vahel
ja lisavad selle oma laiusele.
Oletame näiteks, et esimesel elemendil on flex-grow
võrdne 1 ja teisel - 3. Arvutame,
missuguse osa vabast ruumist
saab iga element.
Kõigepealt tuleb saada koguarv
flex-grow ühikuid kõigist meie elementidest.
Esimesel elemendil on see võrdne 1 ja
teisel - 3. See tähendab, et kokku
on see võrdne 4.
Jagame nüüd 100px vaba ruumi
4-ga ja saame, et 25px langeb
ühele flex-grow ühikule. Selgub,
et esimesele elemendile lisandub üks ühik
flex-grow, see tähendab 25px, ja
teisele - kolm ühikut, see
tähendab 75px.
Esimese elemendi laius saab 125px,
ja teise - 175px:
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
</div>
.parent {
display: flex;
width: 300px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 100px;
flex-grow: 1;
}
.elem2 {
width: 100px;
flex-grow: 3;
}
:
Näide
Oletame nüüd, et vanema laius on 400px,
esimese elemendi laius 200px ja teise
elemendi laius - 100px. Selgub,
et vaba ruum on jälle
võrdne 100px.
Määrame igale elemendile flex-grow,
võrdse 1. Kokku saab 2,
see tähendab, et 100px vaba ruumi
tuleb jagada 2-ga. Selgub, et
50px langeb ühele
aplususe ühikule.
Kuna kõigil elementidel on sama väärtus
flex-grow, siis kõikidele elementidele lisandub
sama väärtus, 50px. See tähendab,
et esimene element muutub 250px ja
teine muutub 150px:
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
</div>
.parent {
display: flex;
width: 400px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 200px;
flex-grow: 1;
}
.elem2 {
width: 100px;
flex-grow: 1;
}
:
Näide
Oletame jälle, et vanema laius on 400px,
esimese elemendi laius 200px ja teise
elemendi laius - 100px.
Määrame nüüd esimesele elemendile
flex-grow väärtuseks 3 ja teisele
- väärtuseks 1. Selgub, et aplusus
kokku on 4. Siis on üks ühik
aplusust võrdne .
100px / 4 = 25px
Esimesele elemendile lisandub 75px,
ja see muutub 275px, ja teisele -
25px, see muutub 125px:
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
</div>
.parent {
display: flex;
width: 400px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 200px;
flex-grow: 3;
}
.elem2 {
width: 100px;
flex-grow: 1;
}
:
Praktilised ülesanded
Kõigis allpool olevates ülesannetes pakutakse teile
mõnda koodi flex-elementidega, millel on
laius ja flex-grow. Esitatud
koodi põhjal arvutage, millised mõõtmed on
igal elemendil. Seejärel käivitage kood
ja kontrollige oma arvutusi, mõõtes tegelikke
elementide laiusi.
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
</div>
.parent {
display: flex;
width: 500px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 200px;
flex-grow: 3;
}
.elem2 {
width: 100px;
flex-grow: 1;
}
.elem3 {
width: 100px;
flex-grow: 1;
}
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
</div>
.parent {
display: flex;
width: 700px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 100px;
flex-grow: 1;
}
.elem2 {
width: 100px;
flex-grow: 2;
}
.elem3 {
width: 200px;
flex-grow: 3;
}
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
</div>
.parent {
display: flex;
width: 500px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 100px;
flex-grow: 1;
}
.elem2 {
width: 100px;
flex-grow: 1;
}
.elem3 {
width: 100px;
flex-grow: 1;
}
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
<div class="child elem4">4</div>
</div>
.parent {
display: flex;
width: 1000px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 200px;
flex-grow: 1;
}
.elem2 {
width: 100px;
flex-grow: 2;
}
.elem3 {
width: 100px;
flex-grow: 4;
}
.elem4 {
width: 100px;
flex-grow: 3;
}