一、简要介绍
Flex是2009年w3c提出的一种简洁、快速弹性布局的属性。主要思想是给予容器控制内部元素和宽度的能力。flex概念示意图如下
使用flex布局的容器(flex container),它内部的元素自动成为flex项目(flex item)。容器拥有两根隐形的轴,水平的主轴(main axis),和竖直的交叉轴。主轴开始的位置,即主轴与右边框的交点,称为main start;主轴结束的位置称为main end;交叉轴开始的位置称为cross start;交叉轴结束的位置称为cross end。item按主轴或交叉轴排列,item在主轴方向上占据的宽度称为main size,在交叉轴方向上占据的宽度称为cross size。
需注意使用flex容器内元素,即flex item的float,clear、vertical-align属性将失效。
二、属性总结表
三、属性详述
1.flex-direction
row
(默认值):主轴为水平方向,起点在左端。row-reverse
:主轴为水平方向,起点在右端。column
:主轴为垂直方向,起点在上沿。column-reverse
:主轴为垂直方向,起点在下沿<div id="box">
<div class="inner"></div> <div class="inner"></div> <div class="inner"></div> </div>
#box{ display: flex; flex-direction: row;
} .inner{ width: 100px; height: 100px; background: #abcdef; margin: 10px; }
2.flex-wrap:
- nowrap(默认值):默认不换行。
- wrap:换行,第二行在第一行下面,从左到右
- wrap-reverse:换行,第二行在第一行上面,从左到右;
<div id="box"> <div class="inner"></div> <div class="inner"></div> <div class="inner"></div> </div>
#box{ display: flex; flex-direction: row;
width:500px;
border:1px solid red;
flex-wrap:wrap; //超出换行,如果不超出,则不换行
} .inner{ width: 100px; height: 100px; background: #abcdef; margin: 10px; }
3.flex-flow:是flex-direction和flex-wrap的简写形式,默认是row nowrap
flex-flow:flex-direction|flex-wrap;
.box {
flex-flow: <flex-direction> <flex-wrap>; }
4.justify-content:子元素在主轴对齐的方式
flex-start
(默认值):左对齐flex-end
:右对齐center
: 居中space-between
:两端对齐,项目之间的间隔都相等。space-around
:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
flex-start和flex-end,center这三个都比较简单,主要区分开下面的space-between和space-around;
space-between:两端对齐,
space-around:
5.align-items:交叉轴如何对齐,如果flex-direction:row和row-reverse那么交叉轴就是y轴,如果是column和column-reverse那么交叉轴是y轴
flex-start
:交叉轴的起点对齐。flex-end
:交叉轴的终点对齐。center
:交叉轴的中点对齐。baseline
: 项目的第一行文字的基线对齐。stretch
(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
baseline:以第一个子元素文字的基线对齐
stretch:子元素不设置高度,那么高度将沾满整个父元素
6.align-content:属性定义多根轴线的对齐方式。如果只有一根线,该属性不起作用
flex-start
:与交叉轴的起点对齐。flex-end
:与交叉轴的终点对齐。center
:与交叉轴的中点对齐。space-between
:与交叉轴两端对齐,轴线之间的间隔平均分布。space-around
:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。stretch
(默认值):轴线占满整个交叉轴。