首页 > 其他分享 >【CSS in Depth 2 精译_028】第五章 网格布局 + 5.1 构建基础网格

【CSS in Depth 2 精译_028】第五章 网格布局 + 5.1 构建基础网格

时间:2024-09-11 22:53:36浏览次数:13  
标签:5.1 元素 Flexbox 精译 布局 网格 1fr grid

当前内容所在位置(可进入专栏查看其他译好的章节内容)

  • 第一章 层叠、优先级与继承(已完结)
    • 1.1 层叠
    • 1.2 继承
    • 1.3 特殊值
    • 1.4 简写属性
    • 1.5 CSS 渐进式增强技术
    • 1.6 本章小结
  • 第二章 相对单位(已完结)
    • 2.1 相对单位的威力
    • 2.2 em 与 rem
    • 2.3 告别像素思维
    • 2.4 视口的相对单位
    • 2.5 无单位的数值与行高
    • 2.6 自定义属性
    • 2.7 本章小结
  • 第三章 文档流与盒模型(已完结)
    • 3.1 常规文档流
    • 3.2 盒模型
    • 3.3 元素的高度
    • 3.4 负的外边距
    • 3.5 外边距折叠
    • 3.6 容器内的元素间距问题
    • 3.7 本章小结
  • 第四章 Flexbox 布局(已完结)
    • 4.1 Flexbox 布局原理
    • 4.2 弹性子元素的大小
    • 4.3 弹性布局的方向
    • 4.4 对齐、间距等细节处
    • 4.5 本章小结
  • 第五章 网格布局 ✔️
    • 5.1 构建基础网格 ✔️
    • 5.2 网格结构剖析(精译中 ⏳)
      • 5.2.1 网格线的编号(精译中 ⏳)
      • 5.2.2 网格与 Flexbox 配合(精译中 ⏳)

文章目录

第五章 网格布局

本章概要

  • 使用网格构建页面布局
  • 理解网格布局选项
  • 使用网格线和具名网格区域放置子元素
  • 显式与隐式网格
  • 结合 Flexbox 和网格购买连贯的网页布局

上一章介绍的 Flexbox 彻底颠覆了传统的网页布局方式,但也只能算作 CSS 布局全貌的一部分。它还有一个大哥:一个被称作 网格布局模块(Grid Layout Module,即 grid 网格) 的新规范。这两个规范共同提供了一套功能齐全的布局引擎。

本章将重点演示网格布局的用法,先概括介绍网格布局的工作原理,然后结合几个示例带您感受一下网格布局所具备的能力。它既可以轻松拿捏基础网格的构建,也具备足够强悍的实力搞定各种复杂布局,但后者必须掌握额外的新属性和关键字。本章将步步为营详细介绍,助您攻克这些知识点。

CSS 网格先是定义了一个由不同的行与列所构成的二维布局,然后再将页面元素分别放置到对应的网格中。一些元素可能只占据一个网格单元,另一些元素则可能跨越多列或多行。网格的尺寸大小既可以精确定义,也可以根据自身内容自动计算。元素既可以选择精确放置到网格某个位置,又可以在网格内自动定位,自行填充划分好的区域。一套网格系统就足以构建出如图 5.1 所示的复杂布局。

图 5.1 基础网格布局中的盒子

图 5.1 基础网格布局中的盒子

5.1 构建基础网格

网格的用途极其广泛,本章将通过几个示例来展示其强大功能。先来构建一个最基础的网格布局,分三列布局如图 5.2 所示的六个方框。页面对应的 HTML 标记详见代码清单 5.1。

图 5.2 包含三列两行的简单网格效果图

图 5.2 包含三列两行的简单网格效果图

与上一章类似,新建一个页面并关联一个新的样式表,页面内容如下。在这段代码中,各方框分别从字母 af 进行编号,这样它们在网格中的位置就一目了然了。

代码清单 5.1 包含六个子元素的页面 HTML 标记

<div class="grid"><!-- 网格容器 -->
  <!-- 容器内的子元素变为网格元素 -->
  <div class="a">a</div>
  <div class="b">b</div>
  <div class="c">c</div>
  <div class="d">d</div>
  <div class="e">e</div>
  <div class="f">f</div>
</div>

跟 Flexbox 类似,网格布局也是作用在包含两个层级的 DOM 结构中。设置了 display: grid 的元素将成为一个 网格容器(grid container),其子元素则变为 网格元素(grid items)

接下来,要用一些新的属性来定义网格的具体细节。按照如下代码更新样式表:

代码清单 5.2 基础网格布局

.grid {
  display: grid;  /* 将元素设为网格容器 */
  grid-template-columns: 1fr 1fr 1fr;  /* 定义三个等宽列 */
  grid-template-rows: 1fr 1fr;  /* 定义两个等高行 */
  gap: 0.5em;  /* 设置各网格单元格之间的间距 */
}
 
.grid > * {
  background-color: darkgray;
  color: white;
  padding: 2em;
  border-radius: 0.5em;
}

该样式分三列渲染了六个大小相同的方框(如图 5.2 所示)。这当中有好几个新的知识点,下面将详细介绍。

首先,display: grid 定义了一个网格容器,使该容器呈现出块级元素的行为特征,100% 占满可用宽度。另外也可以使用 inline-grid(没写到示例中),这样元素就会在行内流动,且宽度只能够包裹子元素,但 inline-grid 用得并不多。

接下来是新属性:grid-template-columnsgrid-template-rows。这两个属性定义了网格每行每列的大小。本例使用了一种新单位 fr,代表每一列(或每一行)的 分数单位(fraction unit。这个单位的作用跟 Flexbox 中的 flex-grow 属性极为相似。声明 grid-template-columns: 1fr 1fr 1fr 则设置了三个大小相同的三个等宽列。

属性值不一定非得用分数单位 fr,像 pxem 或百分数这样的单位也可以使用;也可以混搭组合使用。例如,grid-template-columns: 300px 1fr 就定义了一个固定宽度为 300px 的首列,以及一个紧跟其后的第二列,后者会填满剩余的可用空间。此外,2fr 对应的列宽是 1fr 的两倍。

和 Flexbox 布局一样,gap 属性则定义了每个网格单元之间的间距。也可以用两个值分别指定垂直及水平方向的间距(例如:gap: 0.5em 1em)。

注意

网格规范首次定稿时,gap 属性曾被命名为 grid-gap,因此早期的一些网格案例用的是 grid-gap,其工作方式相同。后来添加了更为通用的 gap 属性,并同步更新了 Flexbox 予以支持。

可以试着改改这些属性值,看看它们会对最终布局产生什么影响。试试再加一列,或者改改宽度,又或者添加或删除网格元素……本章后续布局也会继续这样试验,这是掌握新东西最好的方法。

标签:5.1,元素,Flexbox,精译,布局,网格,1fr,grid
From: https://blog.csdn.net/frgod/article/details/142137796

相关文章

  • centos7.9安装Redmine 5.1
    安装前提:先安装好mysql,并且新建数据库redmine安装数据库在上一篇博客写了,可以点连接进入查看新建数据库简单说一下:1.登录MySQL:你需要使用MySQL客户端登录到MySQL服务器。可以使用以下命令:mysql-uusername-p输入你的MySQL用户名和密码 2.创建数据库:登录后,使......
  • 基于python+flask框架的社区疫情防控网格数据管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球化背景下,疫情的传播速度和范围前所未有,对公共卫生体系构成了严峻挑战。社区作为疫情防控的第一线,其管理效率与精准度直接关系到疫情......
  • Cisco Catalyst 9000 交换产品系列 IOS XE 17.15.1 发布下载,新增功能概览
    CiscoCatalyst9000SeriesSwitches,IOSXERelease17.15.1ED思科Catalyst9000交换产品系列IOSXE系统软件请访问原文链接:https://sysin.org/blog/cisco-catalyst-9000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoCatalyst9000交换产品系列借......
  • qt5.15.2+opencv4.10+VS2019_64 均值滤波,高斯滤波算法详细分析
    目录 一.加载图像二.灰度图像三.均值滤波1.均值滤波均值滤波算法(MeanFiltering):    参数含义:    一句话总结:均值滤波特点:应用场景:缺点:2.高斯滤波高斯滤波算法(GaussianBlur):        高斯滤波计算过程:    参数含义:    ......
  • 零基础快速上手HarmonyOS ArkTS开发5---从简单的页面开始2---使用List组件构建列表、G
    接着零基础快速上手HarmonyOSArkTS开发4---从简单的页面开始继续往下学习页面布局的知识。最近发现之前学习这一章节的内容在官方已经被下了,替换成了另外一个案例了(https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717497398588123):而且整个视频的风格也......
  • 零基础快速上手HarmonyOS ArkTS开发5---从简单的页面开始2---使用List组件构建列表、G
    接着https://www.cnblogs.com/webor2006/p/18048248继续往下学习页面布局的知识。最近发现之前学习这一章节的内容在官方已经被下了,替换成了另外一个案例了(https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717497398588123):而且整个视频的风格也不一样......
  • Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED
    CiscoCatalyst9000SeriesSwitches,IOSXERelease17.15.1ED思科Catalyst9000交换产品系列IOSXE系统软件请访问原文链接:https://sysin.org/blog/cisco-catalyst-9000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoCatalyst9000交换产品系列借......
  • 【OCPP】ocpp1.6协议第5.16 Set Charging Profile章节的介绍及翻译
    目录5.16设置充电配置SetChargingProfile-概述主要内容1.概要2.操作流程3.参数说明4.配置示例实际应用结论5.16设置充电配置SetChargingProfile-原文译文5.16.1在订单开始时设置一个chargingprofile5.16.2在RemoteStartTransaction请求中设置一个charging......
  • Cisco ISR 4000 IOS XE 17.15.1a 发布下载,新增功能概览
    CiscoISR4000SeriesIOSXERelease17.15.1aED思科4000系列集成服务路由器系统软件请访问原文链接:https://sysin.org/blog/cisco-isr-4000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org思科4000系列集成服务路由器Cisco4000系列ISR、CiscoIOSXE1......
  • Cisco ISR 1000 IOS XE 17.15.1a 发布下载,新增功能概览
    CiscoISR1000SeriesIOSXERelease17.15.1aED思科1000系列集成多业务路由器系统软件请访问原文链接:https://sysin.org/blog/cisco-isr-1000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org思科1000系列集成多业务路由器Cisco1000系列集成多业务路由器......