Flexbox 学习笔记(一)

阅读时长 8 分钟读完

引言

在前端开发中,页面布局是一个很重要的方面。传统的布局方式如浮动、定位等会带来一些问题,如不易控制元素间的间距、浮动高度问题等。而使用 Flexbox 布局则可以有效地解决这些问题,因此 Flexbox 在前端开发中备受青睐。本篇文章将简单介绍 Flexbox 布局并提供一些示例代码。

Flexbox 概念

Flexbox 是一个 CSS3 强大的布局模式,用于设计灵活的响应式布局。它可以完全改变 HTML 元素在容器中的布局方式,无论容器的大小是否变化。

Flexbox 能够:

  1. 让容器自适应其内部元素的大小
  2. 给元素之间自动留出必要的空隙
  3. 使元素宽度自适应其容器
  4. 让元素在空间不足时自动缩小

Flexbox 语法

Flexbox 的元素有两个主要角色:容器和项目。容器是一个包含项目的父元素,而项目则是容器直接子元素。

下面是一个典型的 Flexbox 布局容器的样式:

Flexbox 属性

在 Flexbox 布局中,有很多 CSS 属性被用来控制容器和项目的布局。下面是一些常用的属性:

容器属性

  • display: 定义容器为 Flexbox。常用取值为 flexinline-flex,默认值为 flex
  • flex-direction: 定义项目在主轴上的排列方式。常用取值为 row(横向排列)、column(纵向排列)、row-reverse(反向横向排列)和 column-reverse(反向纵向排列),默认值为 row
  • flex-wrap: 定义当一行排不下所有项目时,项目是否换到下一行。常用取值为 nowrap(不换行)和 wrap(换行),默认值为 nowrap
  • justify-content: 定义项目在主轴上的对齐方式。常用取值为 flex-start(靠左对齐)、flex-end(靠右对齐)、center(居中对齐)、space-between(两端对齐,项目间隔平均分布)、space-around(两端对齐,项目间隔等分),默认值为 flex-start
  • align-items: 定义项目在交叉轴上的对齐方式。常用取值为 flex-start(靠上对齐)、flex-end(靠下对齐)、center(居中对齐)、baseline(基线对齐)、stretch(拉伸对齐,项目占据整个容器高度),默认值为 stretch
  • align-content: 定义多根轴线的对齐方式。常用取值为 stretch(拉伸对齐,占据整个容器高度)、flex-start(靠上对齐)、flex-end(靠下对齐)、center(居中对齐)、space-between(两端对齐,轴线间隔平均分布)和 space-around(两端对齐,轴线间隔等分)。

项目属性

  • order: 定义项目的排列顺序。数值越小,排列越靠前。
  • flex-grow: 定义项目的放大比例。如果容器空间多余,则按照项目的放大比例分配空间。默认值为 0,即不放大。
  • flex-shrink: 定义项目的缩小比例。如果容器空间不足,则按照项目的缩小比例缩小。默认值为 1,即自动缩小。
  • flex-basis: 定义项目的基准尺寸。常用取值为 auto(根据内容自行确定尺寸)和 100px(固定尺寸)。
  • flex: 等价于 flex-growflex-shrinkflex-basis 的缩写。常用取值为 auto1(默认值)和 none
  • align-self: 定义项目在交叉轴上的对齐方式。常用取值与 align-items 相同,但是可以单独为一个项目设定对齐方式。默认值为 auto,即继承父元素。

示例代码

下面是一些使用 Flexbox 布局的示例代码:

1. 等分宽度的导航菜单

HTML 代码:

CSS 代码:

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

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

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

2. 自适应 flexbox 卡片

HTML 代码:

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

CSS 代码:

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

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

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

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

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

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

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

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

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

结论

Flexbox 作为一种先进的布局模式,在前端开发中越来越受到青睐。借助各种属性,我们可以轻松地实现预期的页面布局。本篇文章简要介绍了 Flexbox 的语法和常见属性,并提供了一些使用 Flexbox 布局的示例代码。对于想要深入学习 Flexbox 布局的前端开发者来说,本篇文章将是一个不错的起点。

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

纠错
反馈