flex弹性布局

一、容器属性

1. display:是否采用flex布局
  • flex:指定容器采用flex布局,容器元素默认为块级元素
  • inline-flex:指定容器采用flex布局,容器元素为行内元素
2. flex-direction:主轴的方向,及项目的排列方向
  • row(默认值):主轴为水平方向,起点在左端
  • row-reverse:主轴为水平方向,起点在右端
  • column:主轴为垂直方向,起点在上沿
  • column-reverse:主轴为垂直方向,起点在下沿
3. flex-wrap:项目如何换行
  • nowrap(默认):不换行
  • wrap:换行,第一行在上方
  • wrap-reverse:换行,第一行在下方
4. flex-flow:flex-direction,flex-wrap属性的简写
  • 例如:flex-flow: row wrap;
5. justify-content:主轴上的对齐方式
  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍
  • space-evenly:主轴所有间隔相等。项目之间、项目与边框之间的间隔都相等
6. align-items:项目在交叉轴上的对齐方式
  • flex-start:交叉轴的起点对齐
  • flex-end:交叉轴的终点对齐
  • center:交叉轴的中点对齐
  • baseline: 项目的第一行文字的基线对齐
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度
  • normal:在flex布局中,效果和stretch一样
7. align-content:决定多行的flex-items在交叉轴上的对齐方式,即多根轴线的对齐方式(如果项目只有一根轴线,该属性不起作用)
  • flex-start:与交叉轴的起点对齐
  • flex-end:与交叉轴的终点对齐
  • center:与交叉轴的中点对齐
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍
  • space-evenly:主轴所有间隔相等。项目之间、项目与边框之间的间隔都相等
  • stretch(默认值):轴线占满整个交叉轴
8. align-items 和 align-content 区别
  • 都是设置侧轴(交叉轴,非主轴)上的对齐方式
  • align-items适用于单行情况下,只有上对齐、下对齐、居中和拉伸
  • align-content适用于换行(多行)的情况下(单行情况无效),可以设置上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性
  • 总结就是单行找align-items,多行找align-content

二、项目属性

1. order:项目的排列顺序
  • order数值越小,排列越靠前,默认为0,-1比0小
2. flex-grow:项目的放大比例
  • 默认为0,即如果存在剩余空间也不放大,可以设置任意非负数字(正小数、正整数、0)。当flex-container在max axis方向上有剩余size时,flex-grow属性才会生效。flex-items扩展后的最终size不能超过max-width/max-height
  • 如果所有flex-items的flex-grow总和sum超过1,每个flex-items扩展的size为:flex-container的剩余size * flex-grow / sum
  • 如果所有flex-items的flex-grow总和sum不超过1,每个flex-items扩展的size为:flex-container的剩余size * flex-grow
3. flex-shrink:项目的缩小比例
  • 默认为1,即如果空间不足,将该项目缩小,可以设置任意非负数字(正小数、正整数、0)。当flex-items在max axis方向上超过了flex-container的size,flex-shrink属性才会生效。flex-items收缩后的最终size不能小于min-width/min-height
  • 如果所有flex-items的flex-shrink总和sum超过1,每个flex-items收缩的size为:flex-items超出flex-container的size * flex-shrink / sum
  • 如果所有flex-items的flex-shrink总和sum不超过1,每个flex-items收缩的size为:flex-items超出flex-container的size * flex-shrink
4. flex-basis:在分配多余空间之前,项目占据的主轴空间
  • 浏览器根据这个属性,计算主轴是否有多余空间,默认值为auto,即项目本来的大小
  • 决定flex-items最终base size的因素,从优先级高到低:max-width/max-height/min-width/min-height -> flex-basis -> width/height -> 内容本身的size
5. flex:flex-grow,flex-shrink,flex-basis属性的简写
  • 默认值为0 1 auto,后两个属性可选
  • 该属性有两个快捷值:auto -> 1 1 auto,none -> 0 0 auto
  • 优先使用该属性,而不是单独写三个分离的属性,因为浏览器会推算相关值
6. align-self:单个项目与其他项目不一样的对齐方式,可覆盖align-items属性
  • 默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
  • 该属性可能取6个值,除了auto,其他都与align-items属性完全一致

参考文档:阮一峰老师的flex布局教程


flex弹性布局
https://hanqinu.github.io/2022/02/14/flex弹性布局/
作者
寒沁
发布于
2022年2月14日
许可协议