【CSS in Depth 2 精译_020】3.3 元素的高度

news2024/11/25 12:22:40

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

  • 第一章 层叠、优先级与继承(已完结)
    • 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.1.1 内容水平居中
      • 3.1.2 逻辑属性
      • 3.1.3 用好逻辑属性的简写形式
    • 3.2 盒模型(已完结)
      • 3.2.1 避免使用魔数
      • 3.2.2 调整盒模型
      • 3.3.3 全局设置 border-box
    • 3.3 元素的高度 ✔️
      • 3.3.1 控制溢出行为 ✔️
      • 3.3.2 百分比高度的备选方案 ✔️
      • 3.3.3 使用 min-height 和 max-height ✔️
    • 3.4 负的外边距(精译中 ⏳)

文章目录

    • 3.3 元素的高度
      • 3.3.1 控制溢出行为
      • 3.3.2 百分比高度的备选方案
      • 3.3.3 使用 min-height 和 max-height

3.3 元素的高度

元素的高度(即块的尺寸)处理起来可能会比较麻烦。按照常规流的设计,宽度是受限的,而高度则不受限。因此,容器的高度是由其内容天然决定的,而非容器自身决定。通常情况下,最好避免给元素(尤其对包含大量内容的元素)设置确切的高度,尽管时常会有这样的冲动。

3.3.1 控制溢出行为

当元素高度被设为一个固定值,内容就可能 溢出(overflowing 容器。当内容在限定区域放不下而被迫渲染到父元素外面时,就会发生这种现象,如图 3.10 所示。文档流不考虑溢出的情况,容器后面的所有内容都会渲染到溢出内容的上面(译注:原书这里并没有配图,源代码中也没有相应页面,因此我手动补了一个截图 3.10.1,以方便理解)。

图 3.10 内容溢出了容器

图 3.10 内容溢出了容器

图 3.10.1 容器后续内容渲染到溢出内容的上方示意图

图 3.10.1 容器后续内容渲染到溢出内容的上方示意图

overflow 属性可以控制溢出内容的行为,该属性支持以下 5 个值:

  • visible(默认值)—— 所有内容都可见,即使溢出容器边缘。
  • hidden —— 溢出容器内边距边缘的内容将被裁剪而不可见;用户也无法通过正常滚动看到这些内容,但仍能通过 JavaScript 编程的方式来滚动该元素。
  • clip —— 类似于 hidden ,但通过编程实现滚动的方式也被禁用了。
  • scroll —— 容器出现滚动条,用户可以滚动查看剩余内容。在某些操作系统中,即便内容都可见,也会出现水平和垂直两种滚动条,只是在这种情况下滚动条会被禁用(置灰)。
  • auto —— 仅在内容溢出容器时出现滚动条。

图 3.11 展示了内容溢出时四种 overflow 取值下的容器渲染情况。

图 3.11 从左至右 overflow 取值分别为 visible、hidden、scroll、auto 的对比效果

图 3.11 从左至右 overflow 取值分别为 visible、hidden、scroll、auto 的对比效果

通常情况下,我更倾向使用 auto 而非 scroll,因为在大多数情况下,我并不想让滚动条一直出现,除非万不得已。

水平方向的溢出

除了垂直溢出,内容也可能在水平方向溢出。比如,当在一个很窄的容器中放入一条很长的 URL 地址;或者在一个小型移动设备上查看一个包含很多列的表格的时候。此时适用的溢出规则与垂直溢出时一致。

也可以使用 overflow-x 属性单独控制水平方向的溢出,或者用 overflow-y 来控制垂直溢出。这些属性都支持 overflow 的所有值。但若将 xy 方向显式声明为不同的取值时,一旦其中一个为 hidden,往往会产生不可预知的效果;在这种情况下,应该改用 clip

使用滚动条时务须谨慎。浏览器已经自带一个滚动条来滚动页面,如果网页内部再嵌套多个滚动区,用户体验可能会很糟糕。如果用户使用鼠标滚轮向下滚动页面,当鼠标到达一个较小的滚动区,滚轮就会停止滚动页面,转而去滚动较小的区域。

3.3.2 百分比高度的备选方案

用百分比来指定高度也有问题。百分比参考的是元素包含块(containing block)的大小,而容器的高度通常是由子元素的高度决定的。这样就产生了循环定义(circular definition),浏览器没法解析,从而会忽略该声明。想让百分比高度生效,就必须给父元素一个确切的高度。

百分比高度的一个有效应用场景是用在绝对定位的元素上,此时元素的尺寸与其容器息息相关。本书后续章节会专门介绍定位相关的知识。

开发者往往会在下面两个应用场景中,因为尝试百分比高度而陷入困境:

第一个场景,是想让容器填满整个屏幕。这时可能需要将 height: 100% 给到某个元素,进而到其容器,并沿着 DOM 树一直向上,直到将它应用到 <body><html> 元素。其实更好的方案是使用视口相对单位(viewport-relative units,相关内容第二章已有论述),因为此时无非是想要一个 100svh/lvh 的高度效果。

第二个应用场景,是需要创建等高列的时候。页面设计往往需要两个或多个元素并排且具有相同的高度。而让一个元素的尺寸去参照同级别相邻元素的做法,在 CSS 的历史上是一件非常棘手的事。要实现这一需求,以前需要一些非常取巧的手段;而如今只要应用更现代的技术就能轻松搞定。在后续介绍 flexbox 弹性盒布局和 grid 网格布局的相关章节中,我们将一探究竟。

3.3.3 使用 min-height 和 max-height

min-heightmax-height(以及对应的逻辑属性 min-block-sizemax-block-size)是两个非常有用的属性(properties)。通过这两个属性设置一个最小或最大值,就能让元素在给定范围内缩放自如,不用再显式定义高度了。

如果要将一张大图放在一大段文字后面,但又担心图片溢出容器,就可以用 min-height 给容器设置一个最小高度,而不必指定确切的高度。这么一来,该容器的高度最小也不会低于设定的值;要是内容过多,浏览器则会让其高度自然升高,以免内容溢出。

如图 3.12 所示的三个元素,左侧的元素没有设置 min-height,因此高度是由内容自然决定的;其余两个元素的 min-height 均设为 3em。对于中间的元素,自然高度虽然不足 3em,但 min-height 将其补到了 3em;而右边的元素内容够多,其高度已然超过了 3em,此时容器则会自然升高来容纳它们。

图 3.12 三个元素、一个没有指定高度、另两个设置了 min-height 为 3em 的效果对比

图 3.12 三个元素、一个没有指定高度、另两个设置了 min-height 为 3em 的效果对比

如果要在容器上设置高度 height,大多数情况下我都会改用 min-height。这样做往往就不必为后续的溢出问题伤脑筋了。

相应地,属性 max-height 则会让元素尺寸自然增大到某个值,一旦达到该值,元素就不再升高,其内容也将随之溢出。类似的属性还有 min-widthmax-width(以及 min-inline-sizemax-inline-size),用于限定元素的宽度。

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

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

相关文章

Linux:Linux进程概念

目录 前言 1. 冯诺依曼体系结构 2. 操作系统 2.1 什么是操作系统 3. 进程 3.1 基本概念 3.2 描述进程——PCB 3.3 进程和程序的区别 3.4 task_struct-PCB的一种 3.5 task_struct的内容分类 4. 查看进程 4.1 通过系统文件查看进程 4.2 通过ps指令查看进程 4.3 …

Redis7(二)Redis持久化双雄

持久化之RDB RDB的持久化方式是在指定时间间隔&#xff0c;执行数据集的时间点快照。也就是在指定的时间间隔将内存中的数据集快照写入磁盘&#xff0c;也就是Snapshot内存快照&#xff0c;它恢复时再将硬盘快照文件直接读回到内存里面。 RDB保存的是dump.rdb文件。 自动触发…

记录些Spring+题集(3)

百万QPS下热点数据的收集方案 在高并发场景下&#xff0c;如京东、淘宝的秒杀活动开始时候&#xff0c;会有很多的用户同时抢购秒杀商品&#xff0c;由于同一个场次成百上千种商品参与秒杀活动&#xff0c;但是热点的商品往往就只有那么几十个左右&#xff0c;此时系统的90%的…

linux桌面运维---第八天

1、rm命令&#xff1a; 用法&#xff1a;删除一个文件或者目录。 语法&#xff1a;rm [选项] name... 选项&#xff1a; -f 即使原档案属性设为唯读&#xff0c;亦直接删除&#xff0c;无需逐一确认。-r 将目录及以下之档案亦逐一删除。需要进行一一确认 2、ln命令&#…

Lamp 小白菜鸟从入门到精通

前言 “LAMP包”的脚本组件中包括了CGIweb接口&#xff0c;它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序&#xff0c;并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流&#xff0…

SpringBoot限制请求访问次数

本篇文章的主要内容是SpringBoot怎么限制请求访问次数。 当我们的服务端程序部署到服务器上后&#xff0c;就要考虑很多关于安全的问题。总会有坏人来攻击你的服务&#xff0c;比如说会窃取你的数据或者给你的服务器上强度。关于给服务器上强度&#xff0c;往往就有高强度给服务…

【ffmpeg入门】安装CUDA并使用gpu加速

文章目录 前言CUDACUDA是什么CUDA 的主要组成部分CUDA 的优点CUDA 的基本编程模型安装CUDA ffmpeg使用gpu加速为什么需要使用gpu加速1. 提高处理速度2. 减少 CPU 负载3. 提高实时处理能力4. 支持高分辨率和复杂编码格式5. 提供更好的可扩展性6. 提高能效 ffmpeg使用gpu加速常用…

在项目中加入 husky + lint-staged + eslint,代码检测格式化

背景 由于日常工作的多人协作中&#xff0c;会因为个人代码编写风格导致代码在不同人电脑上&#xff0c;会有异常代码格式的提示&#xff0c;为了解决这个小问题&#xff0c;我们可以使用 husky lint-staged 来对代码进行一定程度上的格式化&#xff0c;使格式风格统一&#x…

初谈Linux信号-=-信号的产生

文章目录 概述从生活角度理解信号Linux中信号信号常见的处理方式理解信号的发送与保存 信号的产生core、term区别 概述 从生活角度理解信号 你在网上买了很多件商品&#xff0c;再等待不同商品快递的到来。但即便快递没有到来&#xff0c;你也知道快递来临时&#xff0c; 你该…

【 DHT11 温湿度传感器】使用STC89C51读取发送到串口、通过时序图编写C语言

文章目录 DHT11 温湿度传感器概述接线数据传送通讯过程时序图检测模块是否存在 代码实现总结对tmp tmp << 1;的理解对sendByte(datas[0]/10 0x30);的理解 DHT11 温湿度传感器 使用80C51单片机通过读取HDT11温湿度传感的数据&#xff0c;发送到串口。 通过时序图编写相应…

Windows下lapack的编译

文章目录 LAPACK库LAPACK库的地址LAPACK库的安装和编译 LAPACK库 LAPACK&#xff08;Linear Algebra PACKage&#xff09;库&#xff0c;是用Fortran语言编写的线性代数计算库&#xff0c;包含线性方程组求解&#xff08;AXb&#xff09;、矩阵分解、矩阵求逆、求矩阵特征值、…

javac详解 idea maven内部编译原理 自制编译器

起因 不知道大家在开发中&#xff0c;有没有过下面这些疑问。有的话&#xff0c;今天就一次解答清楚。 如何使用javac命令编译一个项目&#xff1f;java或者javac的一些参数到底有什么用&#xff1f;idea或者maven是如何编译java项目的&#xff1f;&#xff08;你可能猜测底层…

4核16G服务器支持多少人?4C16G服务器性能测评

租赁4核16G服务器费用&#xff0c;目前4核16G服务器10M带宽配置70元1个月、210元3个月&#xff0c;那么能如何呢&#xff1f;配置为ECS经济型e实例4核16G、按固定带宽10Mbs、100GB ESSD Entry系统盘。 那么问题来了&#xff0c;4C16G10M带宽的云服务器可以支持多少人同时在线&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日派对座位安排(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

原神运行闪退报错怎么办解决办法 crossover24运行exe游戏程序错误没反应

对于Mac用户来说&#xff0c;能够在Mac上体验Windows游戏是一种极大的便利。然而&#xff0c;当尝试运行热门游戏《原神》时&#xff0c;一些用户可能会遇到闪退或报错的问题。这不仅影响了游戏体验&#xff0c;也让人倍感挫败。幸运的是&#xff0c;有多种方法可以帮助解决这些…

优化德育评估流程:智慧职校的考核类型设置功能

智慧职校德育管理系统的引入标志着教育领域向着更加智能化、高效化方向迈进的重要一步。其中&#xff0c;考核类型设置功能作为系统的核心模块之一&#xff0c;扮演着不可或缺的角色。这一功能的创新之处在于它赋予了学校前所未有的灵活性和自主权&#xff0c;让教育者能够根据…

PyTorch的自动微分模块【含梯度基本数学原理详解】

文章目录 1、简介1.1、基本概念1.2、基本原理1.2.1、自动微分1.2.2、梯度1.2.3、梯度求导1.2.4、梯度下降法1.2.5、张量梯度举例 1.3、Autograd的高级功能 2、梯度基本计算2.1、单标量梯度2.2、单向量梯度的计算2.3、多标量梯度计算2.4、多向量梯度计算 3、控制梯度计算4、累计…

【香橙派开发板测试】:在黑科技Orange Pi AIpro部署YOLOv8深度学习纤维分割检测模型

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ Orange Pi AIpro开发板相关介绍1.1 &#x1f393; 核心配置1.2 ✨开发板接口详情图1.3 ⭐️开箱展示 二、2️⃣配置开发板详细教程2.1 &#x1f393; 烧录镜像系统2.2 ✨配置网络2.3 ⭐️使用SSH连接主板 三、…

KAFKA搭建教程

KAFKA搭建教程 期待您的关注 KAFKA学习笔记 帮助更多人 目录 KAFKA搭建教程 1.下载Kafka并解压 2.添加环境变量 3.修改 server.properties 文件 4.将kafka复制到其它节点 5.修改node1、node2节点的broker.id 6.将master的环境变量同步到node1、 node2 7.启动zookeeper…

网络需求实验报告

拓扑图 需求 1、通过DHCP服务&#xff0c;给PC4和PC5分配IP地址、网关、掩码、DNS服务器IP地址 2、Client-1要求手工配置IP地址&#xff0c;为192.168.1.1, c 3、telnet客户端可以远程登录telnet服务器进行设备管理&#xff0c;并成功修改telnet服务器的名字为123 &#xff0c…