在CSS3中,我们可以定义弹性盒子内部子元素的在分配空间之前,该子元素所占的空间大小。浏览器会根据这个属性,然后计算父元素是否有多余空间。
很多小伙伴初次见到flex-basis这个属性,都会感到很疑惑,完全不知道它是用来干嘛的。说白了,flex-basis就是width的替代品,这两个都用来定义子元素的宽度。只不过在弹性盒子中,flex-basis的语义会比width好一点而已。
语法:
flex-basis: 取值;
说明:
flex-basis属性取值有两个:一个是“auto”,即该子元素的宽度是根据内容多少来定的;另外一个是“长度值”,单位可以为px、em和百分比等。
flex-basis属性用来设置子元素的宽度,当然,width属性也可以用来设置子元素的宽度。如果某一个子元素同时设置flex-basis和width,那么flex-basis的值会覆盖width的值。
举例:子元素宽度之和大于父元素宽度
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
#wrapper
{
display:flex;
width:200px;
height:150px;
}
#box1,#box2,#box3
{
flex-basis:100px;
}
#box1
{
background:red;
flex-shrink:0;
}
#box2
{
background:blue;
flex-shrink:1;
}
#box3
{
background:orange;
flex-shrink:3;
}
</style>
</head>
<body>
<div id="wrapper">
<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>
</div>
</body>
</html>
浏览器预览效果如下图所示。
分析:
#box1,#box2,#box3
{
flex-basis:100px;
}
对于上面代码,我们把“flex-basis:100px;”改为“width:100px;”,运行后效果是一样的。这里注意一点,flex-basis是针对弹性盒子(父元素)下的子元素而已的,不能用于设置弹性盒子的宽度,小伙伴们试一下就知道了。
最后,小伙伴们不要把flex-basis这个属性想得那么复杂,你可以把它等价于width就可以了。只不过呢,在使用弹性布局时,虽然flex-basis和width都可以用来设置子元素的宽度,但是我们应该使用flex-basis而不是width,这也是为了更好的语义化。