CSS Grid 新属性与固定折叠布局实现

阅读时长 8 分钟读完

前言

自 2017 年 CSS Grid 推出以来,它带来的变革深刻影响着前端开发的方方面面。众所周知,CSS Grid 在实现布局方面提供了极大的便利性,而最新推出的一些属性则使得它的实用性更加广泛。在本文中,我将介绍 CSS Grid 新属性,并结合一个固定折叠布局的示例,以帮助读者更好的学习和理解。

CSS Grid 新属性

grid-template-rows 与 grid-template-columns 属性

在实现网格布局时,我们经常会使用到 grid-template-rows 和 grid-template-columns 这两个属性。它们分别用于定义网格容器的行和列,类似于下面的代码:

这段代码将会生成一个有 3 行,2 列的网格,其中每一行和每一列宽度相等。

然而,在最近的更新中,这两个属性被赋予了更加灵活的能力,我们可以使用它们来定义一个固定数量的网格,而我们不再需要使用 repeat() 函数。例如,你可以像下面这样进行定义:

这段代码将会生成一个有 3 行,2 列的网格,第一行高度为 50 像素,第二行高度为 100 像素,第三行高度为 150 像素。第一列占据整个宽度的 30%,第二列占据剩余的 70%。

grid-template-areas 属性

grid-template-areas 属性是 CSS Grid 中另一个十分强大的网格属性。它可以按照网格区域的方式来定义布局,例如下面的代码:

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

这段代码将会生成一个由 3 行,2 列组成的网格布局,其中的每一个空白区域都可以被定义为一个区域,并通过区域的名称来进行命名。我们可以使用 auto 来自动计算行或列的大小,或者使用 1fr 将剩余空间等分成两份。

grid-auto-flow 属性

在网格布局中,我们通常会在网格容器中定义一定数量的行和列,而这些行和列通常只占据了部分空间。当我们在这些行和列中添加新的网格项时,它们会被放置在哪里?这便涉及到了 grid-auto-flow 属性,它定义了如何放置网格项。

这段代码将会在网格容器中定义 3 列,然后将网格项从上到下,从左到右依次排列。如果我们将 grid-auto-flow 的值设置为 column,则会使用类似的方式在列上排列网格项。

grid-gap 属性

最后一个要介绍的新属性是 grid-gap,它用于定义网格项之间的空隙。例如:

这段代码将会在每个网格项之间定义一个 10 像素的间距。

固定折叠布局示例

布局需求

下面是一个视觉效果的图片,它展示了一个常见的固定折叠布局的实现方式:

具体来说,布局如下:

  • 左侧栏宽度为 200 像素,上下固定在 50 像素的高度上。
  • 右侧栏占据剩余宽度,上部分高度为 75 像素,下部分高度固定为 75% 的高度。
  • 顶部导航栏固定在顶部,高度为 50 像素。
  • 页面自然下滑时,右侧下部在到达底部之前不会被滚动,直至页面内容溢出。

HTML 结构

首先,我们需要写出静态的 HTML 结构:

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

样式实现

接下来,我们需要编写样式来实现固定折叠布局:

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

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

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

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

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

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

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

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

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

这段 CSS 代码划分为多个部分:

  • 容器样式:使用了 CSS Grid 定义了容器的行和列,同时使用 grid-template-areas 属性来定义每一个子元素在容器中的位置。
  • header 和 footer 样式:定义了页面头部和底部的背景颜色、文字颜色、居中对齐等样式。
  • nav 样式:定义了导航栏的背景颜色、文字颜色等样式。
  • main 样式:该部分展示了如何在 CSS Grid 中包含一个另一个 grid,右侧栏也在这里定义。
  • left-panel 样式:定义了左侧栏的背景颜色、文字颜色、居中对齐等样式。
  • right-panel 样式:定义了右侧栏的行高和列宽,并设置了一个 10 像素的网格间距。
  • top 和 bottom 样式:定义了右侧栏顶部和底部的背景颜色和文字颜色等样式,注意右侧底部需要设置 overflow-y 和 max-height 属性,并使用 calc() 函数计算高度。
  • 中间的 ".main" 样式是目前无用的,我们将来可能会用到。

总结

本文介绍了 CSS Grid 的新属性,包括 grid-template-rows、grid-template-columns、grid-template-areas、grid-auto-flow 和 grid-gap。同时,我们使用了一个固定折叠布局示例来演示如何使用 CSS Grid 实现这种布局。该示例涉及到了多个特定的样式属性与计算方式,是一个相对完整的实现方式。希望本文能够帮助读者更好地掌握 CSS Grid 的使用方法,以及实现常见网页布局的技巧。

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

纠错
反馈