CSS学习笔记-Flex布局

139 阅读2分钟

简介

Flexbox 是一种一维的弹性盒布局模型,在布局时基于主轴和交叉轴,为为容器中的子元素提供了更好的对齐、排序和空间分配机制。其设计用于解决传统布局技术(如浮动和定位)难以处理的一些布局挑战,特别是在响应式设计方面。

特点

  • 弹性伸缩:Flexbox 允许子元素根据可用空间伸缩,以达到最佳的布局效果。
  • 易用性:通过简单的属性设置即可实现复杂的布局。
  • 响应式:易于创建响应式设计,适应不同屏幕尺寸。
  • 兼容性:现代浏览器广泛支持 Flexbox,包括 IE10+。

基本概念

  • 容器:使用 display: flex 或 display: inline-flex 的元素称为 Flex 容器。
  • 项目:Flex 容器内的直接子元素称为 Flex 项目。
  • 主轴:默认情况下,Flex 项目沿水平方向排列,这条轴称为主轴。
  • 交叉轴:与主轴垂直的方向称为交叉轴。
  • 正向/反向:主轴的方向可以是正向(默认)或反向。

使用场景

  • 响应式布局:创建可以随着屏幕尺寸变化而调整的布局。
  • 对齐和排序:解决传统布局技术难以处理的对齐和排序问题。
  • 复杂布局:适用于需要灵活控制的复杂页面布局设计。
  • 导航菜单:创建水平或垂直的导航菜单。
  • 卡片布局:创建一系列均匀分布的卡片或块。

属性

  • 主轴 flex-direction: row(默认)row-reversecolumncolumn-reverse;
    交叉轴始终垂直于主轴。
  • 是否换行 flex-wrap: nowrap(默认)wrapwrap-reverse;
  • 简写属性 flex-flow: flex-direction, flex-wrap;
  • 主轴方向对齐方式 justify-content: flex-start(默认)flex-endcenterspace-betweenspace-aroundspace-evenly
  • 交叉轴方向对齐方式 align-items: stretch(默认)flex-startflex-endcenterbaseline
  • 多行时主轴之间的对齐方式 align-content: stretch(默认)flex-startflex-endcenterspace-betweenspace-aroundspace-evenly
    设置属性flex-wrap: nowrap时该属性无效。
  • 单个子项的交叉轴方向对齐方式 align-self: auto(默认)stretchflex-startflex-endcenterbaseline
  • 增长系数 flex-grow: <number [0, ∞]>   默认值:0;
  • 收缩系数 flex-shrink: <number [0, ∞]>   默认值:1;
  • 主轴方向初始大小 flex-basis: <'width'>   默认值:auto;
    flex元素会以flex-basis为基础进行增长和收缩,未显式设置时会使用元素的实际宽度。
  • 简写属性 flex: flex-grow, flex-shrink, flex-basis;
    initial对应值flex: 0 1 autoauto对应值flex: 1 1 autonone对应值flex: 0 0 auto
    flex-grow省略时默认值为1flex-shrink省略时默认值为1flex-basis省略时默认值为0;例如flex: 2对应值为flex: 2 1 0
  • 显示顺序 order: <number>   默认值:0;
  • 行间隔 row-gap: <length>   默认值:0;
  • 列间隔 column-gap: <length>   默认值:0;
  • 简写属性 gap: row-gap, column-gap;