Flex布局,以及应用

132 阅读2分钟

Flex布局

flex布局是一个一维布局,存在一个主轴,一个垂直的交叉轴。

弹性容器有display-flex块级弹性容器display:inline-flex行内弹性容器两种方式,外层盒子称为容器,内层盒子称为项目。

设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

弹性容器的属性有

flex-direction:( row(水平) | row-reverse | column | column-reverse)用来设置弹性容器的主轴方向(排列方向)

flex-wrap:( nowrap | wrap |wrap-reverse第一行在下面 )设置弹性元素在主轴上是否自动换行

justify-content:(flex-start|flex-end|center|space-between/around空白空间分配在项目间/分配在项目左右)主轴上的对齐方式

align-items:(flex-start|flex-end|center|baseline文字基线对齐 stretch拉伸撑满侧轴)侧轴上对齐方式

align-content:(flex-start|flex-end|center|space-between/around空白空间分配在项目间/分配在项目左右|stretch)多行时的对齐方式

弹性元素的属性有

order:项目的排列顺序,数值小,排列靠前。默认0

flex-grow:项目的放大比例;默认0。相当于百分比分配空间,每个人占总空间的几份

flex-shrink:项目的缩小比例;默认1。空间不足时,shrink越大越缩小。

flex-basis:设置弹性元素宽度;auto|数字。设置宽度,根据这个属性计算是否存在多余空间。

align-self:单个项目设置侧轴上对其方式(覆盖align-items)。默认:auto(继承父元素的align-items),无父元素等同于stretch

默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

简写属性:

容器简写属性:flex-flow:( || )默认值:row nowrap

项目简写属性:flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] 默认:0 1 auto。

auto( 1 1 auto )、none( 0 0 auto )、1( 1 1 0% )

计算逻辑:

先计算basis,得到剩余的空间大小

剩余空间为正数:通过grow计算剩余空间给所有元素分配的大小(按比例分配)

剩余空间为负数:通过shrink计算剩余空间给所有元素需要缩小的大小(按比例分配)

flex布局实际布局:www.ruanyifeng.com/blog/2015/0…

Q&A:

flex:1的实现原理?

flex:1 => flex: 1 1 0%

先计算basis,得到剩余的空间大小

剩余空间为正数:通过grow计算剩余空间给所有元素分配的大小(按比例分配)

剩余空间为负数:通过shrink计算剩余空间给所有元素需要缩小的大小(按比例分配)

子元素的basis值:0

剩余空间 = 容器宽度

子元素都是flex:1

所有元素按比例分配,所以实现了平均分配。