flex 之前主要使用:
normal flow
float + clear
position relative + absolute
display inline-block
负 margin
flex 布局
- 块级布局侧重垂直方向、行内布局侧重水平方向,
flex
布局是与方向无关的
-
flex
布局可以实现空间自动分配
、自动对齐
(flexible
:弹性、灵活) -
flex
适用简单的线性布局
,更复杂的布局要交给grid
布局
flex container
属性 | 解释 |
---|---|
flex-direction |
方向 |
flex-wrap |
换行 |
flex-flow |
上面两个的简写 |
justify-content |
主轴方向对齐方式 |
align-items |
侧轴对齐方式 |
align-content |
多行/列内容对齐方式(用的较少) |
1. flex-direction:
规定灵活项目的方向
值 | 描述 |
---|---|
row |
默认值。灵活的项目将水平显示,正如一个行一样 |
row-reverse |
与 row 相同,但是以相反的顺序 |
column |
灵活的项目将垂直显示,正如一个列一样 |
column-reverse |
与 column 相同,但是以相反的顺序 |
initial |
设置该属性为它的默认值 |
inherit |
从父元素继承该属性 |
2. flex-wrap:
规定flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向
值 | 描述 |
---|---|
nowrap |
默认值,规定灵活的项目不拆行或不拆列 |
wrap |
规定灵活的项目在必要的时候拆行或拆列 |
wrap-reverse |
规定灵活的项目在必要的时候拆行或拆列,但是以相反的顺序 |
initial |
设置该属性为它的默认值 |
inherit |
从父元素继承该属性 |
3. flex-flow:
一个简写的方式
- 第一个值为:
flex-direction
- 第二个值为:
flex-wrap
4. justify-content
主轴方向对齐方式
- 当
flex-direction: row;
时,主轴为X
方向 - 当
flex-direction: column;
时,主轴为Y
方向
值 | 描述 |
---|---|
flex-start |
默认值,左对齐 |
flex-end |
右对齐 |
center |
居中 |
space-between |
两端对齐,项目之间的间隔都相等 |
space-around |
每个项目两侧的间隔相等。 |
所以,项目之间的间隔比项目与边框的间隔大一倍 |
5. align-items:
侧轴对齐方式
值 | 描述 |
---|---|
stretch |
默认值,如果项目未设置高度或设为auto,将占满整个容器的高度 |
flex-start |
侧轴的起点对齐 |
flex-end |
侧轴的终点对齐 |
center |
侧轴的中点对齐 |
baseline |
项目的第一行文字的基线对齐 |
6. align-content
多行/列内容对齐方式(用的较少)
值 | 描述 |
---|---|
stretch |
默认值,轴线占满整个侧轴 |
flex-start |
与侧轴的起点对齐 |
flex-end |
与侧轴的终点对齐 |
center |
与侧轴的中点对齐 |
space-between |
与侧轴两端对齐,轴线之间的间隔平均分布 |
space-around |
每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍 |
flex item
属性 | 描述 |
---|---|
flex-grow | 增长比例(空间过多时) |
flex-shrink | 缩小比例(空间不够时) |
flex-basis | 默认大小(一般不用) |
flex | 上面三个的缩写 |
order | 顺序(代替双飞翼) |
align-self | 自身的对齐方式 |
1. flex-grow
flex-grow
属性dinginess项目的放大比例,默认为0
,即如果存在剩余空间,也不放大
如果所有项目的flex-grow
属性都为1
,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow
属性为2
,其他项目都为1
,则前者占据的剩余空间将比其他项多一倍
http://js.jirengu.com/qunaf/1/edit?css,output
2. flex-shrink
flex-shrink
属性定义了项目的缩小比例,默认为1
,即若谷空间不足,该项目将缩小
如果所有项目的flex-shrink
属性都为1
,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink
属性为0
,其他项目都为1
,则空间不足时,前者不缩小
负值对该属性无效
http://js.jirengu.com/qunaf/2/edit?css,output
3. flex-basis
flex-basis
属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主奏是否多余空间。它的默认值为auto
,即项目的本来大小
它可以设为跟width
或height
属性一样的值(比如200px),则项目占据固定空间
http://js.jirengu.com/qunaf/3/edit?css,output
4. flex
flex
属性是flex-grow
,flex-shrink
,和flex-basis
的简写,默认值为0 1 auto
。后面两个属性可选
该属性有两个快捷值:auto
(1 1 auto
)和 none(0 0 auto
)
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值
5. order
order
属性定义项目的排列顺序。数值越小,排列越靠前,默认为0
用css
改变内容的排序
http://js.jirengu.com/qunaf/4/edit?css,output
6. align-self
align-self
属性允许单个项目有其他项目不一样的对齐方式,可覆盖align-items
属性。默认值为auto
,表示继承父元素的align-items
属性,如果没有父元素,则等同于stretch
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch
}
该属性可能取 6 个值,除了auto
,其他都与align-items
属性完全一致
http://js.jirengu.com/qunaf/5/edit?css,output
简单使用
手机页面布局(topbar + main + tabs)
http://js.jirengu.com/muxim/1/edit?html,css,output产品列表(ul > li*9)
http://js.jirengu.com/qemah/1/edit?css,output