flex布局的小细节

159 阅读2分钟

关于flex布局的基础教程,请点击Flex 布局教程:语法篇 - 阮一峰的网络日志 (ruanyifeng.com),下面我来讲解flex布局可能出现的奇奇怪怪的问题

与容器相关

align-content也可以控制一根轴线

  • 默认使用align-content是没有效果的
  • 只有容器设置flex-warpwarpwarp-reverse才可以生效 这里我使用了place-content,可以快速水平垂直居中
place-content:<align-content> <jusitfy-content>
place-content:center 等于 align-content:center 与 jusitfy-content:center

4.png

align-items也可以控制多根轴线

7.png

align-items与align-content的区别

控制单根轴线

  • align-items可以在容器不设置flex-warp时控制单根轴线交叉轴的对齐方式
  • align-content须设置flex-warpwarpwarp-reverse才可以控制单根轴线交叉轴的对齐

控制多根轴线

  • align-items默认是控制单根轴线的,所以会把所有轴线看成一根轴线进行对齐 10.png

  • align-content通常定义多根轴线交叉轴对齐,所以会把每一根轴线看做成一根项目

14.png

与项目相关

项目子元素不能撑起项目高度

  • 项目不设置宽度,则会由子元素撑开
  • 项目不设置高度,因为align-items默认为stretch,所以会拉伸 21.png

项目不进行默认收缩

大家都知道如果不设置flex-warp:warpflex-shrink:0,默认项目超过显示会进行一比一收缩的,如图

17.png

但是一种情况不会进行收缩,就是项目收缩后又被子元素撑开,如图

25.png 设置项目overflow:hidden解决问题

26.png

flex-shrink 计算方法

flex-shrink相加小于1

当flex-shrink相加小于1时,每个项目放缩的宽度 = 超出的宽度 * 对应项目的flex-shrink

29.png

flex-shrink相加大于1

当flex-shrink相加大于1时,每个项目放缩的宽度 = 超出的宽度 * 对应项目的flex-shrink权重

31.png

flex-grow 计算方法

flex-grow 相加小于1

当 flex-grow 相加小于1,每个项目放大的宽度 = 剩余的宽度 * 对应项目的flex-glow

34.png

flex-grow 相加大于1

当 flex-grow 相加大于1,每个项目放大的宽度 = 剩余的宽度 * 对应项目的flex-glow权重

35.png

不能加的属性

  • 当盒子使用flex布局时,项目的floatclearvertical-align属性将失效,

  • 项目设置position:absolutefixed会脱离flex布局

39.png

margin:auto依然有效

marginauto会平分对应剩余的空间 44.png

  • margin:0 auto平分水平剩余空间
  • margin:auto 0 平分垂直剩余空间

49.png

如果有错请大佬指出,这些都是我的平时总结