【CSS in Depth 2 精译_034】5.4 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 配合(下)
    • 5.3 两种替代语法(已完结)
      • 5.3.1 命名网格线
      • 5.3.2 命名网格区域
    • 5.4 显式网格与隐式网格(上)
      • 5.4.1 添加变化 (中)
      • 5.4.2 让网格元素填满网格轨道(下) ✔️
    • 5.5 子网格(新增章节,精译中 ⏳)

文章目录

      • 5.4.2 让网格元素填满网格轨道 Adjusting grid items to fill the grid track

《CSS in Depth》新版封面

《CSS in Depth》新版封面

译者按
经过了 上篇 和 中篇 的历练,不知道大家对隐式网格这个知识点掌握得怎么样?虽然也尽量考虑图文并茂,但我自己总感觉少了点实战的味道。好在我新发现了 CSDN 一个类似 CodePen 一样的模块,有时间的话我会尝试把这个“下篇”中的内容放进去看看效果。先对隐式网格这个知识点来个收尾吧。

5.4.2 让网格元素填满网格轨道 Adjusting grid items to fill the grid track

至此,您已经实现了相当复杂的页面布局,其间也没有花太多精力去设置每个元素的精确位置,而是将这些计算的活儿都交给了浏览器。

还剩最后一个问题:图片放大后并没有完全填满所在的网格单元,于是图片下方就空出一小段空白来。理想情况下,每个网格元素无论顶部还是底部,都应该与同一轨道上的其他元素对齐。现在顶部倒是对齐了,但底部却没有,如图 5.16 所示:

图 5.16 图片没能完全填满网格单元,留下了多余的空间

图 5.16 图片没能完全填满网格单元,留下了多余的空间

下面来解决这个问题。回想一下,每个网格元素都是一个 <figure>。它包含了一张图片和一个标题这两个子元素:

<figure class="featured"><img src="images/monkey.jpg" alt="monkey" /><figcaption>Monkey</figcaption>
</figure>

默认情况下,每个 网格元素 都会通过拉伸来填满整个网格区域,但 子元素 例外,从而空出了多余的高度。一个简单点的解决办法是使用 Flexbox 布局。如代码清单 5.11 所示,将每个 <figure> 元素都视为一个竖直方向上的弹性容器,内部元素就会从上到下垂直排列;接着再给图片指定一个 flex-grow 值,就可以强制拉伸图片来填满空白区域。

只不过拉伸图片并不可取,因为会改变图片的宽高比(height-to-width ratio),从而导致图片变形。好在 CSS 提供了一个特殊的属性 object-fit 来处理这个问题。默认情况下,一个 <img> 图片元素的 object-fit 的属性值为 fill,也就是通过缩放整个图片来填满 <img> 元素。您也可以改成其他值来进行调节。

例如,object-fit 的属性值还可以是 covercontain(如图 5.17 所示)。这些值会告诉浏览器,要在不改变图片纵横比(aspect ratio)的情况下,调整渲染容器中图片大小,具体用法如下:

  • cover:通过扩展图片来填满容器(会导致图片被部分裁剪)。
  • contain:通过缩放来让图片在容器内完整展示(会导致容器内留白)。

图 5.17 使用 object-fit 控制图片在容器盒内的渲染方式

图 5.17 使用 object-fit 控制图片在容器盒内的渲染方式

这里一定要区分清楚两个概念:一个是宽高由 <img> 元素决定的容器盒(the box),另一个是要渲染的图片。默认情况下,二者的尺寸大小是相等的。object-fit 属性只能对容器盒内的图片尺寸进行控制,而容器盒本身的大小则保持不变。

因为要用 flex-grow 拉伸图片,这里应该给它加上 object-fit: cover 以防变形。这样会裁剪掉图像的一小部分边缘——这也是必要的妥协。最终效果如图 5.18 所示。有关 object-fit 属性的更多详情,可以参考 CSS-Tricks 网站的文章《A Quick Overview of object-fit and object-position》。

图 5.18 所有图片都填满了网格区域并完美对齐后的效果图

图 5.18 所有图片都填满了网格区域并完美对齐后的效果图

至此,所有图片和标题的上下边缘都跟网格轨道对齐了,相关样式如代码清单 5.11 所示。请将它们更新到您的样式表中:

代码清单 5.11 使用垂直方向的 Flexbox 拉伸图片并填充网格区域的样式代码

.portfolio > figure {display: flex; /* 令每个网格元素都成为垂直的 Flexbox */flex-direction: column; /* 令每个网格元素都成为垂直的 Flexbox */margin: 0;
}.portfolio img {flex: 1; /* 使用 flex-grow 让图片填满弹性容器的可用空间 */object-fit: cover; /* 允许图片在不被拉伸变形的情况下填满容器(而是裁掉边缘) */max-inline-size: 100%;
}

这样,您的摄影作品墙就大功告成了!所有元素都整整齐齐地排列在网格里,浏览器决定了垂直网格轨道的数量和尺寸大小。布局算法启用紧凑型自主流动(dense auto-flow)模式后,浏览器也可以干净利落地填满所有的空白区域。



关于《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.rhkb.cn/news/427154.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络通信基础与实践第二讲】包括互联网概述、互联网发展的三个阶段、互联网的组成、计算机网络的体系结构

一、互联网概述 计算机网络是由若干节点&#xff08;node&#xff09;和连接这些节点的链路&#xff08;link&#xff09;组成。 网络之间还可以通过路由器互联起来&#xff0c;这就构成了一个覆盖范围更大的计算机网络。这样的网络称为互联网。 网络把许多计算机连接在一起…

汽车行业智能化:驶向未来的快车道

在科技日新月异的今天&#xff0c;汽车行业正以前所未有的速度迈向智能化时代。从自动驾驶技术的不断升级&#xff0c;到智能座舱的丰富功能&#xff0c;再到车联网的广泛应用&#xff0c;汽车智能化的发展趋势正深刻地改变着我们的出行方式和生活。 一、自动驾驶&#xff1a;…

Etcd权限认证管理

1 查看是否开启权限认证 ctl auth status 2 开启权限认证 ctl auth enable。开启后每一条命令都要加上用户 --userroot:root(root默认最高权限) 3 创建其他用户 ctl user add user1 --user用户名:密码 4 创建角色 ctl role add testR --user 5 为角色添加权限 ctl role g…

Submariner 部署全过程

Submariner 部署全过程 部署集群配置 broker 集群&#xff1a; pod-cidr&#xff1a;11.244.0.0/16 service-cidr 11.96.0.0/12 broker 172.100.0.109 node 172.100.0.108 集群 1&#xff08; pve3 &#xff09;&#xff1a; pod-cidr&#xff1a;10.244.0.0/16 service-…

数字自然资源领域的实现路径

在数字化浪潮的推动下&#xff0c;自然资源的管理与利用正经历着前所未有的变革。本文将从测绘地理信息与遥感专业的角度&#xff0c;深度分析数字自然资源领域的实现路径。 1. 基础数据的数字化 数字自然资源的构建&#xff0c;首先需要实现基础数据的数字化。这包括地形地貌…

【南方科技大学】CS315 Computer Security 【Lab2 Buffer Overflow】

目录 引言软件要求启动虚拟机环境设置禁用地址空间布局随机化&#xff08;ASLR&#xff09;设置编译器标志以禁用安全功能 概述BOF.ctestShellCode.c解释 createBadfile.c 开始利用漏洞在堆栈上查找返回地址 实验2的作业 之前有写过一个 博客&#xff0c;大家可以先看看栈溢出…

为什么是华为最先做出三折叠?这些黑科技硬核门槛缺一不可

一款起售价19999的手机&#xff0c;预约人数竟达到了600万&#xff0c;全球首款三折叠手机Mate XT到底有什么魔力&#xff0c;可以做到还未上市就引爆市场&#xff1f;看完这篇文章&#xff0c;你就知道何谓“科技新物种”。 9月7日12:08&#xff0c;华为Mate XT非凡大师开启预…

智谱清影 -CogVideoX-2b-部署与使用,带你揭秘生成6s视频的极致体验!

文章目录 1 效果展示2 CogVideoX 前世今生3 CogVideoX 部署实践流程3.1 创建丹摩实例3.2 配置环境和依赖3.3 模型与配置文件3.4 运行4 遇到问题 1 效果展示 A street artist, clad in a worn-out denim jacket and a colorful bandana, stands before a vast concrete wall in …

.Net Gacutil工具(全局程序集缓存工具)使用教程

GAC介绍&#xff1a; GAC&#xff08;Global Assembly Cache&#xff09;全局程序集缓存&#xff0c;是用于存放.Net应用程序共享的程序集。 像平常我们在Visual Studio中引用系统程序集时&#xff0c;这些程序集便来自于GAC。 GAC默认位置为&#xff1a;%windir%\Microsoft…

react之jsx基础(1)概念和本质

文章目录 JSX 的基本概念1. **语法**2. **表达式**3. **属性**4. **子元素** JSX 的编译过程1. **转换成 JavaScript**2. **React 元素** JSX 的实际应用1. **组件定义**2. **组件嵌套** 总结 当然&#xff0c;以下是对 JSX 的详细讲解&#xff0c;包括其基本概念、语法、编译过…

Linux线程基础

&#x1f30e; Linux线程 文章目录&#xff1a; Linux线程 线程概念       线程的理解 再谈地址空间 线程控制       线程等待       线程资源共享       线程退出       线程异常       线程分离       理解线程tid 线程切换 线程…

gdb 前端:kdbg 安装使用

文章目录 1. 前言2. kdbg 安装使用2.1 安装 kdbg2.2 使用 kdbg 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. kdbg 安装使用 2.1 安装 kdbg kdbg 是 gdb 的图形化界面的前端&#xff0c;在 …

大数据时代:历史、发展与未来

文章目录 引言1980年&#xff1a;大数据的先声2006年&#xff1a;云计算与大数据的诞生2008年&#xff1a;大数据的科学探索2009年&#xff1a;大数据成为行业热词2011年&#xff1a;大数据的商业价值2013年&#xff1a;世界大数据元年结语 引言 在信息技术飞速发展的今天&…

VulnHub-Bilu_b0x靶机笔记

Bilu_b0x 靶机 概述 Vulnhub 的一个靶机&#xff0c;包含了 sql 注入&#xff0c;文件包含&#xff0c;代码审计&#xff0c;内核提权。整体也是比较简单的内容&#xff0c;和大家一起学习 Billu_b0x.zip 靶机地址&#xff1a; https://pan.baidu.com/s/1VWazR7tpm2xJZIGUS…

农产品交易平台的设计与实现

&#x1f33f;作品简介 : 该农产品交易平台为作者原创作品&#xff0c;成功获得优秀毕设。项目整体分为用户端(小程序)和后台管理系统(管理端)&#xff0c;二者均为前后端分离开发。 &#x1f340;项目技术栈 &#xff1a; 小程序框架、Vue、Vant、Element-UI、Axios、Java、…

【白话树】之 二叉树

快速导航 一、二叉树的基本概念1、 二叉树定义2、常见术语3、基本操作1&#xff09;创建&#xff1a;2&#xff09;插入与删除&#xff1a; 4、常见类型1&#xff09;满二叉树&#xff08;完美二叉树&#xff09;2&#xff09;完全二叉树3&#xff09;完满二叉树4&#xff09;平…

支付宝开发者✖️「蚂小财」——AgentUniverse专业多智能体框架在严谨产业中的应用实践

正在直播&#xff1a;点击进入直播间互动拿蚂蚁保温杯 &#xfeff;直播&#xfeff; &#xfeff;

【Android Studio】使用雷电模拟器调试

文章目录 进入开发者模式使雷电模拟器adb连接PC 进入开发者模式 多次点击版本号 -开区USB调试 使雷电模拟器adb连接PC 写cmd脚本 雷电模拟器端口为5555 &#xff0c;脚本内容如下&#xff1a; adb.exe connect 127.0.0.1:5555默认使用powershell的建议为&#xff1a; .\a…

uniapp中使用picker-view选择时间

picker-view 是 UniApp 中用于展示和选择数据的组件。它适用于创建多列选择器&#xff0c;类似于 iOS 和 Android 系统中的选择器视图。以下是 picker-view 的详细介绍&#xff0c;包括用法、属性和事件。 一 用法 <template><view><picker-view :value"…

HarmonyOS使用LocationButton获取地理位置

LocationButton LocationKit getAddressesFromLocation方法 步骤&#xff1a; 整合 LocationButton并获取经纬度通过 LocationKit 将经纬度转为地址信息将地址信息渲染到页面上处理异常情况&#xff08;闪退&#xff09; LocationButton({ icon: LocationIconStyle.LINE…