CSS Flexbox 布局详解 —— 学习笔记

阅读时长 9 分钟读完

前言

CSS布局是前端开发过程中的非常基础且关键的内容之一,以往实现复杂布局需要借助多种技术手段,如float, position等。这些手段虽然也能实现布局,但特定场景下会出现很多问题,使得样式表的维护成本大大增加。

而Flexbox布局在2010年提出并逐渐成为W3C推荐的布局方式,其在实现复杂、灵活的布局方面比传统布局方式更简单,更直观,更易于维护和扩展。本文将详细讲解CSS Flexbox布局,涉及相关技术概念、实现方式、语法规则等内容,希望对学习CSS布局的前端开发者提供帮助。

概述

Flexbox布局,也叫弹性布局,采用的是一维布局模式,将容器内部的项目(即flex items)进行布局,从而实现在不同设备分辨率下适应性更强的网页布局效果。在Flexbox布局中,有两种重要的元素:flex container和flex items。

  • flex container:定义布局容器的盒子,在其中完成Flexbox布局
  • flex items:布局容器内的子项,根据Flexbox规则在容器内排列

Flexbox布局特点:

  • 可以实现垂直居中、弹性布局等多个需求。
  • 相对position、float等传统布局方式更加简单,容易实现响应式布局。
  • 将容器内部的项目进行布局,可以避免子元素越界的情况。

实现方式

实现Flexbox布局有两种方法:

  • 通过flex属性设置容器内的子项
  • 通过display属性设置布局容器

两种方法都有各自的特点,但本文将只介绍第二种方法。

语法规则

容器属性

  1. display

设置容器类型,将一个容器声明为Flexbox布局容器:

  1. flex-direction

定义Flexbox主轴的方向,分为4个值,分别是:

  • row:默认值,主轴为水平方向,起点在左端
  • row-reverse:主轴为水平方向,起点在右端
  • column:主轴为垂直方向,起点在上沿
  • column-reverse:主轴为垂直方向,起点在下沿
  1. flex-wrap

指定容器内部flex item是否为单行或者多行。该属性有3个取值:

  • nowrap:默认值,所有flex item在同一行上,超出容器范围部分隐藏。
  • wrap:所有flex item在多行上,第一行在上方。
  • wrap-reverse:所有flex item在多行上,第一行在下方。
  1. justify-content

定义Flexbox主轴上的flex items的对齐方式。该属性有5个取值:

  • flex-start:默认值,flex items 左对齐。
  • flex-end:flex items 右对齐。
  • center:flex items 居中对齐。
  • space-between:flex items 宽度平均分配,flex items 间距相同。
  • space-around:flex items 宽度平均分配,每个flex item 与周围的item距离相等。
  1. align-items

定义Flexbox横轴上的flex items的对齐方式。该属性有5个取值:

  • stretch:默认值,flex items 将被拉伸到适应容器的高度或宽度。
  • flex-start:flex items 顶部对齐。
  • flex-end:flex items 底部对齐。
  • center:flex items 居中对齐。
  • baseline:flex items 基线对齐。
  1. align-content

定义容器内多根轴线的对齐方式。该属性有5个取值:

  • stretch:默认值,轴线占据整个交叉轴。
  • flex-start:轴线顶部对齐。
  • flex-end:轴线底部对齐。
  • center:轴线居中对齐。
  • space-between:轴线平均分配,轴线间距相等。
  • space-around:轴线平均分配,轴线两侧的距离与边框相等。

子项属性

  1. order

子项排列顺序。数值越小,排列越前面,默认为0。

  1. flex-grow

子项放大比例,默认为0。

  1. flex-shrink

子项缩小比例,默认为1。

  1. flex-basis

定义子项占据主轴空间的初始大小,默认为auto。

  1. flex

缩写属性,分别设置flex-grow、flex-shrink、flex-basis。

  1. align-self

定义子项在侧轴上的对齐方式,如容器属性中的align-items。该属性只影响单个子项。该属性有5个取值:

  • auto:默认值。
  • stretch:子项被拉伸以适应容器。
  • flex-start:子项顶部对齐。
  • flex-end:子项底部对齐。
  • center:子项居中对齐。

示例代码

下面是一个基本的Flexbox布局:

-- -------------------- ---- -------
-----------
  -------- -----
  ---------------- -------
  ------------ -------
  ------- ------
  ----------- -----
-

------
  ------ ------
  ------- ------
  ----------- -----
  ------ -----
  ----------- -------
  ------------ ------
  ---------- -----
  ------------- -----
-

-------
  ----------- --------
-

-------
  ----------- --------
-

-------
  ----------- --------
-

-------
  ----------- --------
-

该示例中,首先设置容器为Flexbox布局,然后设置子项在容器中居中对齐。最后,每个子项设置同样的宽高,并在其中填入文本。

布局效果如下图:

总结

Flexbox布局是一种比较新的布局方式,其实现方法简单直接,可读性高、维护性强、布局灵活等优点,使其成为现代Web布局的标配之一。本文对Flexbox布局的相关概念、实现方式、语法规则进行了详细的介绍,并提供了示例代码供读者参考学习。建议开发者在实战中尝试,挖掘更多其它布局场景下的实现方法。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64734292968c7c53b00bec2e

纠错
反馈