http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
Flex布局教程:语法篇
网页布局是css的一个重点应用
布局的传统解决方案,基于盒状模型,依赖display属性 + position属性 + float属性。它对于那些特殊布局非常不方便。比如垂直居中就不容易实现。
2009年,W3C提出一种新的方案 --- Flex布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。
Flex布局将成为未来布局的首选方案。本文介绍他的语法。
一、Flex布局是什么?
Flex是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项目,简称‘项目’。
容器默认存在两根轴:水平的主轴和垂直交叉轴。主轴的开始位置叫做main start,结束位置叫做main end;交叉轴的开始叫做cross start,结束位置叫做cross end。
项目默认沿主轴排列。单个项目占的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
三、容器的属性
以下6个属性设置在容器上。
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
.box{
flex-direction:row | row-reverse | column | column-reverse;
}
row(默认值):主轴为水平方向,起点为左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
.box{flex-wrap:nowrap | wrap | wrap-reverse;}
nowrap(默认值):不换行。
wrap:换行,第一行在上方。
wrap-reverse:换行,第一行在下面。
.box{flex-flow: flex-direction || flex-wrap;}
.box{justify-content:flex-start | flex-end | center | space-between | space-around}
flex-start(默认值):左对齐
flex-end:右对齐
center:居中
space-between:两端对齐,项目之间的间隔都相等。
space-around:每个项目两侧的间隔相等。所以项目之间的间隔比项目与边框的间隔大一倍。
.box{align-items:flex-start | flex-end | center | baseline | stretch;}
flex-start:交叉轴的起点对齐。
flex-end:交叉轴的终点对齐。
center:交叉轴的中点对齐。
baseline:项目的第一行文字的基线对齐。
stretch:(默认值)如果项目未设置高度或设置为auto,将沾满整个项目的高度。
.box{align-content:flex-start | flex-end | center | space-between | space-around;}
flex-start:交叉轴的起点对齐。
flex-end:交叉轴的终点对齐。
center:交叉轴的中点对齐。
space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
space-around:每根轴线两侧的间距都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
stretch(默认值):轴线占满整个交叉轴。
四、项目属性
以下6个属性设置在项目上。
order
flex-grow
flex-shrink
flex-basis
flex
align-self
.item{
order: integer;
}
.item{
flex-grow: number; /* default 0 */
}
.item{
flex-shrink: number; /* default 1 */
}
.item{
flex-basis: length | auto; /* default auto */
}
.item{
flex: none | [ 'flex-grow' 'flex-shrink'? || 'flex-basis' ]
}
.item{
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}