flex 的核心的概念就是容器和轴。容器包括外层的父容器和内层的子容器,轴包括主轴和交叉轴,可以说 flex 布局的全部特性都构建在这两个概念上。flex 布局涉及到 12 个 CSS 属性(
不含 display: flex
),其中父容器、子容器各 6 个。不过常用的属性只有 4 个,父容器、子容器各 2 个。
容器
容器具有以下的特点:父容器可以统一设置子容器的排列方式,子容器也可以单独设置自身的排列方式,如果两者同时设置,以子容器的设置为准。
有下面六种属性可以设置在容器上,它们分别是:
flex-direction:row | row-reverse | column | column-reverse;
//决定主轴的方向(即项目的排列方向)
flex-wrap:nowrap | wrap | wrap-reverse;
//指定flex元素单行显示还是多行显示。
flex-flow:<flex-direction>|<flex-wrap>;
//flex-direction 和 flex-wrap 的简写形式
justify-content: flex-start | flex-end | center | space-between | space-around;
/* 均匀排列每个元素(主轴)
space-between首个元素放置于起点,末尾元素放置于终点 . . . .
space-around 每个元素周围分配相同的空间 */ . . . .
align-items: stretch | flex-start | flex-end | center | baseline ;
//属性定义项目在交叉轴上如何对齐。
align-content:stretch | flex-start | flex-end | center | space-between|space-around ;
//属性定义弹性容器的侧轴方向上有额外空间时,如何排布每一行。当弹性容器只有一行时无作用。
Flex 项目属性:
有六种属性可运用在 item 项目上:
order:<integer>;
//定义项目在容器中的排列顺序,数值越小,排列越靠前,默认值为 0
flex-basis:<length>;
//分配多余空间之前,项目占据的主轴空间(main size)。默认值为auto,即项目的本来大小。
flex-grow:<number>;
//定义项目的放大比例
flex-shrink:<number>;
// 定义了项目的缩小比例;
flex:none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ];
//flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
align-self: auto | flex-start | flex-end | center | baseline | stretch;
//align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
//默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。