編集: Chrome 34 以降、以下の構成は期待どおりに正しくレンダリングされます。このことから、実際には以前の Chrome バージョンのバグであり、この比較的単純な CSS が単純に機能することがわかります。
そこで、ビューポートのパーセンテージの長さを発見したところ、フレックスボックスを使用した洗練されたレスポンシブ レイアウト テストでうまくいくと思いました。驚いたことに、Firefox と Internet Explorer はまったく同じように、まったく期待どおりにレンダリングしました。今回、Chrome は私が言うことをすることを拒否します。
そして私が欲しいのは、スクロールバーがなく、すべてのdiv
要素が親に応じてサイズが変わることheight: 100%
、コンテンツがなくてもボックスレイアウトが見えること、ブロックレベルのコンテンツをレイアウトに挿入することです。
原因を具体的に言うと、継承されていないように見えるのは親要素の高さです。この場合、height: 100%
内部要素が親要素の高さになることを期待していますが、それ自体は70vh
(ビューポートの高さの 70% に等しい)。
内部に何もない場合div
、Chrome は (FF/IE とは異なり) 要素をまったく表示しません (高さが空ではない) ブロック要素がまったくないかのように。
教えてください:
- 文書化されていない Chrome のバグですか (または、Webkit に追加のプロパティが必要ですか)?
- バグでない場合: FF と IE がこのように動作する理由 (一見正しい) は何ですか?
- 問題
flex-direction: column
になる可能性がありますか (要素フローの変更)?
やっぱり使えるって書いてあるし。
コードは次のとおりです。http://jsfiddle.net/ZPRdh/
レンダリングは次のとおりです。
編集
flex-box
この問題では無関係のようです。次の HTML ページはレイアウトの考え方を再現しており、IE と FF で同じようにレンダリングされますが、Chrome ではレンダリングされません。
<!DOCTYPE html>
<html>
<head>
<title>stackoverflow.com/questions/19450503/</title>
<style type="text/css">
body{background-color:#000;margin:0;font:normal 4em sans-serif;color:#888;}
header,section,footer{overflow:hidden;}
header,section,footer,article,figure{display:block;margin:0;padding:0;}
header {background-color:#333;height:20vh;}
section{background-color:#555;height:70vh;}
footer {background-color:#777;height:10vh;}
article{background-color:#999;width:20vmin;height:20vmin;}
figure {background-color:#BBB;width:50%;height:50%;}
</style>
</head>
<body>
<header></header>
<section>
<article>
<figure></figure>
</article>
</section>
<footer></footer>
</body>
</html>
ここで私 (および他の人) が基本的なことを理解していないか、Chrome に実際に意図しない矛盾があります。