flex布局,看这一篇就够了

472 阅读5分钟

是对 最新最详细flex布局-彻底掌握 的总结笔记。 flex 是 Flexible Box 的缩写,即为弹性盒子布局,用于解决元素居中问题,能够自动弹性伸缩,适配不同大小的屏幕和移动端。

flex布局模型

主轴:main axis 开始: main start 结束: main end 主轴长: main size

交叉轴: cross axis 开始: cross start 结束: cross end 交叉轴长: cross size

895abddc0a229f40061b6da672e949f.jpg

应用在flex item上的css属性

flex :flex-grow||flex-shrink||flex-basis的简写

flex-grow :决定flex items如何扩展

flex-basis :设置flex items在main axis方向上的base size

flex-shrink :决定flex items如何收缩

order :决定flex items的排布顺序

align-self :可以通过此属性覆盖flex container设置的align-items

应用在flex container上的css属性

flex-flow : flex-direction||flex-wrap的简写

flex-direction :决定主轴方向

flex-wrap :决定flex container是单行还是多行

justify-content :决定flex item在main axis上的对齐方式

align-items :决定flex items在cross axis上的对齐方式

align-content :决定多行flex items在cross axis上的对齐方式

flex各个属性详细解释

flex-direction 决定主轴方向

flex-items默认沿着主轴从main start开始往main end方向排布
  • row(默认):主轴从左到右
  • row-reverse:主轴从右到左
  • column:主轴从上到下
  • column-reverse:主轴从下到上

justify-content 决定flex item在main axis上的对齐方式

  • flex-start(默认):与main start对齐

image.png

  • flex-end:与main end对齐

1648360059(1).png

  • center:居中对齐

image.png

  • space-between:flex items之间距离相等,与main start,main end两端对齐

image.png

  • space-evenly:flex items之间距离相等,flex items与main start,main end之间距离等于flex items之间的距离

image.png

  • space-around:flex items之间距离相等,flex items与main start,main end之间距离等于flex items之间的距离的一半

image.png

align-items 决定flex items在cross axis上的对齐方式

对单行多行都有效
  • normal:弹性布局中,效果和stretch一样
  • stretch:当flex items在cross axis 方向的size为auto时,会自动拉伸至填充flex container(高度=container高度)

image.png

  • flex-start:与cross start对齐

image.png

  • flex-end:与cross end对齐

image.png

  • center:居中对齐

image.png

  • baseline:与基准线对齐(第一行文本基线)

image.png

flex-wrap 决定flex container是单行还是多行

  • nowrap(默认):单行(放不下时收缩item,不换行)

image.png

image.png

  • wrap:多行

image.png

  • wrap-reverse:多行(对比wrap,cross start与cross end相反)

image.png

flex-flow 是flex-direction||flex-wrap的简写 例:flex-flow:row-reverse wrap; align-content 决定多行flex items在cross axis上的对齐方式(对单行无效果) 例:当flex items为单行时设置align-content: flex-end;效果如下

image.png 由此可知align-content对单行无效果

  • stretch(默认值):与align-items的stretch类似

image.png

  • flex-start:与cross start对齐

image.png

  • flex-end:与cross end对齐

image.png

  • center:居中对齐

image.png

  • space-between:flex items之间距离相等,与cross start,cross end两端对齐

image.png

  • space-around:flex items之间距离相等,flex items与cross start,cross end之间距离是flex items之间距离的一半

image.png

  • space-evenly:flex items之间距离相等,flex items与cross start,cross end之间距离等于items之间距离

image.png

order 决定flex items的排布顺序

可以设置任意整数(正整数,负整数,0),值越小越排在前面,默认值为0

当设置item5的order为-1时:

image.png

align-self 可以通过此属性覆盖flex container设置的align-items

以下效果和align-items一致
  • auto(默认值):
  • stretch
  • flex-start
  • flex-end
  • center
  • baseline 当align-items: center;时设置item5align-self: flex-end; image.png

flex-grow 决定flex items如何扩展

可以设置任意非负数字(正小数,正整数,0),默认值是0
当flex container在main axis方向上有剩余时,flex-grow属性才会有效
flex items扩展后的最终size不能超过max-width/max-height
计算公式:
1.计算剩余空间:容器大小-所有项目的总大小
2.计算将多少剩余空间拿来分配:剩余空间 * ( 所有项目的flex-grow之和 >= 1 ? 1 : 所有项目的flex-grow之和 )
3.计算每个项目分配到多少剩余空间:要分配的剩余空间 * ( 单个项目flex-grow / 所有项目的flex-grow之和 )

flex-shrink :决定flex items如何收缩

可以设置任意非负数字(正小数,正整数,0),默认值是0
当flex items在main axis方向上超过了flex container的size,flex-shrink才有效
flex items收缩后的最终size不能小于min-width/min-height
计算公式
1.计算超出空间:所有项目的总大小-容器大小
2.计算超出空间中多少用来压缩:超出空间 * ( 所有项目的flex-shrink之和 >= 1 ? 1 : 所有项目的flex-shrink之和 )
3.计算每个项目缩小多少空间:要压缩的空间 * ( 单个项目flex-shrink / 所有项目的flex-shrink之和 )

flex-basis 设置flex items在main axis方向上的base size

  • auto(默认值)
  • 具体的宽度数值
决定flex items最终base size的因素,从优先级高到低
max-width/max-height/min-width/min-height
flex-basis
width/height
内容本身的size

flex :flex-grow||flex-shrink||flex-basis的简写

flex可以指定1个,2个或3个值

单值语法:值必须为以下其中之一:

一个无单位数:它会被当做flex-grow的值
一个有效的宽度值:它会被当做flex-basis的值
关键字 none,auto或initial

双值语法:第一个值必须为一个无单位数,并且它会被当做flex-grow的值,第二个值必须为以下之一:

一个无单位数:它会被当做flex-shrink的值
一个有效的宽度值:它会被当做flex-basis的值

三值语法:

第一个值必须为一个无单位数,被当做flex-grow的值
第二个值必须为一个无单位数,被当做flex-shrink的值
第三个值必须为一个有效的宽度值:它会被当做flex-basis的值