2016-08-17 12 views
3

は、我々は、このマークアップを持っているとしましょう:親がフレックスの場合は高さ100%のアイテム:Chromeのバグ?

<div id="outer"> 
    <div id="middle"> 
    <div id="inner"> 
    </div> 
    </div> 
</div> 

と、このCSS:

#outer { 
    display: flex; 
    flex-direction: column; 
    background-color: white; 
    height: 300px; 
} 

#middle { 
    flex-grow: 1; 
    background-color: beige; 
} 

#inner { 
    background-color: black; 
    height: 100%; 
} 

それがミドルフレックスほど高くすべきであると私は、内側のdiv要素は、全体300ピクセルに及ぶことを期待しますアイテムが親をいっぱいにします。

これはIE、Edge、Firefoxで見られる動作です。

Chromeでは、中央のdivはまだ300ピクセルを塗りつぶしますが、内側のdivは高さ属性がなくても高くなります。

このフィドルを参照してください: https://jsfiddle.net/mhjussna/右、Chromeのバグです

+0

全てフレックスの値が '高さ:100% 'フレックスを用いてバギーであろう。代わりに '#outer '要素に' align-items:stretch'を使用してください。 –

+0

'align-item'は、' flex-direction'が 'column 'のときに水平方向に配置されるため、質問には関係しません。また、フレックスレイアウトに直接関与する要素では、 'height:100%'を使用しないことに注意してください。 – John

答えて

4

flex-grow:1#middle divに使用していることが原因です。

flex:1という推奨の略記号を使用している場合、それは完全に機能します。

#outer { 
 
    display: flex; 
 
    flex-direction: column; 
 
    background-color: white; 
 
    height: 300px; 
 
} 
 
#middle { 
 
    flex: 1; 
 
    /* here */ 
 
    background-color: beige; 
 
} 
 
#inner { 
 
    background-color: black; 
 
    height: 100%; 
 
    color: white; 
 
}
<div id="outer"> 
 
    <div id="middle"> 
 
    <div id="inner"> 
 
     x 
 
    </div> 
 
    </div> 
 
</div>
あるいは

、状態

#middle { 
    flex-grow: 1; 
    flex-shrink:0; 
    flex-basis:0; 
    background-color: beige; 
} 

JSfiddle Demo

+0

よかった、ありがとう。 – John

+0

これは、あなたが 'flex'プロパティ*を使用しているわけではなく、Chromeが' flex-basis'と一緒に子のパーセンテージの高さの親参照の高さとして機能することを許しているからです。いずれかのプロパティだけでは、タスクを完了できませんでした。 *このソリューションはSafariでは動作しないことに注意してください。*この答えは明らかで、Webkitブラウザでの重要な相違点を強調しています。私は欺瞞で私の答えを更新しました。ありがとう。 –

0

私はそれがChromeのバグだとは思わない。 W3C勧告https://www.w3.org/TR/CSS2/visudet.html#the-height-propertyから

は割合の高さを指定します。パーセンテージは、生成されたボックスの包含ブロックの高さに対して計算されます。包含ブロックの高さが明示的に指定されていない場合(すなわち内容の高さに依存する)、この要素は絶対的に配置されていない場合、値は 'auto'に計算されます。

#middleにheight: 100%を設定すると、他のブラウザhttps://jsfiddle.net/mhjussna/1/と同じ結果になります。

+0

しかし、収納ブロックの高さはコンテンツの高さに依存しません(この場合、ゼロです)。そしてChromeでもそれに同意します。高さは、高さ属性ではなく、flex-grow属性で明示的に設定されます。 – John

+0

また、 '#middle'の' height:100% 'の設定は、フレックスレイアウトを完全に無効にするための回避策ではありません。 – John

+0

内側要素の高さが100%の2つの中間要素があるとしたら、100%は300個ではなく150個を意味します。 top:0、right:0、bottom:0、left:0の代わりにheight 100%https://jsfiddle.net/6xj7zrLv/ –

関連する問題