Flex_d要素の子がheight
にパーセンテージで応答しないという点で、flexbox列に問題があります。これはChromeでしか確認していませんが、私が理解しているのはChromeのみの問題です。これが私の例です。
HTML
<div class='flexbox'>
<div class='flex'>
<div class='flex-child'></div>
</div>
<div class='static'></div>
</div>
CSS
.flexbox{
position:absolute;
background:black;
width:100%;
height:100%;
display: flex;
flex-direction:column;
}
.flex{
background:blue;
flex:1;
}
.flex-child{
background:red;
height:100%;
width:100%;
display:block;
}
.static{
background:green;
width:100%;
height:5rem;
}
赤い.flex-child
が青い.flex
を満たすようにしたいのです。 height:100%
が機能しないのはなぜですか?
TL; DR:.flex
をdisplay:flex
に設定し、height:100%
上の.flex-child
を削除します_。 変更されたCodePenはこちらで確認できます
それが機能する理由:
この同様の質問 から学んだのは、flexbox仕様に従って、align-self:stretch
値(flex'd要素のデフォルト)は要素のクロスサイズプロパティの使用値(この場合、height
)。ただし、パーセンテージは、使用された値ではなく、親のクロスサイズプロパティの指定値から計算されます。インスペクタをクラックして開き、「スタイル」の下にheight:100%
があり、「計算済み」の下にheight:1200px
が表示されている場合、specifiedおよびused値。
この点で、Chromeは仕様に従っているようです。つまり、height:100%
に.flex-child
を設定すると、.flex
の指定されたheight
の100%を意味します。 .flex
でheight
を指定していないため、デフォルトのheight
であるauto
の100%を取得しています。レイアウトエンジンが混乱している理由をご覧ください。
.flex
をdisplay:flex
に設定し、height:100%
を.flex-child
から削除すると(auto
の100%を設定しようとしないように).flex-child
.flex
をすべて埋める
これが機能しない場合:
.flex
の一部のみを入力しようとしている場合、これは機能しません。 .flex-child
をheight:90%
に設定しようとしています。子を曲げると、利用可能なすべてのスペースがいっぱいになるためです。私はあなたが絶対位置でそれをハッキングできるかもしれないと思ったが、それもうまくいかないようだ。 .flex
と呼ぶ.spacer
に2番目の子を追加し、.spacer
をflex:1
に、.flex-child
をflex:9
に設定することにより、ハッキングできます。 (必ずflex-direction:column
にも.flex
を設定してください)。ハックですが、修正できる唯一の方法です。 これがCodePenです。
願わくば、これに頼り続ける必要はなく、期待通りに機能するように仕様を変更するだけです。