We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Flexible Box 简称 flex,意为”弹性布局”,可以简便、完整、响应式地实现各种页面布局
Flexible Box
flex
采用Flex布局的元素,称为flex容器container
container
它的所有子元素自动成为容器成员,称为flex项目item
item
容器中默认存在两条轴,主轴和交叉轴,呈90度关系。项目默认沿主轴排列,通过flex-direction来决定主轴的方向
flex-direction
每根轴都有起点和终点,这对于元素的对齐非常重要
关于flex常用的属性,我们可以划分为容器属性和容器成员属性
容器属性有:
决定主轴的方向(即项目的排列方向)
.container { flex-direction: row | row-reverse | column | column-reverse; }
属性对应如下:
如下图所示:
弹性元素永远沿主轴排列,那么如果主轴排不下,通过flex-wrap决定容器内项目是否可换行
flex-wrap
.container { flex-wrap: nowrap | wrap | wrap-reverse; }
默认情况是不换行,但这里也不会任由元素直接溢出容器,会涉及到元素的弹性伸缩
是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
row nowrap
.box { flex-flow: <flex-direction> || <flex-wrap>; }
定义了项目在主轴上的对齐方式
.box { justify-content: flex-start | flex-end | center | space-between | space-around; }
效果图如下:
定义项目在交叉轴上如何对齐
.box { align-items: flex-start | flex-end | center | baseline | stretch; }
定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用
.box { align-content: flex-start | flex-end | center | space-between | space-around | stretch; }
属性对应如吓:
容器成员属性如下:
order
flex-grow
flex-shrink
flex-basis
align-self
定义项目的排列顺序。数值越小,排列越靠前,默认为0
.item { order: <integer>; }
上面讲到当容器设为flex-wrap: nowrap;不换行的时候,容器宽度有不够分的情况,弹性元素会根据flex-grow来决定
flex-wrap: nowrap;
定义项目的放大比例(容器宽度>元素总宽度时如何伸展)
默认为0,即如果存在剩余空间,也不放大
0
.item { flex-grow: <number>; }
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)
如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍
弹性容器的宽度正好等于元素宽度总和,无多余宽度,此时无论flex-grow是什么值都不会生效
定义了项目的缩小比例(容器宽度<元素总宽度时如何收缩),默认为1,即如果空间不足,该项目将缩小
.item { flex-shrink: <number>; /* default 1 */ }
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小
如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小
在容器宽度有剩余时,flex-shrink也是不会生效的
设置的是元素在主轴上的初始尺寸,所谓的初始尺寸就是元素在flex-grow和flex-shrink生效前的尺寸
浏览器根据这个属性,计算主轴是否有多余空间,默认值为auto,即项目的本来大小,如设置了width则元素尺寸由width/height决定(主轴方向),没有设置则由内容决定
auto
width
width/height
.item { flex-basis: <length> | auto; /* default auto */ }
当设置为0的是,会根据内容撑开
它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间
height
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto,也是比较难懂的一个复合属性
0 1 auto
.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] }
一些属性有:
flex:1 和 flex:auto 的区别,可以归结于flex-basis:0和flex-basis:auto的区别
flex:1
flex:auto
flex-basis:0
flex-basis:auto
当设置为0时(绝对弹性元素),此时相当于告诉flex-grow和flex-shrink在伸缩的时候不需要考虑我的尺寸
当设置为auto时(相对弹性元素),此时则需要在伸缩时将元素尺寸纳入考虑
注意:建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值
允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性
align-items
默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
stretch
.item { align-self: auto | flex-start | flex-end | center | baseline | stretch; }
在以前的文章中,我们能够通过flex简单粗暴的实现元素水平垂直方向的居中,以及在两栏三栏自适应布局中通过flex完成,这里就不再展开代码的演示
包括现在在移动端、小程序这边的开发,都建议使用flex进行布局
The text was updated successfully, but these errors were encountered:
flex-grow和flex-shrink不对,应该是相对于其它flex item的放大/缩小比例
Sorry, something went wrong.
考点:
核心点:
flex-flow
justify-content
align-content
No branches or pull requests
一、是什么
Flexible Box
简称flex
,意为”弹性布局”,可以简便、完整、响应式地实现各种页面布局采用Flex布局的元素,称为
flex
容器container
它的所有子元素自动成为容器成员,称为
flex
项目item
容器中默认存在两条轴,主轴和交叉轴,呈90度关系。项目默认沿主轴排列,通过
flex-direction
来决定主轴的方向每根轴都有起点和终点,这对于元素的对齐非常重要
二、属性
关于
flex
常用的属性,我们可以划分为容器属性和容器成员属性容器属性有:
flex-direction
决定主轴的方向(即项目的排列方向)
属性对应如下:
如下图所示:
flex-wrap
弹性元素永远沿主轴排列,那么如果主轴排不下,通过
flex-wrap
决定容器内项目是否可换行属性对应如下:
默认情况是不换行,但这里也不会任由元素直接溢出容器,会涉及到元素的弹性伸缩
flex-flow
是
flex-direction
属性和flex-wrap
属性的简写形式,默认值为row nowrap
justify-content
定义了项目在主轴上的对齐方式
属性对应如下:
效果图如下:
align-items
定义项目在交叉轴上如何对齐
属性对应如下:
align-content
定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用
属性对应如吓:
效果图如下:
容器成员属性如下:
order
flex-grow
flex-shrink
flex-basis
flex
align-self
order
定义项目的排列顺序。数值越小,排列越靠前,默认为0
flex-grow
上面讲到当容器设为
flex-wrap: nowrap;
不换行的时候,容器宽度有不够分的情况,弹性元素会根据flex-grow
来决定定义项目的放大比例(容器宽度>元素总宽度时如何伸展)
默认为
0
,即如果存在剩余空间,也不放大如果所有项目的
flex-grow
属性都为1,则它们将等分剩余空间(如果有的话)如果一个项目的
flex-grow
属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍弹性容器的宽度正好等于元素宽度总和,无多余宽度,此时无论
flex-grow
是什么值都不会生效flex-shrink
定义了项目的缩小比例(容器宽度<元素总宽度时如何收缩),默认为1,即如果空间不足,该项目将缩小
如果所有项目的
flex-shrink
属性都为1,当空间不足时,都将等比例缩小如果一个项目的
flex-shrink
属性为0,其他项目都为1,则空间不足时,前者不缩小在容器宽度有剩余时,
flex-shrink
也是不会生效的flex-basis
设置的是元素在主轴上的初始尺寸,所谓的初始尺寸就是元素在
flex-grow
和flex-shrink
生效前的尺寸浏览器根据这个属性,计算主轴是否有多余空间,默认值为
auto
,即项目的本来大小,如设置了width
则元素尺寸由width/height
决定(主轴方向),没有设置则由内容决定当设置为0的是,会根据内容撑开
它可以设为跟
width
或height
属性一样的值(比如350px),则项目将占据固定空间flex
flex
属性是flex-grow
,flex-shrink
和flex-basis
的简写,默认值为0 1 auto
,也是比较难懂的一个复合属性一些属性有:
flex:1
和flex:auto
的区别,可以归结于flex-basis:0
和flex-basis:auto
的区别当设置为0时(绝对弹性元素),此时相当于告诉
flex-grow
和flex-shrink
在伸缩的时候不需要考虑我的尺寸当设置为
auto
时(相对弹性元素),此时则需要在伸缩时将元素尺寸纳入考虑注意:建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值
align-self
允许单个项目有与其他项目不一样的对齐方式,可覆盖
align-items
属性默认值为
auto
,表示继承父元素的align-items
属性,如果没有父元素,则等同于stretch
效果图如下:
三、应用场景
在以前的文章中,我们能够通过
flex
简单粗暴的实现元素水平垂直方向的居中,以及在两栏三栏自适应布局中通过flex
完成,这里就不再展开代码的演示包括现在在移动端、小程序这边的开发,都建议使用
flex
进行布局参考文献
The text was updated successfully, but these errors were encountered: