Flexを使用している間、最初の2つの子要素を同じ行に保持し、3番目の要素はそれ自体の下に全幅で配置しようとしています。
最初の2つの要素でflex-grow
プロパティとflex-shrink
プロパティを使用することに特に興味があります(これは、パーセンテージを使用しない理由の1つです)。二。
エラーが発生してコードを変更できない場合、label
要素はプログラムでtext
要素の後に追加されます。
Flexを使用して配置された他の2つの要素の下に、ラベル要素を100%の幅で強制的に配置するにはどうすればよいですか?
.parent {
display: flex;
align-items: center;
width: 100%;
background-color: #ececec;
}
.parent * {
width: 100%;
}
.parent #text {
min-width: 75px;
flex-shrink: 2.25;
}
<div class="parent">
<input type="range" id="range">
<input type="text" id="text">
<label class="error">Error message</label>
</div>
フレックスアイテムが行全体を占めるようにするには、width: 100%
/flex-basis: 100%
に設定し、コンテナでwrap
を有効にします。
これで、アイテムは使用可能なすべてのスペースを消費します。兄弟は他の行に強制されます。
.parent {
display: flex;
flex-wrap: wrap;
align-items: center;
background-color: #ececec;
}
.error {
flex: 0 0 100%; /* fg: 0, fs: 0, fb: 100% */
border: 1px dashed red;
}
#range, #text {
flex: 1;
}
<div class="parent">
<input type="range" id="range">
<input type="text" id="text">
<label class="error">Error message</label>
</div>
子ではmin-width
を、親ではflex-wrap:wrap
を探しているようです:
.parent {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.parent > * {
flex-grow: 1;
}
.parent > .error {
min-width: 100%;
background-color: rgba(255,0,0,.3);
}
<div class="parent">
<input type="range" id="range">
<input type="text" id="text">
<label class="error">Error message</label>
</div>