フレックスアイテムの高さが他のフレックスアイテムと一致するように拡大するのを防ぎます


85

コンテナ内に2つの要素があり、フレックスボックスを使用して並べています。2番目の要素(.flexbox-2)では、CSSで高さを設定しています。ただし、最初の要素(.flexbox-1)はの高さに一致し.flexbox-2ます。.flexbox-1の高さの一致を停止し.flexbox-2、代わりにその自然な高さを保持するにはどうすればよいですか?

これが私がこれまでに持っているものです(jsFiddleとしても利用可能です)

.container {
  display: -webkit-flex;
  -webkit-flex-direction: row;
}
.flexbox-1 {
  -webkit-flex: 1;
  border: solid 3px red;
}
.flexbox-2 {
  -webkit-flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
<div class="container">
  <div class="flexbox-1">.flexbox-1</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>


回答:


56

これは古い解決策です。 私の答えは、アーロンが使用align-selfするこの新しい答えに取って代わられます。これは、CSSの癖に依存しない優れたソリューションです。

フレックスコンテナ自体高さがない限りheight: 0%、最初のフレックスアイテムに設定できます。親から継承する高さがないため、高さのパーセンテージを指定すると折りたたまれます。その後、その内容とともに成長します。

この例では、-webkitプレフィックスを削除しました。これはSafariにのみ本当に必要であり、プレフィックスはプレフィックスなしのバージョンのに追加できます。flex-direction: rowデフォルト値なので削除しました。


148

これは古い質問ですが、より良い解決策は、を使用してフレックスアイテムを上部に揃えるように設定することflex-startです。

/* Default Styles */
.container {
  display: flex;
}
.flexbox-2 {
  flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
 .flexbox-1 {
  flex: 1;  
  align-self: flex-start;  
  border: solid 3px red;
}
<div class="container">
  <div class="flexbox-1">"align-self: flex-start;"</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>


1
ありがとう@MrGood受け入れられた答えは3年以上前のものであり、当時は望ましい結果を達成するための良い方法でした。
アーロン

1
素晴らしい答え!
アレクサンダーウィグモア2017年

5
親要素に対して「align-items:flex-start」を実行して、すべての子が成長するのを防ぐこともできます。私の場合は必要です。
ダニエルソコロフスキー2018

5
align-items: center, baseline, flex-start, flex-end同様に機能しています
ViES 2018年

2
のデフォルト値はであるため、これが必要align-itemsですstretch
DylanReile

2

親にalign-itemsを追加することで、これを簡単に修正できます。flex-start;

それで全部です


1
StackOverflowへようこそ。5年前の質問に既存の回答を使用して回答を追加するときは、対処している質問の新しい側面、回答の仕組み、およびその回答を使用する理由を説明することが重要です。正しいコードフォーマットは、今のところ、どのcssルールに追加するかについてのコンテキストを提供しない太字のテキストが文に含まれているため、非常に役立ちます。
JasonAller20年

1

height子のをに設定すると、子max-contentが縮小するのを防ぐことができます。

.container {
  display: -webkit-flex;
  -webkit-flex-direction: row;
}
.flexbox-1 {
  -webkit-flex: 1;
  border: solid 3px red;
  height: max-content;
}
.flexbox-2 {
  -webkit-flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
<div class="container">
  <div class="flexbox-1">.flexbox-1</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.