布局的传统解决方案,基于盒模型,依赖 display 属性 + position 属性 +float 属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。
2009 年,W3C 提出了一种新的方案 ——Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

#flex 布局的原理

  • Flex 是 Flexible Box 的缩写,意为 “弹性布局” ,用来为盒状模型提供最大的灵活性。

  • 任何一个容器都可以指定为 Flex 布局。

  • 当我们为父盒子设为 flex 布局后,子元素的 float、clear 和 vertical-align 属性将失效。

  • 名字或叫法:伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex 布局。

  • 采用 flex 布局的元素称为 flex 容器(flex container),它的所有子元素自动成为容器成员,称为 flex 项目。

  • 子容器可以横向排列也可以纵向排列。

总结 flex 布局原理:就是通过给父盒子添加 flex 属性,来控制子盒子的位置和排列方式。

#Flex 布局常见属性

  • flex-direction 设置主轴的方向
  • justify-content 设置主轴上的子元素排列方式
  • flex-wrap 设置子元素是否换行
  • align-content 设置侧轴上的子元素排列方式(多行)
  • align-items 设置侧轴上的子元素排列方式(单行)
  • flex-flow 复合属性

#flex-direction 设置主轴的方向

#主轴与侧轴:

在 flex 布局中,是分为主轴和侧轴两个方向,同样的叫法有:行和列、x 轴和 y 轴

  • 默认主轴方向就是 x 轴方向,水平向右

  • 默认侧轴方向就是 y 轴方向,垂直向下

#属性值

flex-direction 属性决定主轴的方向(即项目的排列方向)

主轴和侧轴是会变化的,就看 flex-direction 设置谁为主轴,剩下的就是侧轴,而我们的子元素是跟着主轴来排列的。

属性值 说明
row 默认值 从左到右
row-reverse 从右到左
column 从上到下
column-reverse 从下到上

#justify-content 设置主轴上的子元素排列方式

该属性定义了项目在主轴上的对齐方式

使用这个属性之前一定要确定好主轴是哪个方向

属性值 说明
flex-start 默认值 从头部开始,如果主轴是 x 轴则从左到右
flex-end 从尾部开始排列
center 在主轴居中对齐(如果主轴是 x 轴则水平居中)
space-around 平分剩余空间
space-between 先两边帖边再平分剩余空间(重要)

#flex-wrap 设置子元素是否换行

  • 默认情况下,项目都排在一条线(又称 “轴线”)上。flex-wrap 属性定义,flex 布局中默认是不换行的。
属性值 说明
nowrap 默认值,不换行
wrap 换行

#align-items 设置侧轴上的子元素排列方式(单行)

  • 该属性是控制子项在侧轴(默认是 Y 轴)上的排列方式,在子项为单行的时候使用。
属性值 说明
flex-start 默认值 从上向下
flex-end 从下向上
center 挤在一起居中(垂直居中)
stretch 拉伸(子元素不能设置高度,否则无用)

#align-content 设置侧轴上的子元素排列方式(多行)

  • 设置子项在侧轴上的排列方式,并且只能用于子项出现换行的情况(多行),在单行下是没有效果的。
属性值 说明
flex-start 默认值 在侧轴的上部开始排列
flex-end 在侧轴的下部开始排列
center 在侧轴居中排列
space-around 子项在侧轴平分剩余空间
space-between 子项在侧轴先分布两头两个元素,其它元素平分中间剩余空间
stretch 设置子项元素高度平分父元素高度

#flex-flow 复合属性

  • flex-flow 是复合属性,相当于同时设置了 flex-direction 和 flex-warp

    • flex-flow: column wrap;

    • 第一个值为 flex-direction 的值

    • 第二个值为 flex-wrap 的值

上面这些并不是 flex 中所有的属性,但使用以上这些基本上可以满足日常中所有的排版场景。

阅读次数 1081