文章中的所有图示代码都放在了github上: 阮一峰flex博客跟学代码
传统的布局解决方案,基于盒模型, 依赖 display, position, float属性来进行布局,有的时候很不方便,实现垂直居中就很不方便。
一. Flex简介
Flex 是 Flexible Box 的缩写,译为弹性布局,用来为盒模型提供最大的灵活性。
任何一个容器都可以使用 Flex 布局
元素设置为Flex布局后,子元素的
float,clear,vertical-align属性将失效
二. 基本概念
采用Flex布局的元素,为Flex容器,它所有的子元素自动成为容器成员,成为Flex成员,(flex item)

一个flex布局存在两根轴,水平横轴,也叫主轴(即图中的 main axis) 和 垂直纵轴 (cross axis)
横轴的开始位置,也就是图中左边框上的点集合, 叫做main start,结束位置,图中右边框的点集合,叫做main end,垂直纵轴的开始位置(上边框的点)叫做cross start,结束位置,下边框的点,叫做cross end,
每一个成员item的水平空间和垂直空间分别为 main size和 cross size
三. 容器属性
接下来的展示demo github项目中的代码为了方便有些属性写在了item成员上,最正确的方式是些在flex容器上。
1. flex-direction
flex-direction属性决定水平横轴的方向(即项目的排列方向)。
它可取以下四个值
row(默认值):主轴为水平方向,起点在左端。row-reverse:主轴为水平方向,起点在右端。column:主轴为垂直方向,起点在上沿。column-reverse:主轴为垂直方向,起点在下沿。

2. flex-wrap属性
默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
它可取三个值
nowrap(默认):不换行wrap:换行,第一行在上方wrap-reverse:换行,第一行在下方
如图我们可以发现,默认的nowrap属性的优先级是高于我们设置的width的。

3. flex-flow
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
4. justify-content属性
justify-content属性定义了项目在水平横轴上的对齐方式
阮老师的博客图示:

属性能取5个值
