【CSS in Depth 2 精译_050】7.3 CSS 响应式设计中的流式布局原则(Fluid layout)

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

  • 【第七章 响应式设计】(概述)
    • 7.1 移动端优先设计原则(上篇)
      • 7.1.1 创建移动端菜单(下篇)
      • 7.1.2 给视口添加 meta 标签(下篇)
    • 7.2 媒体查询(上篇)
      • 7.2.1 深入理解媒体查询的类型(上篇)
      • 7.2.2 页面断点的添加(中篇)
      • 7.2.3 响应式列的添加(下篇)
    • 7.3 流式布局 ✔️
    • 7.4 响应式图片(待翻译 ⏳)

文章目录

    • 7.3 流式布局 Fluid layouts
      • 7.3.1 为大视口添加样式 Adding styles for a large viewport
      • 7.3.2 表格的处理 Dealing with tables

《CSS in Depth》新版封面

《CSS in Depth》新版封面

7.3 流式布局 Fluid layouts

响应式设计的第三个也是最后一个原则,即 流式布局(fluid layout。流式布局,有时也称 液体布局(liquid layout,是指让所用容器的尺寸随视口宽度的变化而变化。它跟固定布局相反,固定布局的列都是用 px 像素或 em 为单位进行定义。固定布局下的容器(例如设置了 width: 800px 的元素)在小尺寸屏幕上可能会超出视口的宽度,导致页面出现水平滚动条;而流式布局下的容器则会自动缩小尺寸以适应视口。

在流式布局中,主页面的容器通常没有明确的宽度,也不会设置百分比作为宽度,但可能会设置左右内边距,或者属性值为 auto 的左右外边距,从而在容器与视口边缘间留出一定空间。也就是说容器可能比视口略窄,但始终不会比视口更宽。

而在主容器中,任何列都用百分比来定义宽度(如正文栏宽 70%,侧边栏宽 30%)。这样无论屏幕宽度是多少都能容得下主容器。用 Flexbox 布局也行,只要设置弹性元素的 flex-grow 属性,更重要的是指定好 flex-shrink 属性,使得元素能填满屏幕宽度。要习惯将容器宽度设置为百分比的做法,而不是给定任何固定大小。

说明

流失布局容器在并非仅限本章示例页面,其实全书也几乎只用了流式布局。现在您应该已经或多或少熟悉这种布局方式了。

一个网格默认情况下其实就是响应式的。在没加 CSS 时,块级元素的宽度不会超过视口,行内元素为避免水平溢出也会换行(wrap);加上 CSS 后,页面的响应式特性就交由您来维护了。这个道理知易行难,但意识到每次都是从一个良好的默认状态开始,有助于我们更好地实现响应式布局。

7.3.1 为大视口添加样式 Adding styles for a large viewport

接下来要为下一个屏幕断电添加媒体查询样式。在实现过程中,您会发现我们从未给容器设置过固定大小的宽度。容器可以自然伸展到 100%(当然要减去一些内外边距)。在三列布局时我们使用了 Flexbox 技术,让每一列占据视口宽度的三分之一。

示例页面最终的大尺寸视口布局效果如图 7.9 所示。实现方法与中等尺寸屏幕视口类似,只是这里的空间更多了。您可以随意使用内边距,这正是接下来要完成的工作。

图 7.9 大视口下的页面布局效果

【图 7.9 大视口下的页面布局效果】

可以看到,左右两侧的内边距已由 1em 增加到 4em。主图中文字周围的内边距也相应增加了,这样图片可以变得更大。新增样式如代码清单 7.12 所示。

将媒体查询块 (min-width: 800px) 内的所有样式添加到示例页面的样式表中。请再次确认将相同的样式规则放到尺寸较小的断点后面(即 .page-header.hero 以及 main),这样媒体查询中的样式才能覆盖前面断点指定好的样式。

代码清单 7.12 大屏断点处增大内边距的样式代码

@media (min-width: 800px) {.page-header {padding: 1em 4em; /* 将页面的左右内边距增大至4em */}
}@media (min-width: 800px) {.hero {/* 增加主图内边距,从而得到更大的主图 */padding: 7em 6em;}
}@media (min-width: 800px) {main {padding: 2em 4em; /* 将页面的左右内边距增大至4em */}
}@media (min-width: 800px) {.nav-menu {padding-inline: 4em; /* 将页面的左右内边距增大至4em */}
}

至此,一个具有三处页面断点的响应式页面就大功告成了。可以继续在上面试验,变更断点的宽度,看看浏览体验上会有什么变化。

7.3.2 表格的处理 Dealing with tables

在移动端设备的流式布局中,表格的问题特别多。如果表格列过多,很容易超过屏幕宽度(如图 7.10 所示)。

图 7.10 在移动端设备上表格的右端因为超宽被裁掉了

【图 7.10 在移动端设备上表格的右端因为超宽被裁掉了】

如果可以的话,建议在移动端设备上改用别的方式组织数据。比如将每一行数据单独用一块区域展示,并让每块区域顺次堆叠;或者使用更适合小尺寸屏的可视化图形或图表来展示。但有时就得用表格进行显示。

此时有一种方案是将表格强制显示为一个普通的块级元素,如图 7.11 所示:

图 7.11 同样是表格型数据,但各行与各单元格都设置了 display: block 的样式效果

【图 7.11 同样是表格型数据,但各行与各单元格都设置了 display: block 的样式效果】

该布局由 <table><tr><td> 元素组成,但它们分别设置了 display: block 样式,覆盖了此前默认的属性值(即 tabletable-rowtable-cell 等)。通过使用 max-width 媒体查询可将这些样式变动限制在小尺寸屏幕下。相应的 CSS 代码如代码清单 7.13 所示。(可将代码应用到任意 <table> 标签对比效果)

代码清单 7.13 在移动端设备上强制实现表格响应式布局的样式代码

table {inline-size: 100%;
}@media (max-width: 480px) {table, thead, tbody, tr, th, td {display: block; /* 让表格的所有元素都呈块级显示 */}thead tr {/* 将表头移出屏幕外,令其隐藏 */position: absolute;top: -9999px;left: -9999px;}tr {margin-block-end: 1em; /* 在每组表格数据间添加一些间隙 */}
}

以上样式会让表格各单元格从从上到下排列,并在每个 <tr> 之间留出一定的外边距;但该方案也会让 <thead> 行不再跟下面的每一列对齐,因此要用绝对定位将表头那行移出视口。出于页面可访问性的考虑,这里并没有设置 display: none,否则读屏工具将无法识别表头。这断然不是最完美的解决方案,但在其他方案都不尽人意的时候,也不失为当下最好的效果了。

译注
至此,CSS 响应式设计的三大原则就全部介绍完毕了。下一节补充介绍一些响应式图片的知识作为第 7 章的收尾内容,敬请关注!



关于《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 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!

目前已完结的章节(可进入本专栏查看详情,连载期间完全免费):

  • 第一章 层叠、优先级与继承(已完结)
    • 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.6 对齐相关的属性
    • 5.7 本章小结
  • 第六章 定位与堆叠上下文(已完结)
    • 6.1 固定定位
      • 6.1.1 创建一个固定定位的模态对话框
      • 6.1.2 在模态对话框打开时防止屏幕滚动
      • 6.1.3 控制定位元素的大小
    • 6.2 绝对定位
      • 6.2.1 关闭按钮的绝对定位
      • 6.2.2 伪元素的定位问题
    • 6.3 相对定位
      • 6.3.1 创建下拉菜单(上)
      • 6.3.2 创建 CSS 三角形(下)
    • 6.4 堆叠上下文与 z-index
      • 6.4.1 理解渲染过程与堆叠顺序(上)
      • 6.4.2 用 z-index 控制堆叠顺序(上)
      • 6.4.3 深入理解堆叠上下文(下)
    • 6.5 粘性定位
    • 6.6 本章小结

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

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

相关文章

Dockerfile样例

一、基础jar镜像制作 ## Dockerfile FROM registry.openanolis.cn/openanolis/anolisos:8.9 RUN mkdir /work ADD jdk17.tar.gz fonts.tar.gz /work/ RUN yum install fontconfig ttmkfdir -y && yum clean all && \chmod -R 755 /work/fonts ADD fonts.conf …

《Sui区块链:重塑去中心化应用的新星与未来潜力》

目录 引言 一、Sui 1、 技术架构 2、 编程语言 3、Move起源 4、Move的几个关键点&#xff1a; 5、Move 智能合约编程语言 6、智能合约编程语言可以做什么 7、和其他编程语言有什么不同 8、 安全性 9、开发者体验 10、生态系统 11、 未来发展 总结 引言 在区块链技…

vue后台管理系统从0到1(5)

文章目录 vue后台管理系统从0到1&#xff08;5&#xff09;完善侧边栏修改bug渲染header导航栏 vue后台管理系统从0到1&#xff08;5&#xff09; 接上一期&#xff0c;我们需要完善我们的侧边狼 完善侧边栏 我们在 element 组件中可以看见&#xff0c;这一个侧边栏是符合我们…

Linux驱动开发——platform平台总线

bus_type 一、主要作用 设备管理 bus_type负责管理连接在特定总线上的设备。它维护一个设备链表&#xff0c;其中包含了所有注册到该总线上的设备。通过这个链表&#xff0c;内核可以方便地遍历和管理连接在该总线上的设备。例如&#xff0c;对于 PCI 总线&#xff0c;bus_typ…

无人机之视觉技术篇

一、视觉传感器的类型 摄像头&#xff1a; 最常见的视觉传感器&#xff0c;能够捕捉可见光图像和视频。 通过单目、双目或多目摄像头的组合&#xff0c;无人机能够实现立体视觉&#xff0c;从而估算距离、深度&#xff0c;并进行物体识别和追踪。 红外传感器&#xff1a; …

【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制

文章目录 前言1. CPU提供的栈机制2. push指令3. 问题4. 问题的分析与解答5. pop指令结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深…

基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发

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

英伟达开源最新大模型Nemotron 70B后,只有OpenAI o1一个对手了

来源 | 机器之心 今天&#xff0c;英伟达又开源了一个性能超级强大的模型 —— Llama-3.1-Nemotron-70B-Instruct&#xff0c;它击败了 OpenAI 的 GPT-4o 和 Anthropic 的 Claude-3.5 Sonnet 等多个开闭源模型。 从命名来看&#xff0c;显然 Llama-3.1-Nemotron-70B-Instruct …

MySQL-15.DQL-排序查询

一.DQL-排序查询 -- 排序查询 -- 1.根据入职时间&#xff0c;对员工进行升序排序 select * from tb_emp order by entrydate asc ;-- 2.根据入职时间&#xff0c;对员工进行降序排序 select * from tb_emp order by entrydate desc ;-- 3.根据 入职时间 对公司员工进行 升序排序…

scala 高阶函数(2)上

学习目录 一.reduce reduce的含义 idea实例 二.reduceLeft-reduceRight reduceLeft-reduceRight的含义 idea实例 练习&#xff1a;求最值

word建立目录以及修改页码

1、为word建立新的目录 &#xff08;1&#xff09;选中word中的标题设置为第几级标题&#xff0c;将所有的标题均设置完成。最后可以鼠标右击标题&#xff0c;对不同的标题字体大小等进行设置。右击-->修改-->格式-->段落 &#xff08;2&#xff09;在word中插入新的…

【多模态大模型】 端侧多模态模型 Qwen2-VL-2B-Instruct

【多模态大模型】 端侧多模态模型 Qwen2-VL-2B-Instruct Qwen2-VL-2B-Instruct 模型介绍模型测评运行环境安装运行模型Image Resolution for performance boosttwo methods for fine-grained control over the image size input to the model: 下载开源协议参考 Qwen2-VL-2B-In…

专题十二_floodfill(洪水灌溉)算法_算法专题详细总结

目录 1. 图像渲染&#xff08;medium&#xff09; 解析&#xff1a; 函数头&#xff1a; 函数体&#xff1a;固定模板 设置全局变量&#xff1a; 总结&#xff1a; 2. 岛屿数量&#xff08;medium&#xff09; 解析&#xff1a; 注意&#xff1a; 总结&#xff1a; …

利用由 Search AI 提供支持的自动导入功能加速 Elastic Observability 中的日志分析

作者&#xff1a;来自 Elastic Bahubali Shetti 通过自动化自定义数据集成&#xff0c;以创纪录的速度将日志迁移到 AI 驱动的日志分析。 Elastic 正在通过自动提取自定义日志来加速采用 AI 驱动的日志分析&#xff08;AI-driven log analytics&#xff09;&#xff0c;随着基…

时间序列预测(六)——循环神经网络(RNN)

目录 一、RNN的基本原理 1、正向传播&#xff08;Forward Pass&#xff09;&#xff1a; 2、计算损失&#xff08;Loss Calculation&#xff09; 3、反向传播——反向传播通过时间&#xff08;Backpropagation Through Time&#xff0c;BPTT&#xff09; 4、梯度更新&…

Flink时间语义和时间窗口

前言 在实际的流计算业务场景中&#xff0c;我们会发现&#xff0c;数据和数据的计算往往都和时间具有相关性。 举几个例子&#xff1a; 直播间右上角通常会显示观看直播的人数&#xff0c;并且这个数字每隔一段时间就会更新一次&#xff0c;比如10秒。电商平台的商品列表&a…

MySQL-15.DQL-分页查询

一.DQL-分页查询 -- 分页查询 -- 1. 从 起始索引0 开始查询员工数据&#xff0c;每页展示5条记录 select * from tb_emp limit 0,5; -- 2.查询 第1页 员工数据&#xff0c;每页展示5条记录 select * from tb_emp limit 0,5; -- 3.查询 第2页 员工数据&#xff0c;每页展示5条记…

6.计算机网络_UDP

UDP的主要特点&#xff1a; 无连接&#xff0c;发送数据之前不需要建立连接。不保证可靠交付。面向报文。应用层给UDP报文后&#xff0c;UDP并不会抽象为一个一个的字节&#xff0c;而是整个报文一起发送。没有拥塞控制。网络拥堵时&#xff0c;发送端并不会降低发送速率。可以…

Chromium 前端window对象c++实现定义

前端中window.document window.alert()等一些列方法和对象在c对应定义如下&#xff1a; 1、window对象接口定义文件window.idl third_party\blink\renderer\core\frame\window.idl // https://html.spec.whatwg.org/C/#the-window-object// FIXME: explain all uses of [Cros…

git 报错 SSL certificate problem: certificate has expired

git小乌龟 报错 SSL certificate problem: certificate has expired 场景复现&#xff1a; 原因&#xff1a; 这个错误表明你在使用Git时尝试通过HTTPS进行通信&#xff0c;但是SSL证书已经过期。这通常发生在使用自签名证书或证书有效期已到期的情况下。 解决方法: 1.如果是…