为了解决传统布局的死板以及不足,CSS3新增了一种新型的弹性盒子模型。通过弹性盒子模型,我们可以轻松地创建自适应浏览器窗口的“流动布局”以及自适应字体大小的弹性布局,使得响应式布局的实现更加容易。
属性 | 说明 |
---|---|
flex-grow | 定义子元素的放大比例 |
flex-shrink | 定义子元素的缩小比例 |
flex-basis | 定义子元素的宽度 |
flex | flex-grow、flex-shrink、flex-basis的复合属性 |
flex-direction | 定义子元素的排列方向 |
flex-wrap | 定义子元素是单行显示,还是多行显示 |
flex-flow | flex-direction、flex-wrap的复合属性 |
order | 定义子元素的排列顺序 |
justify-content | 定义子元素在“横轴”上的对齐方式 |
align-items | 定义子元素在“纵轴”上的对齐方式 |
准确来说,这一章我们只需要重点掌握flex、flex-flow、order、justify-content、align-items这5个属性就可以了,这样可以大大减少我们的记忆负担。
举例:子元素宽度之和小于父元素宽度
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
#wrapper
{
display:flex;
width:200px;
height:150px;
}
#box1, #box2, #box3{width:50px;}
#box1{background:red;}
#box2{background:blue;}
#box3{background:orange;}
</style>
</head>
<body>
<div id="wrapper">
<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
</div>
</body>
</html>
浏览器预览效果如下图所示。
分析:
定义了display:flex;的元素会变成一个弹性盒子。在这个例子中,id为wrapper的div元素就是一个弹性盒子。由于弹性盒子的宽度为200px,而所有子元素宽度之和为150px,此时子元素宽度之和小于父元素宽度。因此,所有子元素最终的宽度就是原来定义的宽度。
举例:子元素宽度之和大于父元素宽度
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
#wrapper
{
display:flex;
width:200px;
height:150px;
}
#box1, #box2, #box3
{
width:100px;
}
#box1
{
background:red;
}
#box2
{
background:blue;
}
#box3
{
background:orange;
}
</style>
</head>
<body>
<div id="wrapper">
<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
</div>
</body>
</html>
浏览器预览效果如下图所示。
分析:
在这个例子中,弹性盒子(父元素)的宽度为200px,而所有子元素宽度之和为300px,此时子元素宽度之和大于父元素宽度。因此,子元素会按比例来划分宽度。这就是弹性盒子的特点!
此外记住一点:在使用弹性盒子模型之前,你必须为父元素定义“display:flex;”或“display:inline-flex;”,这个父元素才具有弹性盒子模型的特点。