1. ホーム
  2. html

[解決済み] フレックスアイテムが行の幅いっぱいに広がるようにする

2022-10-17 17:15:17

質問

フレックスを使いながら、最初の2つの子要素を同じ行に保持し、3つ目の要素はそれ自身の下に全幅で配置しようと思っています。

私は特に flex-growflex-shrink プロパティを最初の 2 つの要素に追加しました (これがパーセンテージを使用しない理由の 1 つです) が、3 番目の要素は本当にフル幅で最初の 2 つの要素より下になければなりません。

その label 要素の後にプログラムによって追加されます。 text 要素の後にプログラム的に追加されるのですが、エラーが発生してコードを変更することができません。

label要素が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;
}

#range, #text {
  flex: 1;
}

.error {
  flex: 0 0 100%; /* flex-grow, flex-shrink, flex-basis */
  border: 1px dashed black;
}
<div class="parent">
  <input type="range" id="range">
  <input type="text" id="text">
  <label class="error">Error message (takes full width)</label>
</div>

詳細はこちら。 の初期値は flex-wrap プロパティは nowrap のように、すべての項目が一列に並ぶことを意味します。 MDN