Flex: 1
今天在学习 Full-Stack Social Media App Tutorial with React 19 & Next.js 15 & MySql | React Next.js Full Course 时遇到了好几次使用 flex-1
,这是由 Tailwindcss 提供的预定义的类名,等同于为该元素挂上了 flex: 1
。
flex
是 CSS 中一个常用的 简写属性,其实际上是 flex-grow
、flex-shrink
、flex-basis
三个属性的简写,而 flex: 1
则等同于 flex: 1 1 0%
。
flex-grow: 1
:定义项目的放大比例,值为 1 表示如果存在剩余空间,项目将按比例放大。flex-shrink: 1
:定义项目的缩小比例,值为 1 表示如果空间不足,项目将按比例缩小。flex-basis: 0%
:定义在分配多余空间之前,项目占据的主轴空间,值为 0% 表示项目的初始大小为 0。
flex: auto
与 flex: 1
的区别
在 CSS Flex 布局中,flex: 1
和 flex: auto
都用于定义弹性项目如何在容器中分配空间,但它们的行为有所不同,主要区别在于 flex-basis
属性的取值:
flex: 1
:等同于flex: 1 1 0%
,其中flex-basis
为0%
。这意味着元素的初始大小被设为 0,在分配剩余空间时,各元素按比例平分剩余空间,而不考虑其内容的固有大小。flex: auto
:等同于flex: 1 1 auto
,其中flex-basis
为auto
。这表示元素的初始大小基于其内容的固有尺寸,在分配剩余空间时,首先考虑元素的内容大小,然后再根据剩余空间进行伸缩。
具体区别:
-
空间分配方式:
- 使用
flex: 1
时,所有设置了该属性的元素会忽略自身内容的宽度,平分容器的剩余空间。 - 使用
flex: auto
时,元素首先根据自身内容确定初始大小,然后在剩余空间中按比例分配。
- 使用
适用场景:
flex: 1
:适用于需要所有元素等分剩余空间的场景,例如创建等宽的导航按钮或卡片布局。flex: auto
:适用于希望元素根据自身内容动态调整大小的场景,例如导航栏中的菜单项,其宽度根据文字长度自动调整。
Flex
以下摘取自 MDN Web Docs 中对该属性的语法解释:
语法
/* 关键字值 */
flex: auto;
flex: initial;
flex: none;
/* 单值,无单位数字:flex-grow
flex-basis 此时等于 0。 */
flex: 2;
/* 单值,宽度/高度: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: revert;
flex: revert-layer;
flex: unset;
可以使用一个、两个或三个值来指定 flex
属性。
-
单值语法:值必须是以下之一:
- 一个
flex-grow
的有效值:此时简写会扩展为flex: <flex-grow> 1 0
。 - 一个
flex-basis
的有效值:此时简写会扩展为flex: 1 1 <flex-basis>
。 - 关键字
none
或者全局关键字之一。
- 一个
-
双值语法:
-
第一个值必须是一个
flex-grow
的有效值。 -
第二个值必须是以下之一:
- 一个
flex-shrink
的有效值:此时简写会扩展为flex: <flex-grow> <flex-shrink> 0
。 - 一个
flex-basis
的有效值:此时简写会扩展为flex: <flex-grow> 1 <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-shrink
。负值无效。省略时默认值为1
。 (初始值为1
)flex-basis
:
定义 flex 元素的flex-basis
属性。若值为0
,则必须加上单位,以免被视作伸缩性。省略时默认值为0
。(初始值为auto
)
评论区