⊗mkSpFxGr 86 of 128 menu

CSSにおけるフレックス要素の伸長

例えば、横に並んだ2つのフレックスブロックがあるとします。 これらのブロックの幅は 100px、親要素の幅は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; }

:

ご覧の通り、要素の合計幅は親要素の幅よりも小さいため、 右側に余白が残っています。

必要に応じて、この余白を要素間で比例的に分割することができます。 これは、フレックス要素に設定するプロパティflex-growで行います。 このプロパティの値は、単位のない数値です。

実際にこのプロパティがどのように機能するか見てみましょう。

現在、2つのフレックスブロックの幅は 100pxです。要素の合計幅は 200px、親要素の幅は300pxです。 つまり、100pxの余白が残っています。

要素にflex-growが設定されていない場合、 この余白はそのまま表示されます。 設定されている場合、要素の実際の幅は指定された幅よりも大きくなります。 要素は余白を互いに比例的に分割し、自分の幅に加えます。

例として、最初の要素のflex-grow1、2番目の要素を3とします。 それぞれの要素が余白のどの部分を得るかを計算してみましょう。

まず、すべての要素のflex-growの合計単位を求める必要があります。 最初の要素は1、2番目の要素は3です。 つまり、合計は4です。

次に、100pxの余白を4で割ると、 flex-grow1単位あたり25pxとなります。 結果として、最初の要素には1単位分、 つまり25pxが加わり、 2番目の要素には3単位分、 つまり75pxが加わります。

最初の要素の幅は125px、 2番目の要素の幅は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; }

:

次に、親要素の幅が400px、 最初の要素の幅が200px、 2番目の要素の幅が100pxだとします。 結果として、余白は再び100pxになります。

すべての要素のflex-grow1に設定してみましょう。 合計は2になります。 つまり、100pxの余白を2で割る必要があります。 すると、伸長率1単位あたり50pxとなります。

すべての要素のflex-growの値が同じなので、 すべての要素に同じ値50pxが加わります。 つまり、最初の要素は250pxに、 2番目の要素は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; }

:

再び、親要素の幅が400px、 最初の要素の幅が200px、 2番目の要素の幅が100pxだとします。

今度は、最初の要素のflex-grow3に、 2番目の要素を1に設定してみましょう。 伸長率の合計は4になります。 すると、伸長率1単位あたり100px / 4 = 25pxとなります。

最初の要素には75pxが加わり、 275pxになります。 2番目の要素には25pxが加わり、 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; }

:

実践問題

以下のすべての問題では、 幅とflex-growを持つフレックス要素を含むコードが示されます。 提示されたコードに基づいて、各要素が持つサイズを計算してください。 その後、コードを実行し、実際の要素の幅を測定して計算結果を確認してください。

<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; }
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否