首页 > 建站教程 > Div+Css >  flex:1详解正文

flex:1详解

首先flex: 1等同于

flex: 1 1 auto;


flex: 1实际上是三个属性的缩写:

flex-grow: 1; flex-shrink: 1; flex-basis: auto;


flex-grow的作用

flex-grow 的作用是表示在当前元素占多少份的意思。


演示一段代码

<!DOCTYPE html>
<html>
<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>
    <style>
        .content {
            width: 500px;
            display: flex; 
        }
        .box-1 {
            background: aqua;
            flex-grow: 1;
        }
        .box-2 {
            background: pink;
            flex-grow: 1;
        }
    </style>
</head>
<body>
    <div>
        <div>box-1</div>
        <div>box-2</div>
    </div>
</body>
</html>


示例图: 

flex:1的理解


这样表示2个子元素各占1份,填充满整个flex的内容


flex-basis的作用

代码演示

<!DOCTYPE html>
<html>
<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>
    <style>
        .content {
            width: 500px;
            display: flex; 
        }
        .box-1 {
            background: aqua;
            flex-basis: 10%;
        }
        .box-2 {
            background: pink;
            flex-basis: 100px;
        }
    </style>
</head>
<body>
    <div>
        <div>box-1</div>
        <div>box-2</div>
    </div>
</body>
</html>


示例图:

flex:1的理解


这边没有设置flex-grow所以默认是flex-grow: 0;

flex-basis表示 flex中的剩余空间的大小。

那么box-1就是占总总宽度(500px)的10%,box-2则占总宽度(500px)的100px;

flex-grow 与 flex-basis 其实类似,区别在于,flex-grow 会填充满整个flex内容,而flex-basis不会通常满整个内容。


flex-shrink的作用

代码演示

<!DOCTYPE html>
<html>
<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>
    <style>
        .content {
            width: 500px;
            display: flex; 
        }
        .box-1 {
            background: aqua;
            width: 400px;
            flex-shrink: 1;
        }
        .box-2 {
            background: pink;
            width: 200px;
            flex-shrink: 2;
        }
    </style>
</head>
<body>
    <div>
        <div>box-1</div>
        <div>box-2</div>
    </div>
</body>
</html>


这边设置flex下2个子元素的宽度分别是 400px 和 300px,可以明显的看出已经超出父元素设置的500px。

那么这是flex-shrink就会起到作用,它会根据flex-shrink设置的值进行收缩。


如果flex-shrink设置为0表示当前元素不会进行收缩,flex-shrink的默认值为1;


flex-shrink的收缩公示(以这个为例):

子元素超出的宽度 * flex-shrink的值 * 子元素宽度 / 总值;

总值的获取(以当前代码为例):1(box-1的flex-shrink值) * 400(box-1的宽度) + 2(box-2的flex-shrink值) * 300(box-2的宽度) = 1000;


以当前代码为例计算:

子元素超出的值:500 - (400 + 300) = 200;

总值:1 * 400 + 2 * 300 = 1000;

.box-1收缩的宽度:200 * 1 * 400 / 1000 = 80;

.box-2收缩的宽度:200 * 2 * 300 / 1000 = 120;


实际看效果图

flex:1的理解


flex下的子元素确实是按照计算出来的宽度进行收缩了。

那么回归正题,flex:1 等于 flex:1 1 0 就很好理解了,默认情况下 flex 等于 flex 0 1 auto。