转自阮一峰老师:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.htmlcss
1、什么是Flex布局?html
Flex是Flexible Box的缩写,顾名思义为“弹性布局”,用来为盒装模型提供最大的灵活性。web
任何一个容器均可以指定为Flex 布局。浏览器
.box{ display:flex; }
行内元素也能够使用Flex布局。布局
.box{ display:inline-flex; }
webkit内核的浏览器,必需加上-webkit前缀flex
.box{ display:-webkit-flex; display:flex; }
须要注意的是,设为flex布局之后,子元素的float、clear和vertical-align属性将失效spa
2、基本概念code
采用Flex布局的元素,称为Flex容器(flex container),简称“容器”。它的全部子元素自动成为容器成员,成为flex项目(flex item),简称“项目”。htm
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框 的交叉点)叫作main start,结束位置叫作main end;交叉轴的开始位置叫作cross start,结束位置叫作cross end。blog
项目默认沿主轴排列。单个项目占据的主轴空间叫作main size,占据的交叉轴空间叫作cross size。
3、容器的属性
如下6个属性设置在容器上。
3.1flex-direction属性
flex-direction属性决定主轴的方向(即项目的排列方向)。
.box{ flex-direction:row | row-reverse | column | column-reverse; }
它可能有四个值
3.2flex-wrap属性
默认状况下,项目都排在一条线(又称“轴线”)上。flex-wrap属性定义,若是一条轴线 排不下,如何换行?
.box{ flex-wrap: nowrap | wrap | wrap-reverse; }
它可能去三个值。
(1)nowrap(默认):不换行
(2)wrap:换行,第一行在上方
(3)wrap-reverse:换行,在第一行的下方
3.3 flex-flow
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认 row nowrap。
.box{ flex-flow:<flex-direction> || <flex-wrap>; }
3.4 justify-content属性
justify-content属性定义了项目在主轴上的对齐方式
.box{ justify-content:flex-start | flex-end | center | space-between |space-around; }
它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。
3.5 align-items属性
align-items属性定义项目在交叉轴上如何对齐。
.box{ align-items:flex-start | flex-end | center |baseline | stretch; }
它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上之下。
3.6 align-content属性
align-content属性定义了多根轴线的对齐方式。若是项目只有一根轴线,该属性不起做用。
.box{ align-content:flex-start | flex-end | center | spance-between | space-around |stretch; }
该属性可能取6个值。
4、项目的属性
一下6个属性设置在项目上。
4.1 order属性
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0.
.item{ order:<integer>; }
4.2 flex-grow属性
flex-grow属性定义项目的放大比例,默认值为0,即若是存在剩余空间,也不放大。
.item{ flex-grow:<number>;/* default 0*/ }
若是全部项目的flex-grow属性都为1,则它们将等分剩余空间(若是有的话)。若是一个项目的flex-grow属性为2,其余项目为1,则牵着占据的剩余空间将比其余项多一倍
4.3 flex-shrink属性
flex-shrink属性定义了项目的缩小比例,默认为1,即若是空间不足,改项目将缩小。
.item{ flex-shrink:<number>;/* default 1 */ }
若是全部项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。若是一个项目的flex-shrink属性为0,其余项目都为1,则空间不足时,前者不缩小。
负值对该属性无效。
4.4 flex-basis属性
flex-basis属性定义了在分配多余空间以前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的原本大小。
.item{ flex-basis:<length> | auto ; /*default auto*/ }
它能够设为跟width或height属性同样的值(好比350px),则项目将占据固定空间。
4.5 flex属性
flex属性是flex-grow,flex-shrink和flex-basis的简写,默认值为0 1 auto。后面两个属性可选
.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] }
改属性有两个快捷值:auto(1 1 auto)和none(0 0 auto).
建议优先使用这个属性,而不是单独写三个分离的属性,由于浏览器会推算相关值
4.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://www.ruanyifeng.com/blog/2015/07/flex-grammar.html