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:

html<div class="parent">
  <div class="child">1</div>
  <div class="child">2</div>
</div>
css.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:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
</div>
css.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:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
</div>
css.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:

html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
</div>
css.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.

Задание 1
html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
  <div class="child elem3">3</div>
</div>
css.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;
}
Задание 2
html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
  <div class="child elem3">3</div>
</div>
css.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;
}
Задание 3
html<div class="parent">
  <div class="child elem1">1</div>
  <div class="child elem2">2</div>
  <div class="child elem3">3</div>
</div>
css.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;
}
Задание 4
html<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>
css.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;
}