【CSS in Depth 2 精译_033】5.4 Grid 网格布局的显式网格与隐式网格(中)

news2024/9/22 11:43:01

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

  • 第一章 层叠、优先级与继承(已完结)
    • 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.3.1 命名网格线
      • 5.3.2 命名网格区域
    • 5.4 显式网格与隐式网格(上)
      • 5.4.1 添加变化 (中) ✔️
      • 5.4.2 让网格元素填满网格轨道(下)(精译中 ⏳)
    • 5.5 子网格

文章目录

      • 5.4.1 添加变化 Adding variety

《CSS in Depth》新版封面

《CSS in Depth》新版封面

译者按
网格布局的强大背后,是众多细碎的配置属性与行为控制选项。想要彻底掌握网格布局,关键在于找到一个恰当的分类方法,对这些看似零散的知识点作系统性梳理,再结合实际案例重点理解,逐个击破。这也是本书一直以来被众多前端人员奉为【CSS 进阶神作】的其中一个重要原因——合理分类。一起来看看特写图片放大效果的实现过程吧。

5.4.1 添加变化 Adding variety

接下来,让作品墙中的特写图片(如本例中的小鸟和天鹅)放大些来增强视觉趣味性。放大前的每个网格元素都各自占据了 1 × 1 的区域。然后将特写图片的尺寸增加到 2 × 2,方法是通过样式类 featured 选中特写元素,并让它们在水平和垂直方向上都占据两个网格轨道的大小。

问题来了:由于元素按从左至右的顺序排列,放大某些网格元素将导致网格中出现空白区域,如图 5.14 所示。小鸟图之前在第三个网格元素内,但因为尺寸变大了,老鹰图的右侧单元格已经容纳不下这张图片,因此只能掉到下一行的网格轨道。

图 5.14 增加某些网格元素的尺寸大小会导致布局中出现无法容纳大元素的空白区域

图 5.14 增加某些网格元素的尺寸大小会导致布局中出现无法容纳大元素的空白区域

当不主动设置网格元素的位置时,元素会按照默认的布局算法(placement algorithm)自行定位。默认情况下,布局算法会尝试按元素在 HTML 标记中的顺序逐列、逐行摆放。当一个元素在某一行放不下时(即该元素占据了太多网格轨道时),布局算法会将其移动到下一行,寻找足够大的空间来安置它。于是本例中的小鸟图就被挪到了下方第二行,放到了老鹰图的下面。

网格布局模块(Grid Layout Module)还提供了另一个属性 grid-auto-flow 来控制布局算法的行为。它的初始值(initial value)为 row,效果就是上面截图看到的样子。如果设置为 column,布局算法就会将元素优先放在网格列中,并且只有等这一列也放不下时,才会移动到该行的下一列;直到这一行最后一列也不行时,才会考虑换到下一行,以此类推。

该属性还可以添加关键字 dense(如 grid-auto-flow: column dense)。这样,布局算法就能紧凑地填满网格里的空白,尽管会打乱某些网格元素的顺序。加上 dense 后,较小的图片元素就会“回填”到由大图片造成的空白区域,效果如图 5.15 所示:

图 5.15 grid-auto-flow 属性添加关键字 dense 后,小网格元素就能回填网格的空白区域

图 5.15 grid-auto-flow 属性添加关键字 dense 后,小网格元素就能回填网格的空白区域

让布局算法的自主流动(auto-flow)紧凑起来之后(即添加了 dense),放置大图片时留下的空白区域将由小图片优先补空。此时源码顺序还是不变(猴、老鹰、小鸟、熊),但最后那张熊图就被挪到了小鸟图前面,填补了第一行的空缺。

按照代码清单 5.10 更新样式表。改样式放大了特写图片,使其在水平和垂直方向均占据两个网格轨道,并启用了紧凑的自主流动模式。

代码清单 5.10 放大特写图片的样式代码

.portfolio {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  grid-auto-rows: 1fr;
  gap: 1em;
  grid-auto-flow: dense; /* 启用紧凑的网格布局算法 */
}

/* 放大特写图片,使其在水平和垂直方向上各占据两个网格轨道的大小 */
.portfolio .featured {
  grid-row: span 2;
  grid-column: span 2;
}

这段样式代码(第 6 行)使用了 grid-auto-flow: dense,相当于 grid-auto-flow: row dense(前者隐含了 row 这个初始值)。然后指定特写图片的尺寸为:在水平和垂直方向上各占据两个网格轨道大小。注意,本例中只用了 span 关键字,并没有具体指明什么元素该放到什么轨道,这样布局算法就会将网格元素放到它认为合适的位置。

实际屏幕看到的效果可能跟图 5.12 不完全一致,因为本例用 auto-fill 来确定垂直网格轨道的数量,所以屏幕越宽,可以容纳的轨道数就越多;屏幕越窄,相应的轨道数就越少。我截图时的宽度约为 1000px,能装下四个网格轨道。适当调整浏览器的窗口大小,就能看到网格自动生成了多少个轨道来填充可用空间。

需要注意的是,布局算法设置为紧凑型自主流动后,可能会导致元素显示的顺序跟 HTML 里的源码顺序不一致。当用户借助键盘(如 Tab 健)或屏幕阅读工具来浏览网页时,这些辅助工具会以 HTML 中的源码顺序而非屏幕渲染顺序来浏览网页,这样可能会让用户感到困惑。



关于《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/2154985.html

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

相关文章

C++速通LeetCode中等第18题-删除链表的倒数第N个结点(最简单含注释)

绝妙!快慢指针法,快指针先走n步(复杂度O(n),O(1)): /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(n…

GS-SLAM论文阅读笔记--TAMBRIDGE

前言 本文提出了一个自己的分类方法,传统的视觉SLAM通常使用以帧为中心的跟踪方法,但是3DGS作为一种高效的地图表达方法好像更侧重于地图的创建。这两种方法都有各自的优缺点,但是如果能取长补短,互相结合,那么就会是…

STM32精确控制步进电机

目的:学习使用STM32电机驱动器步进电机,进行电机运动精确控制。 测试环境: MCU主控芯片STM32F103RCT6 ;A4988步进电机驱动器模块;微型2相4线步进电机10mm丝杆滑台,金属丝杆安装有滑块。 10mm二相四线微型…

我的AI工具箱Tauri版-FasterWhisper音频转文本

本教程基于自研的AI工具箱Tauri版进行FasterWhisper音频转文本服务。 FasterWhisper音频转文本服务 是自研AI工具箱Tauri版中的一款模块,专门用于将音频或视频中的语音内容自动转化为文本或字幕。通过简单的配置,该工具能够批量处理大量音频或视频文件&…

高密原型验证系统解决方案(下篇)

0 引言 我们在上篇中和大家探讨了用户在进行大规模 复杂 SoC 设计原型验证时在全局时钟及复位同步, 大规模设计分割以及高速接口与先进 Memory 控制 器 IP 验证等方面遇到的关键困难,并提出了相应的 解决方案帮助用户来克服这些困难。接下来我们会 和用户…

OpenCV运动分析和目标跟踪(2)累积操作函数accumulateSquare()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将源图像的平方加到累积器图像中。 该函数将输入图像 src 或其选定区域提升到2的幂次方,然后加到累积器 dst 中: dst ( …

计算机毕业设计之:基于微信小程序的共享充电桩系统的设计与实现

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

通信工程学习:什么是TLS传输层安全协议

TLS:传输层安全协议 TLS(Transport Layer Security)传输层安全协议是一种用于在两个通信应用程序之间提供保密性、数据完整性以及真实性的安全协议。它是SSL(Secure Sockets Layer)协议的后继者,继承并增强…

通信工程学习:什么是TMN电信管理网

TMN:电信管理网 TMN,全称Telecommunications Management Network,即电信管理网,是为保持电信网正常运行和提供服务,对它进行有效的管理所建立的软硬件系统和组织体系的总称,是现代电信网运行的支撑系统之一…

2024/9/22 leetcode 128题 283题

目录 128.最长连续序列 题目描述 题目链接 解题思路与代码 题目2 题目描述 题目链接 解题思路与代码 128.最长连续序列 题目描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请…

秩一的等价转化

Lemma 2. For a positive semi-definite Hermitian matrix A ∈ C M M \mathbf{A}\in\mathbb{C}^{M\times M} A∈CMM, the condition Rank ( A ) 1 \left(\mathbf{A}\right)1 (A)1 is equivalent to t h e following conditions the\textit{ following conditions} the fol…

使用GPU 加速 Polars:高效解决大规模数据问题

Polars 最近新开发了一个可以支持 GPU 加速计算的执行引擎。这个引擎可以对超过 100GB 的数据进行交互式操作能。本文将详细讨论 Polars 中DF的概念、GPU 加速如何与 Polars DF协同工作,以及使用新的 CUDA 驱动执行引擎可能带来的性能提升。 Polars 核心概念 Polar…

最新 idea 2024 入门使用详细教程

IntelliJ IDEA:这是一款由JetBrains公司开发的Java集成开发环境(Integrated Development Environment),被广泛认为是目前Java开发者最好的集成开发工具之一。它支持Java、Groovy、Kotlin等多种编程语言,并且提供了丰富…

语言RPA流程组件介绍--获取网页信息

🚩【组件功能】:获取浏览器中显示网页的网页标题、源代码、网址、编码等信息 配置预览 配置说明 获取 网页源代码/标题/网址/编码 iframe 支持T或# 若获取的信息是框架iframe中的信息,需要手动填写框架名称,框架使用方法:框架…

[数据结构与算法·C++] 笔记 1.4 算法复杂性分析

1.4 算法复杂性分析 算法的渐进分析 数据规模 n 逐步增大时, f(n)的增长趋势当 n 增大到一定值以后,计算公式中影响最大的就是 n 的幂次最高的项其他的常数项和低幂次项都可以忽略 大O表示法 函数f,g定义域为自然数,值域非负实数集定义: …

[数据结构与算法·C++] 笔记 1.5类与对象

类与对象 类的概念 一个东西满足这个类的特征 -> 这个东西是这个类的一个实例 -> 实例化共同特点(变量)->构成数据结构归纳行为(函数)->操作数据结构(抽象)可理解为在结构体中加入函数 类的定义 看上去像“带函数的结构体” class Rectangle { public:int w, h;…

会声会影2025视频剪辑教学

会声会影2025是一款超级受欢迎的视频播放软件,用于剪辑和编辑各种类型的视频素材。软件具有直观的用户界面,使得即使对于初学者来说也能轻松上手。该软件提供了各种创意工具,可以帮助用户实现他们的创意想法。用户可以裁剪、合并和重新排列视…

【C++】类和对象(下)相关练习

1. 求123...n 题目要求和,但是像循环,递归,求和公式这样的方法都不让用,这种情况下我们最先想到的就是static成员变量的使用。我们每创建一个类对象就会调用一下构造函数,加上static修饰后出局部作用域不会销毁&#x…

【Java集合】深入了解ArrayList实现原理

概述 1.数据存储是基于动态数组实现的,默认初始容量为10。 2.添加数据时,首先需要检查元素个数是否超过数组容量,如果超过了则需要对数组进行扩容(1.5倍);插入数据时,需要将从插入点 k 开始到数…

【FPGA】编程方式

FPGA编程方式 1 什么是PLD?2 什么是颗粒度?3 可编程逻辑器件的编程方式有哪些?3.1 SRAM 编程技术3.2 Flash/EEPROM 编程技术3.3 反熔丝编程技术3.4 编程技术比较 参考资料 1 什么是PLD? 可编程逻辑器件 英文全称为:pr…