flex:1の意味?


128

我々はすべて知っているように、flexプロパティがの省略形ですflex-growflex-shrink、およびflex-basisプロパティが。デフォルト値はです0 1 auto。これは、

flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

しかし、私は気づいた、多くの場所flex: 1で使用されています。それがために簡略化したものです1 1 auto1 0 auto?それが何を意味するのか理解できず、ググっても何も得られません


1
w3schools.comを引用して「フレックスプロパティは、フレックスグロー、フレックスシュリンク、およびフレックスベースのプロパティの省略形です」
Imran Ali

回答:


84

ここに説明があります:

https://www.w3.org/TR/css-flexbox-1/#flex-common

flex:<positive-number>
flexと同等:<positive-number> 10。フレックスアイテムをフレキシブルにし、フレックスベーシスをゼロに設定して、フレックスコンテナー内の指定された割合の空き領域を受け取るアイテムになります。フレックスコンテナー内のすべてのアイテムがこのパターンを使用する場合、それらのサイズは指定されたフレックスファクターに比例します。

したがってflex:1flex: 1 1 0


10
flex:1; flex = 1 1 0に等しくありません。以下の私の答えを参照してくださいro理由を参照してください。
DreamTeK 2017年

余談ですが、flexすべての子供に同じことを適用する場合、実際flex: 1 ? 0;に重要なのは「?」何でも
かまい

@DreamTeK Chromeなどの非標準に準拠したブラウザでのみ。
TylerH 2018

1
@TylerH正解で私の回答に記載されていますがwhat does flex:1 mean?、解釈は自由です。opは仕様を要求せず、何が起こっているのかだけを要求します。残念ながら現在Chromeは最も人気のあるブラウザーであり、サポートが必要です。私はChromeのファンでもユーザーでもありません。
DreamTeK 2018

1
@TylerHこれが私の答えでは、「これらのブラウザが仕様に準拠していないために失敗することに注意してください」と述べられている理由です。スペックへのリンクとともに!
DreamTeK 2018

98

flex: 1 以下を意味します:

flex-grow : 1;    ➜ The div will grow in same proportion as the window-size       
flex-shrink : 1;  ➜ The div will shrink in same proportion as the window-size 
flex-basis : 0;   ➜ The div does not have a starting value as such and will 
                     take up screen as per the screen size available for
                     e.g:- if 3 divs are in the wrapper then each div will take 33%.

1
@CookieMonsterいや、flex: 1手段1 1 0...しかし、IEでそれがある1 1 0px
朝臣

@LGSon、基本値から単位を省略できるので1 1 01 1 0px同等です。IEはたまたまユニットのあるものしかサポートしていません。
CookieMonster 2017年

@CookieMonster Flexboxがどのように機能するか知っています。最初のコメントを訂正しただけですが、これは誤りです。
Ason、

@LGSon、フレックスはどうですか:1は1 1 0pxが間違って1 1 0pxおり1 1 0、同等である場合を意味しますか?
CookieMonster

2
@CookieMonsterそれらは同じように表示される可能性がありますが、同等ではありません。単位のない値をに使用するflex-basisと、コンテンツは無視され、要素のサイズはflex-grow/に基づいているためflex-shrinkです。
Ason、2017年

78

注意してください

一部のブラウザでは:

flex:1; 等しくないflex:1 1 0;

flex:1;= flex:1 1 0n;nは長さの単位です)。

  • flex-grow: アイテムが他のフレキシブルアイテムと比較してどれだけ大きくなるかを指定する数値。
  • flex-shrink アイテムが他のフレキシブルアイテムと比較してどの程度縮小するかを指定する数値
  • flex-basis アイテムの長さ。有効な値:「auto」、「inherit」、または数字の後に「%」、「px」、「em」、またはその他の長さの単位。

ここで重要なのは、フレックスベースには長さの単位が必要であるということです。

例えばChromeのflex:1flex:1 1 0異なる結果を生成します。ほとんどの状況でflex:1 1 0;は動作しているように見えるかもしれませんが、実際に何が起こっているのか調べてみましょう。

フレックス基準は無視され、フレックスグローとフレックスシュリンクのみが適用されます。

flex:1 1 0;= flex:1 1;=flex:1;

これは一見問題ないように見えるかもしれませんが、コンテナの適用されたユニットがネストされている場合。予想外を期待する!

この例をChromeでお試しください

.Wrap{
  padding:10px;
  background: #333;
}
.Flex110x, .Flex1, .Flex110, .Wrap {
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: column;
  flex-direction: column;
}
.Flex110 {
  -webkit-flex: 1 1 0;
  flex: 1 1 0;
}
.Flex1 {
  -webkit-flex: 1;
  flex: 1;
}
.Flex110x{
  -webkit-flex: 1 1 0%;
  flex: 1 1 0%;
}
FLEX 1 1 0
<div class="Wrap">
  <div class="Flex110">
    <input type="submit" name="test1" value="TEST 1">
  </div>
</div>

FLEX 1
<div class="Wrap">
  <div class="Flex1">
    <input type="submit" name="test2" value="TEST 2">
  </div>
</div>

FLEX 1 1 0%
<div class="Wrap">
  <div class="Flex110x">
    <input type="submit" name="test3" value="TEST 3">
  </div>
</div>

互換性

一部のブラウザは仕様に準拠していないため、これが失敗することに注意してください。

完全なフレックス仕様を使用するブラウザ:

  • Firefox-✓
  • エッジ-✓ (私も知っています、私もショックを受けました。)
  • Chrome-x
  • ブレイブ-x
  • オペラ-x
  • IE- (笑、長さの単位なしで機能しますが、長さの単位では機能しません。)

アップデート2019

Chromeの最新バージョンでは、最終的にこの問題が修正されたようですが、他のブラウザではまだ修正されていません。

テスト済みで、Chrome Ver 74で動作しています。


1
値が0の場合、単位は必須ではありません。仕様書とflex: 1同じですflex: 1 1 0。あなたの例.Wrapでは、.Flex110x,.Flex1, .Flex110, .Wrapルールでクラス を削除した場合、期待どおりに機能します。

リンクを提供してください、私はあなたの言っていることが仕様に見つかりません。私は何も発明していません。私の答えはフレックスボックス仕様に基づいています

@Obsidianリンクは次のとおり です。w3.org / TR / css-flexbox-1 'shorthand 'の部分に移動すると、「flex:[positive-number] flex:[positive-number] 1と同等です。 0 ...
MikeB 2017

1
@Toskan互換性を最大限に高めるには、完全な構文を使用してくださいflex:1 1 0n;
DreamTeK

2
この違いを指摘してくれてありがとう、私は私の問題がどこから生じているのか理解できませんでした。いくつかの賞金を持っています。
2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.