flex 布局
2017-12-07 本文已影响0人
幽涯
一、介绍
- Flexible Box 的缩写,译为「弹性布局」
- 任何一个容器都可以指定为 Flex 布局
.box { display: flex; }
- 行内元素也可以使用 Flex 布局
.box { display: inline-flex; }
- Webkit 内核浏览器必须加上 -webkit- 前缀
.box { display: -webkit-flex; display: flex; }
设为 Flex 布局之后,元素的 float、clear 和 vertical-align 属性将失效
二、概念
- 采用 Flex 布局的元素称为 Flex 容器(flex contanier),简称“容器”;
- 它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称“项目”;
- 容器默认存在水平的主轴(main axis)和垂直交叉轴(cross axis)两根轴;
- 主轴的开始位置(与边框的交叉点)叫做 main start,结束位置叫做 main end;
- 交叉轴的开始位置叫做 cross start,结束位置叫做 cross end;
-项目默认沿主轴排列; - 单个项目占据的主轴空间叫做 main size,占据的交叉轴控件叫做 cross size;
三、容器属性
-
flex-direction:
主轴方向;(项目排列方向)- row:水平从左至右;(默认)
- row-reverse:水平从右向左;
- column:垂直从上往下;
- column-reverse:垂直从下往上;
-
flex-wrap:
定义如果一条轴线排不下如何换行;- nowrap:不换行;(默认)
- wrap:从上往下换行;
- wrap-reverse:从下往上换行;
-
flex-flow:
是flex-direction
属性和flex-wrap
属性的合并简写形式;(默认值为 row nowrap) -
justify-content:
定义了项目在主轴上的对齐方式;
每个属性定义的对其方式和轴的方向有关;
下面设以主轴从左到右;- flex-start:左对齐;(默认)
- flex-end:右对齐;
- center:居中;
- space-between:两端对齐,项目之间间隔相等;
- space-around:每个项目两侧的间隔相等;(项目间的间隔比项目与边框的间隔大一倍)
-
align-items:
定义项目在交叉轴上如何对齐;
每个属性定义的对齐方式和交叉轴方向有关;
下面设交叉轴从上到下;- flex-start:交叉轴的起点对齐;
- flex-end:交叉轴的终点对齐;
- center:交叉轴的中点对齐;
- baseline:项目的第一行文字的基线对齐;
- stretch:若项目未设置高度或设为
auto
,将占满整个容器高度;(默认)
flex-align-item.jpg
-
align-content:
定义了多根轴线的对齐方式;
如果项目只有一根轴线,该属性不起作用;- flex-start:与交叉轴的起点对齐;
- flex-end:与交叉轴的终点对齐;
- space-between:与交叉轴的中点对齐;
- space-around:与交叉轴两端对齐,轴线之间间隔平均分布;
-
stretch:轴线占满整个交叉轴;(默认)
flex-align-content.jpg
四、项目的属性
1、order:
定义了项目的排列顺序;
数值越小,排列越靠前;(默认为0)
2、flex-grow:
定义项目的放大比例;(默认为0)
如果所有项目的 flex-grow
属性都为 1,则它们将等分剩余空间;
如果一个项目的 flex-grow
属性为 2,其他项目都为 1,则前者占据剩余空间将比其他项多一倍;
3、flex-shrink:
定义了项目的缩小比例;(默认为1)
即如果空间不足,该项目将缩小;
如果所有项目的 flex-shrink
属性都为 1,空间不足时都等比缩小;
如果一个项目的 flex-shrink
属性为 0,其他项目都为 1,空间不足时,前者不缩小,其他等比缩小;
负值对该属性无效;
4、flex-basis:
定义了在分配多余空间之前,项目占据的主轴空间(main size);
浏览器根据这个属性计算主轴是否有多余空间;
默认值为 auto,即项目的本来大小;
可以设为跟 width
或 height
属性一样的值,则项目占据固定空间;
5、flex
是 flex-grow
、flex-shrink
和 flex-basis
的简写,默认值为 0 1 auto
;
第一个必填,后两个可选;
该属性有两个快捷值 auto (1 1 auto)
和 none (0 0 auto)
;
6、align-self
允许单个项目有与其他项目不同的对齐方式,可覆盖 align-item
属性;
默认值为 auto,表示继承父元素的 align-items
属性;
属性值除了多出一个 auto,其他完全和 align-item
相同;