flex:1 到底代表什么?

7,528 阅读3分钟

flex:1 为:flex: 1 1 0;
数值 1 设置的是 flex-grow,flex-shrink没设置的时候默认值是1,和初始值一样的;
特殊在于flex-basis,初始值为 auto 那常规思路没设置就采用默认值则:flex:1 === flex:1 1 auto;
MDN给了定义一个值的时候的解释,如果flex只定义了一个数字值,则 flex-basis 的值为 0;
所以:flex:1 为:flex: 1 1 0;

验证
Chrome浏览器上,设置 flex:1;

image.png

Chrome浏览器上,设置 flex:1 1 0;

image.png

flex

定义

flex CSS简写属性设置了弹性项目如何增大或缩小以适应其弹性容器中可用的空间

成分

  • flex-grow
  • flex-shrink
  • flex-basis

初始值

  • flex-grow: 0
  • flex-shrink: 1
  • flex-basis: auto

语法

/* 关键字值 */
flex: auto;
flex: initial;
flex: none;

/* 一个值, 无单位数字: flex-grow */
flex: 2;

/* 一个值, width/height: flex-basis */
flex: 10em;
flex: 30px;
flex: min-content;

/* 两个值: flex-grow | flex-basis */
flex: 1 30px;

/* 两个值: flex-grow | flex-shrink */
flex: 2 2;

/* 三个值: flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;

/*全局属性值 */
flex: inherit;
flex: initial;
flex: unset;

可以使用一个,两个或三个值来指定 flex属性。

单值语法:
值必须为以下其中之一:

  1. 一个无单位数(<number>): 它会被当作flex:<number> 1 0; <flex-shrink>的值被假定为1,然后<flex-basis> 的值被假定为0
  2. 一个有效的宽度(width)值: 它会被当作 的值。
  3. 关键字none,auto或initial.

双值语法:
第一个值必须为一个无单位数,并且它会被当作 <flex-grow> 的值。第二个值必须为以下之一:

  1. 一个无单位数:它会被当作 的值。
  2. 一个有效的宽度值: 它会被当作 的值。

三值语法:

  1. 第一个值必须为一个无单位数,并且它会被当作 的值。
  2. 第二个值必须为一个无单位数,并且它会被当作 的值。
  3. 第三个值必须为一个有效的宽度值, 并且它会被当作 的值。

取值

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-shrink 。负值无效。省略时默认值为1。 (初始值为 1)

<'flex-basis'>
定义 flex 元素的 flex-basis 属性。若值为0,则必须加上单位,以免被视作伸缩性。省略时默认值为 0。(初始值为 auto)

参考: