Flex布局有两个概念,容器(父元素)与项目(子元素)
如下,ul就是容器/父元素,li就是项目/子元素。要使用flex布局,最重要一点,要先将容器的display属性置为flex。当父元素是行内元素时,则用inline-flex
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
一、容器有两大轴,六大属性
两大轴:主轴,交叉轴(类似于坐标轴x轴和y轴)
六大属性:
flex-direction : row | row-reverse | column | column-reverse;
flex-direction用于定义容器的主轴的方向,分别是 行 | 行反序 | 列 | 列反序
flex-wrap:nowrap | wrap | wrap-reverse;
默认情况下,项目都排在一根轴线上,flex-wrap用于定义当一条轴线排不下所有项目的时候,如何换行,分别是不换行/换行,第一行在上方/换行,第一行在下方
flex-flow : <flex-direction> || <flex-wrap>
flex-flow 分别是flex-direction和flex-wrap两个属性的简写,默认值为 row nowrap
justify-content: flex-start | flex-end | center | space-between | space-around;
justify-content用于定义了项目在主轴上的对齐方式。分别是左对齐、右对齐、居中、两端对齐、每个项目间隔相等。
align-items: flex-start | flex-end | center | baseline | stretch;
align-items用于定义项目在交叉轴上如何对齐。分别是交叉轴的起点对齐、终点对齐、中点对齐、项目的第一行文字的基线对齐、项目高度撑满容器高度
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
align-content用于定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
二、项目有两大空间,六大属性
两大空间:主轴空间,交叉轴空间
六大属性:
order: <integer>;
order用于定义项目的排列顺序。数值越小,排列越靠前,默认为0。
flex-grow: <number>;
flex-grow用于定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
flex-shrink: <number>;
flex-shrink用于定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
flex-basis: <length> | auto;
flex-basis用于定义了项目占据的固定空间,如350px。它的默认值为auto,即项目的本来大小。
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
align-self: auto | flex-start | flex-end | center | baseline | stretch;
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto。
总结:容器和项目的六大属性,存在复合属性。容器的属性可简化为flex-flow、justify-content、align-items、align-content
项目的属性可简化为order、flex、align-self。
只要重点记住上面的七个属性的使用方法即可。