肆意使用 CSS Grid:给你的设计增加更多自由度

CSS Grid 是一种强大的布局工具,它能够让前端开发者更加自由地设计和实现网页布局。CSS Grid 最初在 2017 年被推出,它不仅能够代替传统的 float 和 clear 布局方式,还能更好地应对多维度布局。

Grid 布局基础

在使用 Grid 布局前,有几个概念需要掌握。

  1. 网格容器:设置为 display: grid 的元素,它包含了网格项目(网格区域)组成的二维网格,并且可以控制网格的大小、间距和流程(Density and Flow)。
---------- -
  -------- ----- -- --- ---- ---- --
-
  1. 网格项目:Grid 网格容器内部的元素,根据 Grid 的定义,它们可以定位于网格容器的任何网格中。网格项可以跨越多个网格,包括单元格、行和列。
----- -
  --------- - - -- -- -------- --
  ------------ -- -- -------- --
-
  1. 网格轨道:横向或纵向的线,构成了网格的框架。可以通过设置 grid-rowsgrid-columns 来定义轨道数量和大小。
---------- -
  ------------------- --------- ----- -- -------------------- ---- --
  ---------------------- --------- ----- -- -------------------- ---- --
-

使用 Grid 实现复杂布局

在实际应用中,Grid 布局还可组合使用,以实现更复杂的布局。

例如,下面是一个简单的网格容器和其中的三个网格项目。

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

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

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

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

上面的例子中,我们使用 grid-template-columnsgrid-template-rows 定义了一个三行两列的网格布局,具体为每一列或行分别定义了一个同等份的空间。然后我们使用 grid-columngrid-row 来定义三个网格项目的位置和跨度。最后,我们使用了 grid-gap 去控制网格间的间距。

Grid 布局进阶

1. 使用 grid-template-areas 布局

除了使用 grid-rowgrid-column 定义网格项目的位置之外,Grid 布局还提供了 grid-template-areas 属性以区分网格项目及其区域。

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

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

上面的例子中,我们可以将网格容器分为三行三列,并为每个区域定义名字,最后使用 grid-template-areas 来描述区域。然后,我们可以通过 grid-area 属性为具体的网格项目指定一个区域。

2. 使用 grid-template 布局

grid-templategrid-template-rowsgrid-template-columnsgrid-template-areas 的一个组合,它非常适合定义简单且规律化的布局。

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

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

在上面的例子中,我们使用了 grid-template 定义了一个具有两行和两列的网格布局。第一行高度为 50px,第二行则相对与第一行而言,能够自动占满剩余高度。第一列宽度为 200px, 第二列宽度为剩余空间。

3. 控制网格大小和流程

通过 grid-auto-rowsgrid-auto-columns,你可以设置那些没有在 grid-template-rowsgrid-template-columns 中显式定义的网格行和列的大小。

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

通过设置这些属性,如果没有定位到特定网格块的位置,网格行和列将自动指定为这些值。

另外,在多个元素具有相同的网格位置时,网格容器的替换流顺序通常就是在 HTML 中定义的顺序。通过指定 grid-auto-flow: columngrid-auto-flow: rowgrid-auto-flow: dense 属性可改变流程方式。

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

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

在上例中,由于第一个网格项将第一行和第一列占满,第二个网格项必须向下移动到第二行。但是,由于第三个元素的大小只占一个网格(50px),因此它可以默认与第二个元素位于同一行,如下所示:

总结

CSS Grid 格式化布局是前端开发者一个非常强大的布局工具,允许开发者以一种自由灵活的方式布局网页内容。本文介绍了如何使用 CSS Grid 布局,从基础的网格和网格项目到复杂的布局技巧和进阶技术。希望它对你对前端开发工作有所帮助。

最后,分享一些 Grid 布局实用的资源:

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


猜你喜欢

  • ECMAScript 2021 中的 Object.fromEntries 方法简化对象的构造操作

    ECMAScript 2021 中的 Object.fromEntries 方法简化对象的构造操作 在 ECMAScript 2021 中,Object.fromEntries 方法是一个非常实用的新...

    1 年前
  • Web Components 突破组件开发框架的限制,创造新的组件生命周期

    随着前端技术的不断发展,越来越多的人开始使用组件化的开发方式。组件化开发可以让我们更加清晰地定义和管理功能模块,同时也可以提高代码的可复用性和维护性。然而,目前流行的组件开发框架(如 React、Vu...

    1 年前
  • Babel 对象的解构用在多维数组时遇到的坑及解决思路

    在前端开发中,Babel 是非常常用的一个工具,它可以将新版本的 JavaScript 代码转换成浏览器兼容的代码。在 Babel 的转换过程中,对象的解构是一个非常常见的语法,它可以让代码更加简洁易...

    1 年前
  • 使用 Express.js 构建 Node.js 网站的 SEO 优化教程

    在构建 Node.js 网站时,进行 SEO 优化非常重要,因为搜索引擎优化将有助于您的网站获得更好的排名和流量。Express.js 是一个流行的 Node.js 框架,它提供了许多功能和工具来实现...

    1 年前
  • 如何在 Material Design 中使用 BottomNavigationView 实现带标记的导航栏

    在 Material Design 中,BottomNavigationView 是一种常用的导航栏控件。它可以方便地实现一个带有标记的底部导航菜单,让用户能够快速切换不同的页面。

    1 年前
  • ES2020 的新增特性

    在前端开发中,ES2020(ECMAScript 2020)是一种非常重要的技术,它是JavaScript的最新版本。自1997年首次发布以来,JavaScript一直在不断更新和发展。

    1 年前
  • 使用 LESS 实现响应式设计的实现方法

    随着移动互联网的兴起,越来越多的网站都需要响应式设计,以适应不同屏幕尺寸的设备。在前端开发中,我们可以使用 LESS 来实现响应式设计。本文将介绍使用 LESS 实现响应式设计的实现方法,并提供示例代...

    1 年前
  • 从前端到后端的整体性能优化实践

    从前端到后端的整体性能优化实践 在如今快节奏的互联网世界中,性能是一个非常重要的因素。随着前端与后端技术日益发展,我们也面临着更多的性能要求和挑战。本文将会介绍从前端到后端的整体性能优化实践,帮助您更...

    1 年前
  • Sequelize 中如何使用 Op.notILike 实现大小写不敏感的查询?

    在前端开发中,常常需要对数据库进行查询操作。Sequelize是一个流行的ORM框架,可以方便地操作数据库。在Sequelize中,可以使用Op.notILike实现大小写不敏感的查询,本文将带领您了...

    1 年前
  • 在微信 Web APP 的编写中实现响应式设计

    随着移动互联网时代的到来,越来越多的网站和 APP 开始关注响应式设计。在微信 Web APP 的编写中实现响应式设计也变得越来越重要,因为微信 Web APP 的用户群体通常来自不同的设备,如手机,...

    1 年前
  • Mongoose 虚拟属性:解决文档之间关联查询的问题

    在开发 Web 应用程序时,文档之间的关系非常重要。当我们需要查询与其他文档关联的文档时,通常需要执行多个查询,这会导致性能问题。Mongoose 提供了虚拟属性来解决这个问题,可以帮助我们更方便地查...

    1 年前
  • RxJS 实战:使用 groupBy 操作符将数据流分组

    在前端开发中,数据流处理是一个很重要的主题,而 RxJS 是一种基于观察者模式的响应式编程库,可以用于处理异步数据流和事件流。在 RxJS 中,有一个非常实用的操作符——groupBy,可以将数据流拆...

    1 年前
  • ECMAScript 2017(ES8):解构枚举的新方法

    在ECMAScript 2017(ES8)版本中,JavaScript新增了解构枚举的新方法。此功能提供一种方便的方式,使开发者能够从对象和数组中提取数据,并将数据赋值给变量,这些变量可以用于后续的操...

    1 年前
  • MongoDB 的 GFS 文件存储详解

    什么是 GFS 文件存储 GFS 文件存储是 MongoDB 所提供的一套分布式文件存储系统,它能够存储大量的文件,并且支持文件的高效访问、管理和控制。GFS 文件存储可以说是 MongoDB 的一个...

    1 年前
  • 解决 Angular 应用中使用 ngIf 指令出现的性能问题

    随着 Angular 在前端开发中的普及,越来越多的开发者开始使用 Angular 去构建自己的应用程序。在 Angular 应用中,我们时常需要使用 ngIf 指令去判断是否渲染某一个组件。

    1 年前
  • ECMAScript 2019:掌握发布订阅模式在 JavaScript 中的应用

    ECMAScript 2019:掌握发布订阅模式在 JavaScript 中的应用 在 JavaScript 中,发布订阅模式(Pub/Sub pattern)是一种用于消息传递的设计模式,它通过解耦...

    1 年前
  • ES6 中 let,const,var 变量声明详解

    在 JavaScript 中,变量声明一直是一个重要的话题。ES6 引入了 let 和 const 关键字,让变量声明更加严格和有针对性。在本文中,我们将深入讨论 let、const 和 var 的区...

    1 年前
  • Vue.js 中利用 watch 监听数据变化的方案详解

    在 Vue.js 的开发中,我们常常需要监听数据变化来实现一些特定的逻辑或者视图的更新。Vue.js 提供了众多的监听方式,其中 watch 监听是一种比较常用的方式。

    1 年前
  • 使用 JWT 在 Flask RESTful 中进行身份验证

    随着移动互联网时代的到来,前端技术日趋成熟,越来越多的互联网公司选择使用 RESTful API 构建自己的后端服务。在这种模式中,前端通过向后端发送 HTTP 请求来获取数据,而后端则通过返回 JS...

    1 年前
  • 使用 Server-sent Events 实现实时通讯的 Django 应用程序

    在Web开发中,实时通讯已成为一个越来越受欢迎的功能。而其中一种实现实时通讯的方法是使用Server-sent Events(SSE)。本文将介绍如何使用Django框架来实现使用SSE的实时通讯应用...

    1 年前

相关推荐

    暂无文章