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

前言

自 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


猜你喜欢

  • 如何在 ECMAScript 2015 中使用 for-of 循环

    如何在 ECMAScript 2015 中使用 for-of 循环 在 ECMAScript 2015 (ES6) 中,引入了一种新的循环语句 for-of 循环。

    1 年前
  • Redis 中的 LRU 算法及其实现原理

    在数据库系统中,常常会面临内存与磁盘之间的数据交换与管理。LRU 算法(Least Recently Used)是一种常用的缓存淘汰策略,通过“最近最少使用”的原则,来保证缓存的命中率。

    1 年前
  • 自己动手实现 Redux-Saga

    Redux-Saga 是 Redux 中非常流行的解决方案之一,它可以让我们更好地管理应用程序中的副作用,如异步代码、时间延迟等。本文将介绍自己动手实现 Redux-Saga 的详细过程,并提供示例代...

    1 年前
  • ECMAScript 2017 中的标量类型 BigInt 的优势和不足

    ##ECMAScript 2017 中的标量类型 BigInt 的优势和不足 ECMAScript 2017 引入了所有全新的标量类型 BigInt,它可以存储任意精度的整数。

    1 年前
  • Material Design 中使用 FloatingActionButton 实现悬浮按钮效果

    摘要 悬浮按钮 (Floating Action Button, FAB) 是 Material Design 中的一个关键组件,作为一个特殊按钮,它可用于执行界面中的主要操作。

    1 年前
  • ECMAScript 2020 中的私有方法及其实际应用场景

    在早期的 JavaScript 版本中,所有的方法都是公有的,即可供外部访问调用。但是随着 JavaScript 应用场景的不断拓宽,我们很多时候需要将一些方法封装起来,只在内部使用,这就是私有方法所...

    1 年前
  • PM2 实现集群管理的方法

    PM2 实现集群管理的方法 PM2 是一种现代式的 Node.js 进程管理器,具有快速、鲁棒和易于使用等特点。它可以帮助我们轻松地管理和监控多个 Node.js 进程,并提供了一些非常实用的功能,例...

    1 年前
  • 使用 TypeScript 进行 Koa 框架开发的技巧和经验

    在前端开发中,Koa 框架已经越来越受欢迎。它是一个轻量级的 Node.js 框架,使用异步方式来处理请求和响应,同时拥有灵活的中间件机制,可以快速搭建高性能的 Web 应用程序。

    1 年前
  • MongoDB 的 Mongoose 库使用总结

    介绍 Mongoose 是一款 MongoDB 的 Node.js 驱动程序,是一种优雅、简单、而又功能强大的 mongodb 库。该库提供了丰富的 API,使得开发者可以快速地将程序与 MongoD...

    1 年前
  • Next.js 中如何处理组件的错误?

    在开发前端应用的过程中,我们经常会遇到组件出错的情况。如果不及时处理这些错误,不仅会影响应用的稳定性,还会给用户带来糟糕的体验。 Next.js 提供了一些机制来处理组件错误,本文将介绍这些机制,并提...

    1 年前
  • Socket.io 如何实现带 HTTP 请求的通讯

    在前端领域,Socket.io 是一个常用的通讯库,它具有快速、可靠、实时等特点。在许多应用场景中,被广泛应用于实现即时通讯、实时数据传输等功能。通常情况下,我们会在客户端和服务端之间建立一个 Web...

    1 年前
  • ECMAScript 2021 (ES12) 中如何使用 Temporal API 处理日期和时间

    简介 Temporal API 是在 ECMAScript 中引入的一个新的公共 API,它旨在提供一种更加简单、正确和安全的方法来处理日期和时间。它提供了一个更加严格的日期和时间模型,同时也解决了一...

    1 年前
  • LESS 中使用 rem 单位进行自适应布局的方法

    在移动端网页开发中,使用rem作为CSS单位,可以实现良好的自适应效果。本文主要介绍在LESS预处理器中使用rem进行自适应布局的方法。 rem 单位简介 rem 是相对于根元素(即html元素)的单...

    1 年前
  • Promise 中 then 和 catch 的区别及使用时注意事项

    什么是 Promise? Promise 是一种异步编程的解决方案,它是一个对象,代表某个未来才会知道结果的事件(通常是异步操作)的最终完成或失败。 Promise 有三种状态: pending:初...

    1 年前
  • Web Components 的使用场景及其优势

    随着前端技术的不断发展,Web Components 成为了目前前端领域的一个热门话题。Web Components 是一种基于 W3C 标准的技术,它可以将网页分解成一个个可重用、可扩展的组件,并且...

    1 年前
  • SSE 中使用线程池优化资源占用情况

    在前端开发中,服务器端推送技术(Server-Sent Events,SSE)被广泛应用于异步服务器端推送数据到客户端的过程。虽然 SSE 向客户端推送数据的效率很高,但是它在服务器端占用的资源也较高...

    1 年前
  • React Native 动画组件的 Enzyme 单元测试

    React Native 动画组件在移动端应用开发中扮演着重要的角色,但是对于这些组件进行测试却是一项具有挑战性的任务。本文将介绍如何使用 Enzyme 单元测试框架测试 React Native 动...

    1 年前
  • ES9 中如何使用 Promise.allSettled 方法处理多个请求

    在前端开发中,经常涉及到并发请求的场景,例如同时请求多个接口,但常常遇到其中一个接口请求失败,其他请求也无法获取正确响应的情况。此时,我们需要一种方式来处理多个请求,确保能够获取所有请求的结果,而不会...

    1 年前
  • Golang 中常见的性能问题及其解决方案

    前言 Golang 得益于其编译型语言的特性、垃圾回收机制和高并发处理能力,在互联网领域被广泛应用。然而在使用 Golang 进行开发时,也会遇到各种性能问题。本文将总结 Golang 中常见的性能问...

    1 年前
  • ES7 中的 Proxy 对象及其使用场景

    关键词:ES7、Proxy、前端、数据劫持、响应式编程 在前端开发中,我们经常需要对数据进行处理,比如组件之间的通信、面向对象编程中的数据封装等等。而为了更好地实现数据处理,ES7 中引入了一个新的对...

    1 年前

相关推荐

    暂无文章