这应该适用于您的第二个示例:http: //jsfiddle.net/8rWwt/
我已经包含了非前缀版本、-ms- 版本和现代 -webkit- 版本。此示例中的语法非常相似。这足以支持大多数仍在使用的桌面版本的 Chrome、Opera 以及 IE10 和 11。Firefox 在即将发布的版本中使用不带前缀的最新语法。当它们自动更新时,它也将很快在那里全面工作。
我首先使 body 成为一个 flex 容器,以便红色 div 可以居中,并告诉它在 inline 和 block 方向上居中:
body {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
现在红色 div 居中。
接下来我为红色 div 添加一个高度(否则将没有什么可以扩展,因为高度将是其子项的高度),并且还使其成为一个 flex 容器(绿色和蓝色 div 不会成为 flex 项,除非它们的parent 是一个弹性容器)。然后我将项目的方向设置为列,因此它们彼此堆叠,而不是默认的行:
.red {
background-color: red;
height: 50%;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column;
}
现在几乎准备好了。最后需要做的是告诉蓝色 div 占用剩余空间:
.blue {
background-color: blue;
-ms-flex: 1;
-webkit-flex: 1;
flex: 1;
}
如果你希望它在当前/旧的 Firefox 和 Safari 中工作,你需要为旧的 flexbox 添加语法。我在 Smashing Magazine 上的文章在底部包含表格,映射了语法。
第一个示例只是第二个示例的简化版本。我删除了 flexbox 属性以使父对象居中,而是将灰色 div 设置为 100% 高和 100% 宽。我还颠倒了盒子的顺序,因为绿色盒子是第一个并且应该弯曲:
http://jsfiddle.net/8rWwt/1/