CSS Grid 及其实战应用技巧

CSS Grid 是前端界最新的 HTML 和 CSS Layout 模块之一。 现在,作为Web开发者,你必须熟练掌握它。 本文将深入介绍 CSS Grid 并介绍实战应用技巧,通过这些技巧,你将掌握如何为自己的项目构建响应式布局。

什么是 CSS Grid?

CSS Grid 是一种二维布局系统,它允许我们在两个方向上构建复杂的网格布局。 在很多情况下,我们能够仅使用 CSS Grid 就能实现整个网页的布局,而无需依赖于其他工具、框架或库。

CSS Grid 由网格容器 (grid container)和网格项 (grid item)两部分组成。网格容器是一个元素,它把某一区域分成网格,使其中的内容能够在这些网格中排列。网格项则是容器中的子元素,我们可以在不规则或规则的网格中对其进行定位。

例子

我们可以通过简单的 HTML 和 CSS 代码来展示如何使用 CSS Grid 进行布局:

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

在这个例子中,我们首先通过 display: grid.grid-container 元素设置为一个网格容器。接着我们使用 grid-template-columns 属性来声明这个网格中有三列,每一列的宽度都为 1fr。接下来,我们将 .hero 网格项跨越了这个网格中的三列,这就占据了所有可用的空间。剩下的 .feature 网格项都占据一个网格,每一个项等宽等高,周围没有间隔。

这里的 grid-column: 1/4 是新颖的 CSS Grid 实例之一。grid-column 属性接收一个内联视觉格式化模型(IVFM),可实现跨度效果。在这种情况下,我们指定 grid-column: 1/4,并从左边的网格线开始跨越三个网格,到右边的第四个网格线。一旦我们指定了这个网格项的跨度,我们就可以把宽度和高度指定为直接的 CSS 属性,并且与之前所使用的不同,无需依赖于其他非标准的技巧。

实战应用

下面,我们将通过实际示例来演示如何使用 CSS Grid。我们将创建一个完整的网页布局,它能够有效地响应移动设备和桌面端设备的尺寸。

设计

我们将创建一个基于固定宽度和高度的网页布局,使用网格系统来实现。通过设置基于 viewport 的上下文,网页布局将在不同的屏幕尺寸下自适应。我们可以通过媒体查询的方式来控制不同屏幕尺寸下的 CSS Grid 的宽度和高度。

HTML

以下是我们用来构建这个布局的 HTML 结构。

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

CSS

为了创建一个有效的 CSS Grid 系统,我们需要在网格容器上定义网格栏和网格行。 我们还需要定义每个网格项对应的网格行和网格列以及排列方法等。

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

在这个示例中,我们设置了一个基于行和列的网格。我们以 repeat(24, 1fr) 的方式样式化网格。这会为我们创建一个具有 24 列、1/24 的可用宽度的默认值的网格。我们还定义了 5 行,其中 auto1fr 将针对每行为我们动态设置高度。 grid-gap 属性允许我们定义栏和行之间的空隙大小。这样我们就能够为网格项定义布局位置。

grid-template-areas 属性允许我们将类似于“表格单元格”的区域映射到网格的位置上。我们用字符串定义每个网格单元格的区域名,并按顺序列出它们,这样就可以组成一个完整的网格布局。在这个示例中,我们要创建一个充满整个屏幕的布局。grid-template-areas 中使用的名称与我们为每个元素在 HTML 中定义的区域相同。这让我们将上一个示例定义的 headermainasidefooter 与其对应的区域相匹配,并在我们的网页布局中实现我们的设计。

在我们的示例中,我们使用简洁的 grid-area 属性来为网格容器中的每个网格项定义区域。在这个例子中,我们已经设置了一个布局,它实现了一个横向和纵向的三栏布局。我们可以将 section 引用到 main 区域中来实现双栏布局并指定它们的方向方式。

总结

CSS Grid 提供了一种强大的二维方案,用于构建网页布局系统。它创造了简单,灵活,高效的布局方式。在实践应用中,当你需要构建复杂的布局并且希望使你的工作更加简单时,CSS Grid 非常有用。本文介绍了如何搭建一个自适应响应式接口布局。这些技巧可以用来创建网站模板、应用商店和信息门户,并且适用于所有屏幕大小和设备。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/654c83b67d4982a6eb5fde50


猜你喜欢

  • 在 Less 中使用 padding 方式的注意事项

    Less 是一种动态样式表语言,它扩展了 CSS 的语法,支持变量、混合、函数与嵌套等特性。在 Less 中,我们可以使用 padding 属性来设置元素的内边距,但是使用 padding 属性需要注...

    1 年前
  • 利用 ES10 中的 Object.fromEntries() 方法快速将数组转为对象

    在前端开发中,我们常常需要将数组转换为对象。在 ES10 中,新增的 Object.fromEntries() 方法可以非常方便地实现这个转换过程。 Object.fromEntries() 方法简介...

    1 年前
  • Jest 运行测试时报错 "SyntaxError: Unexpected token import" 的解决方法

    在前端开发中,Jest 是一款非常流行的 JavaScript 测试框架,可以帮助开发者简化测试流程,提高开发效率。但在使用 Jest 进行测试时,有时会遇到 SyntaxError: Unexpec...

    1 年前
  • 否则 CSS Reset? Bootstrap 带有基本 CSS Reset 方法

    在前端开发过程中,我们经常会发现自己写出的页面布局可能与我们期望的有所偏差,这通常是由于浏览器的默认样式造成的。这实际上是浏览器由于历史原因而存在的问题,无论是 old school 浏览器还是最新的...

    1 年前
  • Babel 编译 TypeScript 的最佳实践

    前言 TypeScript 是一种强类型的 JavaScript 超集,在前端开发中得到了广泛的应用。然而,TypeScript 不能直接被浏览器解析,需要通过编译成 JavaScript 才能在浏览...

    1 年前
  • ES6/ES2015 中的 Promises:什么是它们,以及如何使用

    什么是 Promises? Promises 是 JavaScript 异步编程模型中的一种解决方案。在 ES6/ES2015 中,Promises 是内置的一种对象,它使得异步编程更加容易和可控。

    1 年前
  • koa-static 插件的使用及配置

    在前端开发中,经常会需要在项目中使用静态资源,如图片、CSS、JavaScript 等文件。但是,如果每次在操作这些文件时都需要手动配置路由和路径很麻烦,这时候就需要用到 koa-static 插件。

    1 年前
  • Docker Swarm 中的容器调度最佳实践

    在分布式系统中,容器调度是一个非常重要的环节。Docker Swarm 是 Docker 官方推出的容器编排工具,它可以非常方便地进行容器调度,实现容器的自动部署、监控和管理。

    1 年前
  • 使用 Mocha 测试 HTTP 请求

    在前端开发过程中,如何保证代码的质量和可靠性是一个非常重要的问题。其中,测试是保证代码质量的重要方法之一。在 Node.js 生态系统中,有一款非常流行的测试框架 Mocha,可以帮助我们轻松地编写和...

    1 年前
  • 使用 Server-Sent Events 流实时更新 HTML

    简介 在传统的 web 应用中,前端使用 AJAX 或 WebSockets 与后端进行数据通信。这种方式需要前端主动向后端发送请求,然后等待后端响应,效率很低。 Server-Sent Events...

    1 年前
  • Node.js:如何使用 Visual Studio Code 进行调试

    前言 Node.js 是一款非常流行的编程语言,同时它也是前端开发中必不可少的组成部分之一。 Visual Studio Code 是一个非常流行的代码编辑器,它集成了调试工具。

    1 年前
  • 使用 Web Components 组件化构建可复用的 UI

    Web Components 是一种标准化的浏览器 API,旨在使开发者能够创建可重用的自定义元素和组件,从而帮助开发者快速构建应用程序,同时提高应用程序的可维护性和可扩展性。

    1 年前
  • 浅谈 Enzyme 高效测试 React 组件的技巧

    Enzyme 是一个 React 组件测试工具,它能够帮助我们快速、准确地测试 React 组件。它的核心思想是“轻量级、灵活性强、API 简单易用”。下面我们来详细介绍一下 Enzyme 高效测试 ...

    1 年前
  • 如何在 Fastify 中使用 Socket.io

    Socket.io 是一种实时通信框架,它允许使用 Node.js 在实现基于事件的双向通信的同时支持 WebSocket 和 HTTP 传输的跨浏览器和跨平台通信。

    1 年前
  • MongoDB 中的复合索引设计技巧

    简介 复合索引是 MongoDB 中一种非常重要的优化技术,它能够将多个索引字段组合起来,提高查询效率和性能。在实际项目中,合理的复合索引设计能够显著降低数据库的查询时间,提高系统的吞吐量,同时也可以...

    1 年前
  • Cypress 与 Material Design 集成指南:让你轻松实现 Material Design 应用的自动化测试

    Material Design 是 Google 推出的一种设计风格,旨在提供一种则能够兼具美观和实用的设计语言,它的应用已经深入到所有的 Google 产品中。 随着 Material Design...

    1 年前
  • 处理 Material Design 中 Snackbar 出现的问题

    Material Design 是 Google 推出的一种全新的设计语言,旨在统一 Web、移动端和桌面应用的设计风格。其中,Snackbar 是一种轻量级的提示组件,用户在进行某些操作时,系统会用...

    1 年前
  • 如何使用 Hapi 框架集成 Socket.IO

    在 Web 开发中,实时通信是非常常见的需求。Socket.IO 是一种优秀的实现实时通信的方式,它支持多种协议,并且非常容易使用。Hapi 是另一种非常优秀的 Web 框架,它的灵活性和扩展能力可以...

    1 年前
  • Next.js 中如何进行数据传输?

    在 Web 应用程序中,数据传输是一项非常重要的任务,特别是在前端开发中。Next.js 是一种流行的 React 框架,它提供了许多功能来管理数据传输。在本文中,我们将介绍 Next.js 中如何进...

    1 年前
  • ES7 中数组实例的 flat() 方法

    在 ES7 中,JavaScript 数组新增了一个方法 flat(),通过这个方法,我们可以把多维数组压成一维数组,方便快捷地处理数据。本文将详细介绍 flat() 的用法,包括如何使用 flat(...

    1 年前

相关推荐

    暂无文章