【CSS in Depth 2 精译_030】5.2 Grid 网格布局中的网格结构剖析(下)

news2024/11/14 12:08:15

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

  • 第一章 层叠、优先级与继承(已完结)
    • 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 配合(下篇) ✔️
    • 5.3 替代语法(精译中 ⏳)

文章目录

      • 5.2.1 网格线的编号
      • 5.2.2 网格与 Flexbox 配合

《CSS in Depth》新版封面

《CSS in Depth》新版封面

关于《CSS in Depth》

  • 出版时间:
    • 第 1 版:2018 年 3 月(Manning 出版社发行);
    • 第 1 版中文版:2020 年 4 月发行(书名《深入解析 CSS》);
    • 第 2 版:2024 年 7 月(Manning 出版社发行)
    • 第 2 版中文版:暂无;
  • 报价对比:
    • 第 1 版:英文原版国内预订起步价¥461.00;中译本原价 ¥139.00,最新售价:¥90.35(人邮设京东报价);
    • 第 2 版:英文原版国内预订起步价¥750.00;中译本暂无报价及预售价格。
  • 评分:中文第 1 版豆瓣评分:9.3

本专栏为该书第 2 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!

5.2.1 网格线的编号

网格轨道定义好后,下一步就是将各网格元素放置到特定的位置。浏览器给网格中的每条网格线都分配了如图 5.7 所示的编号。有了它们 CSS 就能将每个元素指定到具体位置。

图 5.7 网格线从左上角的 1 开始编号;负数则是从右下角的 -1 开始编号

图 5.7 网格线从左上角的 1 开始编号;负数则是从右下角的 -1 开始编号。

元素位置的指定需要用到 grid-columngrid-row 这两个属性。若网格元素是沿垂直方向从 1 号网格线跨越到 3 号线,则设置为 grid-column: 1 / 3;若是沿水平方向从 3 号网格线跨越到 5 号线,则设置为 grid-row: 3 / 5。这两个属性一起就能将元素放置到指定的网格区域。

示例页中的网格元素也是按如下样式摆放到位的:

.main {
  grid-column: 1 / 2;
  grid-row: 3 / 5;
}

.sidebar-top {
  grid-column: 2 / 3;
  grid-row: 3 / 4;
}

.sidebar-bottom {
  grid-column: 2 / 3;
  grid-row: 4 / 5;
}

这段代码将 main 元素放到了第一列(即 1 号和 2 号垂直网格线之间),并纵向跨越第 3 ~ 4 行(即 3 号与 5 号水平网格线之间)。侧边栏的两个内容板块则都放置在靠右那一列(即 2 号与 3 号垂直网格线之间),纵向上分属第三行和第四行网格单元。

注意

这些属性其实是简写属性:grid-columngrid-column-startgrid-column-end 的简写形式;而 grid-row 则是 grid-row-startgrid-row-end 的简写形式。中间的斜线仅用于区分简写属性中的两个属性值,斜线前后的空格不做强制要求。

而定位 headernav 的规则集略有不同。本例使用了相同的规则集同时定位这两个元素:

header,
nav {
  grid-column: 1 / 3;
  grid-row: span 1;
}

上述样式用了前面介绍的 grid-column 将元素铺满整个网格的宽度。其实还可以用另一个特殊关键字 span 来设置 grid-rowgrid-column(这里用在了 grid-row 上)。该关键字会告知浏览器元素需要占据一条网格轨道。由于未指明具体哪一行,因此网格元素会根据其 布局算法(placement algorithm ,自动放置放置到网格上可以容纳该元素的第一处可用空间,即本例的第一行与第二行。本章稍后会详细介绍该算法。

5.2.2 网格与 Flexbox 配合

学了网格布局,开发人员常常会问 Flexbox 和网格布局是否只能二选一。答案是大可不必。它们其实是互补关系。二者在很大程度上是一同开发出来的,虽然功能上存在部分重叠,但它们各自擅长的场景不一样。设计中究竟是用弹性盒布局还是网格布局,最终取决于具体的需求和应用场景。这两种布局方式有以下两个重要区别:

  • Flexbox 本质上是一维的,而网格是二维的;
  • Flexbox 是以内容为切入点由内而外工作的,而网格是以布局为切入点从外向内工作的。

由于具备一维属性,Flexbox 更适合用在由相似元素组成的行(或列)上。尽管支持用 flex-wrap 换行,但 Flexbox 无法让上一行元素同下一行对齐。相反,网格的二维属性则很好地解决了上述问题,可以让一条轨道上的元素同另一条上的对齐。二者的效果对比如图 5.8 所示。

图 5.8 Flexbox 只在一个方向上对齐各元素,而网格则在两个方向上同时对齐

图 5.8 Flexbox 只在一个方向上对齐各元素,而网格则在两个方向上同时对齐

根据 CSS WG 成员 Rachel Andrew 的观点,它们的第二个区别在于,Flexbox 是从内容出发的,而网格则从布局出发的。Flexbox 将一系列元素排布到一行或一列中,无需专门设置元素的尺寸大小,因为尺寸是根据自身内容决定的。

而在网格中,先要定义好布局,然后将各元素放到布局结构中。鉴于每个元素的内容都能影响所在网格轨道的尺寸,这样整个轨道尺寸也都将受其影响,进而波及到轨道内的其他元素大小。

示例页的主区域用网格来定位,是希望其内容能限制在它所在的网格内;而对于页面上的其他元素,如导航菜单,这样的限制则大可不必:元素文字多的也可以适当宽一点,文字少也可以窄一些。此外,它还是一个水平(一维)布局。因此首选 Flexbox 进行布局。接下来用 Flexbox 给这些元素分别设置布局,完成整个页面样式设计。

如图 5.9 所示,顶部导航菜单里的链接是水平对齐的。右下角报价板块的样式也用 Flexbox 进行了处理。加上这些布局和少量的其他样式后,示例页的最终样式就完成了。

图 5.9 示例页面最终效果图

图 5.9 示例页面最终效果图

除了整体的布局是用网格实现的(如代码清单 5.4 所示),其余样式都跟第四章一样,这里直接复用。根据以下样式更新示例页。

代码清单 5.5 剩余的页面样式

.page-heading {
  margin: 0;
}
 
.site-nav {
  display: flex;  /* 用 Flexbox 处理导航菜单 */
  gap: var(--gap-size);
  margin: 0;
  padding: 0.5em;
  background-color: #5f4b44;
  list-style-type: none;
}
 
.site-nav > li > a {
  display: block;
  padding: 0.5em 1em;
  background-color: #cc6b5a;
  color: white;
  text-decoration: none;
}
 
.site-nav > .nav-right {
  margin-inline-start: auto;
}
 
.login-form h3 {
  margin: 0;
  font-size: 0.9em;
  font-weight: bold;
  text-align: right;
  text-transform: uppercase;
}
 
.login-form input:not([type="checkbox"]):not([type="radio"]) {
  display: block;
  width: 100%;
}
 
.login-form button {
  margin-block-start: 1em;
  border: 1px solid #cc6b5a;
  background-color: white;
  padding: 0.5em 1em;
  cursor: pointer;
}
 
.centered {
  text-align: center;
}
 
.cost {
  display: flex;  /* 用 Flexbox 处理价格部分 */
  justify-content: center;
  align-items: center;
  line-height: 0.7;
}
 
.cost-currency {
  font-size: 2rem;
}
.cost-dollars {
  font-size: 4rem;
}
.cost-cents {
  font-size: 1.5rem;
  align-self: flex-start;
}
 
.cta-button {
  display: block;
  background-color: #cc6b5a;
  color: white;
  padding: 0.5em 1em;
  text-decoration: none;
}

当设计要求元素在两个维度上同时对齐时,首选网格布局;若只考虑单一维度上的元素排布问题,则选用 Flexbox 布局。实践中,这通常(并非绝对)意味着网格更适用于整体的页面布局,而 Flexbox 则更适合网格区域内的特定元素布局。网格和 Flexbox 布局用得多了,对于不同场景下该用什么样的布局方式自然就游刃有余了。

注意

网格布局和 Flexbox 布局都能避免元素间发生外边距折叠(margin collapsing)。随着间隙 gap 的设置,通过用户代理引入的外边距可能偶尔会在元素间产生多余的间距。这也是示例样式中好几处将外边距重置为 0 的根本原因。



关于《CSS in Depth》(中译本书名《深入解析 CSS》)

第 1 版第 2 版
读者评分原版:4.7(亚马逊);中文版:9.3(豆瓣)原版:5.0(亚马逊);中文版:暂无,待出版
出版时间原版:2018 年 3 月;中文版:2020 年 4 月原版:2024 年 7 月;中文版:暂无,待出版
原价原版:$44.99;中文版:¥139.00原版:$59.99;中文版:暂无,待出版
现价原版:$36.49;中文版:¥52.54 起步原版:$52.09;中文版:暂无,待出版
原版国内预订起步价 ¥461.00起步价 ¥750.00

本专栏为该书第 2 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python编程 - 线程

目录 前言 一、线程的使用 (一)基础使用 (二)等待线程完成 (三)多个线程 (四)守护线程 (五)线程同步 (六)总结 二、队列对象 …

编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动

找了很多编译博文,都错误。最后找到了正确编译办法: https://zhuanlan.zhihu.com/p/567883165 直接下载编译好的源码及dll文件 https://download.csdn.net/download/quantum7/89760587 安装VS Virsual Studio 2022 Community D:\Program Files\Micr…

Double Write

优质博文:IT-BLOG-CN 一、存在的问题 为什么需要Double Write: InnoDB的PageSize是16kb,其数据校验也是针对这16KB来计算的,将数据写入磁盘是以Page为单位的进行操作的。而计算机硬件和操作系统,写文件是以4KB作为基…

Spark Streaming基础概论

1. 简介 1.1 什么是 Spark Streaming? Spark Streaming 是 Apache Spark 的一个扩展模块,专门用于处理实时数据流。它通过将数据流切分为一系列小批次(微批次)进行处理,使得开发者能够使用与批处理相同的 API 来处理…

免费还超快,我用 Cursor 做的“汉语新解”插件开源了

前两天,你是否也被 汉语新解 卡片刷屏,却苦恼于无法快速生成? 记得当时,微信群里、朋友圈里、某书上以及公众号里,到处都在谈论这些生动有趣的“汉语新解”卡片。 这是由提示词大神 @李继刚老师 在 Claude 3.5 上开发的提示词。其辛辣的风格和全新的视角,令人耳目一新。…

SpringBoot+vue集成sm国密加密解密

文章目录 前言认识SM2后端工具类实现引入依赖代码实现工具类:SM2Util 单元测试案例1:生成服务端公钥、私钥,前端js公钥、私钥案例2:客户端加密,服务端完成解密案例3:服务端进行加密(可用于后面前…

Linux下root用户共享conda环境给其他用户

首先可以先用命令查看环境存储位置 conda env list 比如我的root用户的base环境 # conda environments: # base * /usr/local/miniconda3 在root下先给环境添文件夹加普通用户的权限 chmod -R 755 /usr/local/miniconda3 接下来新建一个用户&#xff0…

基于springboot酒店管理系统

酒店管理系统 552酒店管理系统 摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,…

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 🍸前言 🍻一、台式电脑基本组成 🍺二、组装 🍹三、安装系统 👋四、系统设置 👀五、章末 🍸前言 小伙伴们大家好,上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

记录一题---位示图

注意题目条件:盘块号、字号、位号到底是从0开始还是从1开始 盘块号、字号、位号从0开始,若n表示字长,则: (字号,位号)(i,j)的二进制位对应的盘块号bnij b号盘块对应的字号ib/n,位号jb%n 若字号、位号从1开始,n表示字长…

纯小白安装pytorch(快速上手)

1.首先进入你的虚拟环境(不进入也没关系) 在anaconda prompt中打开,输入activate 虚拟环境2.查看自己的conda源 conda config --show channels3.清空自己的conda源 conda config --remove-key channels4.添加源 conda config --add channels https://mirrors.tu…

Matlab simulink建模与仿真 第十六章(用户定义函数库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、用户定义函数库中的模块概览 注:MATLAB版本不同,可能有些模块也会有差异,但大体上区别是不大的。 二、Fcn/Matlab Fcn模块 1、Fcn模块 双击Fcn模块,在对话…

JavaScript 事件处理

一、简介 ​ 事件:发生在HTML元素上的事情,可以是用户的行为,也可以是浏览器的行为,如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 ​ 事件源:事件触发的源头&#xf…

【课程系列12】某客时间AI大模型微调训练营

某客时间AI大模型微调训练营 链接 百度网盘地址:https://pan.baidu.com/s/1ZC-fOC_QQjNM6wyVjQcYOg 课程内容 https://u.geekbang.org/subject/finetuning?utm_sourceu_nav_web&utm_mediumu_nav_web&utm_termu_nav_web 深度解读 AI 发展四轮浪潮 技术浪…

PMP--一模--解题--111-120

文章目录 10.沟通管理111、 [单选] 干系人感觉他们收到的信息十分复杂,难以理解,因此,不能正确做出决定。若要解决这个问题,应该怎么做? 14.敏捷--角色--产品负责人PO–职责–1.创建待办列表并排序;2.确认工作优先顺序…

【网络】TCP/IP 五层网络模型:数据链路层

文章目录 认识以太网mac 地址mac 地址和 IP 地址的区别 类型ARP 协议 MTU 日常开发主要是应用层,传输层和应用层密切交互,传输层用到的也不少。网络层以及再往下,日常开发就涉及到的非常少了 认识以太网 插网线的上网方式 80211 是无线 WiF…

Encountered error while trying to install package.> lxml

Encountered error while trying to install package.> lxml 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城…

代码管理系统简介与部署(Introduction and Deployment of Code Management System)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

TCP.IP四层模型

一、TCP/IP模型协议分层 1、应用层: 2、传输层: TCP:传输控制协议 UDP:用户数据报协议 3、网络层: IP: 国际协议(IP地址) ICMP: 互联网控制消息协议(互联网…

dedecms(四种webshell姿势)、aspcms webshell漏洞复现

一、aspcms webshell 1、登陆后台&#xff0c;在扩展功能的幻灯片设置模块&#xff0c;点击保存进行抓包查看 2、在slideTextStatus写入asp一句话木马 1%25><%25Eval(Request(chr(65)))%25><%25 密码是a&#xff0c;放行&#xff0c;修改成功 3、使用菜刀工具连…