前言:在项目中经常使用到flex布局,但是使用了flex:1你知道是什么意思吗?
flex
flex属性设置置了弹性项目(使用了flex布局项目)如何增大或缩小以适应其弹性容器中可用的空间
flex属性由三个简写属性: flex-grow flex-shrink flex-basis
指定 flex属性
可以使用一个,两个或三个值来指定 flex属性
单值语法(值必须位一下其中之一)
-
一个无单位数
flex:2其实设置为flex-grow: 2
flex-shrink被定为1
flex-basis被定为0
-
一个有效宽度
flex: 30px会被当作是
flex-basis的值 -
关键字none auto inital
下面会讲述这些关键字的作用
双值语法(第一个值必须为一个无单位数,并且它会被当作 <flex-grow> 的值。第二个值必须为以下之一)
- 一个无单位数:它会被当作
<flex-shrink>的值 - 一个有效的宽度值: 它会被当作
<flex-basis>的值
三值语法
- 第一个值必须为一个无单位数,并且它会被当作
<flex-grow>的值 - 第二个值必须为一个无单位数,并且它会被当作
<flex-shrink>的值 - 第三个值必须为一个有效的宽度值, 并且它会被当作
<flex-basis>的值
取值
initial
元素会根据自身宽高设置尺寸。它会缩短自身以适应 flex 容器,但不会伸长并吸收 flex 容器中的额外自由空间来适应 flex 容器 。相当于将属性设置为"flex: 0 1 auto"
auto
元素会根据自身的宽度与高度来确定尺寸,但是会伸长并吸收 flex 容器中额外的自由空间,也会缩短自身来适应 flex 容器。这相当于将属性设置为 "flex: 1 1 auto"
none
元素会根据自身宽高来设置尺寸。它是完全非弹性的:既不会缩短,也不会伸长来适应 flex 容器。相当于将属性设置为"flex: 0 0 auto"
flex-grow
定义 flex 项目的 flex-grow 。负值无效。省略时默认值为 1。 (初始值为 0)
flex-shrink
定义 flex 项目的 flex-grow 。负值无效。省略时默认值为 1。 (初始值为 0)
flex-basis
定义 flex 元素的 flex-basis 属性。若值为0,则必须加上单位,以免被视作伸缩性。省略时默认值为 0。(初始值为 auto)
flex:1代表啥
flex:1 指的是flex-grow:1 flex-shrink:1 flex-basis:0%
flex:1
即
flex-grow:1 flex-shrink:1 flex-basis:0%
训练
计算下面son的width
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<style>
.box {
width: 650px;
height: 600px;
border: 1px solid skyblue;
margin: 0 auto;
display: flex;
}
.son {
height: 100px;
margin-left: 20px;
line-height: 100px;
text-align: center;
}
.son1 {
flex-basis: 50px;
width: 100px;
background-color: skyblue;
}
.son2 {
flex-basis: 50px;
flex: 1;
background-color: purple;
/*
ps:后面flex:1把flex-basis变为0了
*/
}
.son3 {
flex-basis: 50px;
max-width: 100px;
background-color: yellow;
/*
ps:始终有限 flex-basis
*/
}
.son4 {
flex: 1;
min-width: 30px;
flex-basis: 50px;
background: pink;
/*
ps:后面flex-basis多加了50px
*/
}
</style>
<body>
<div class="box">
<div class="son son1">1</div>
<div class="son son2">2</div>
<div class="son son3">3</div>
<div class="son son4">4</div>
</div>
</body>
</html>
浏览器效果
son1样式为:
flex-basis: 50px;
width: 100px;
background-color: skyblue;
由浏览器效果可知son1的width为50px -> flex-basis设置了后续设置width无效
son2样式为:
flex-basis: 50px;
flex: 1;
background-color: purple;
可以得知上面flex:1组成为flex-grow:1 flex-shrink:1 flex-basis:0% 所以flex-basis为替换成了0%,所以最终生效的样式是flex:1
son3样式为:
flex-basis: 50px;
max-width: 100px;
background-color: yellow;
由浏览器效果可知son1的width为50px -> flex-basis设置了后续设置max-width无效
son4样式为:
flex: 1;
min-width: 30px;
flex-basis: 50px;
background: pink;
可以得知上面flex:1组成为flex-grow:1 flex-shrink:1 flex-basis:0%, 可以将最终样式变为
flex-grow:1;
flex-shrink:1;
flex-basis:0%;
min-width: 30px;
flex-basis: 50px;
background: pink;
由浏览器效果可知son4的width为50px + son2的width(flex:1的宽度)
看到这里,你应该对flex:1有自己的见解了吧,快去实战实用一下吧。