display: flex 布局

331 阅读4分钟

现在布局大多用display,平常也使用,这次过一遍。

基本概念

Flex是FlexBox的缩写,意为“弹性盒子”

采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

(盗图一张)

容器默认存在两根轴:水平的主轴(mainaxis)和垂直的交叉轴(crossaxis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

flex-direction

这将建立主轴,从而定义Flex项目放置在Flex容器中的方向,将flex项目视为主要布置在水平行或垂直列中。

flex-direction: row | row-reverse | column | column-reverse;

flex-wrap

默认情况下,flex项目都会尝试适合一行。您可以更改它并允许项目根据需要使用此属性进行换行。

flex-wrap: nowrap | wrap | wrap-reverse;

flex-flow

这是flex-direction和flex-wrap属性的简写,它们共同定义了flex容器的主轴和交叉轴。默认值为rownowrap,就不演示了。

flex-flow: <‘flex-direction’> || <‘flex-wrap’>

justify-content

这定义了沿主轴的对齐。当线路上的所有弹性项目都不灵活,或者灵活但已达到其最大尺寸时,它有助于分配剩余的额外空闲空间。当它们溢出线时,它还对物品的对齐施加一些控制。

justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;

align-items

这定义了如何沿当前行的横轴布置弹性项目的默认行为。可以将其视为justify-content横轴的版本(垂直于主轴)。

align-items: stretch | flex-start | flex-end | center | baseline;

align-content

当横轴上有额外空间时,这会对齐柔性容器的线条,类似于主轴justify-content内各个项目的对齐方式。

注意:当只有一行弹性项目时,此属性不起作用。

order、flex-grow、flex-shrink、flex-basis、align-self (排序、放大比例、缩小比例、固定大小、额外对齐)

  1. order:默认情况下(0),Flex项目按源顺序排列,数值越小,排列越靠前。但是,该order属性控制它们在Flex容器中的显示顺序。

  2. flex-grow: 定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

如果所有项目都flex-grow设置为1,则容器中的剩余空间将平均分配给所有子项。如果其中一个项目的值为2,则剩余空间占用的空间是其他项目的两倍(或者至少会尝试)。

order属性:7是顺数第一,因为order默认是0,比任何修改过的order值小。

flex-grow属性: 默认都是0,会平均分配给flex里的所有项目,在上图中的justify-content我设置了10个项目,刚好平均,即使设置flex-grow值也不生效。现在是7,并没有填满flex空间。这里可以看见,多余的空间分别由两个设置了两个flex-grow的项目分别放大比例(7&1)。

  1. flex-shrink: 定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

负数无效

  1. flex-basis: 定义了在分配多余空间之前,项目占据的主轴空间(mainsize)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

  1. flex: 这是速记flex-grow,flex-shrink和flex-basis组合。第二个和第三个参数(flex-shrink和flex-basis)是可选的。默认是0 1 auto。

     flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
    

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

6.align-self: 这允许align-items为各个弹性项覆盖默认对齐(或指定的对齐)。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

align-self: auto | flex-start | flex-end | center | baseline | stretch;

找时间也过一次Grid。

参考: css-tricks.com/snippets/cs…