小数和百分比行高有什么区别

2023-12-29

(这个问题最初引用了w3c学校,我已经更正了该引用)

根据w3c http://www.w3.org/TR/CSS21/visudet.html#propdef-line-heightCSSline-height值可以设置如下:

<number>该属性的使用值是该数字乘以元素的字体大小。负值是非法的。计算值与指定值相同。

<percentage>属性的计算值是该百分比乘以元素的计算字体大小

So line height = font-size × number or line height = font-size × percentage ÷ 100%,这应该是相同的。

并且行高是继承的。

但是,我注意到增加字体大小的嵌套元素会导致完全不同的行高,如下所示:

C 列(蓝色)是我所期望的。

参见 jsfiddle http://jsfiddle.net/bkunsr0h/1/.

如果您为了简洁起见而原谅这种 css 语法的混搭,那么 A 列是:

 div {line-height:140%;} > div > div «content»

B 栏是:

 div {line-height:140%;} > div > div {line-height:140%} «content»

C 列是:

 div {line-height:140%;} > div > div {line-height:1.40} «content»

理解的一半

所以看起来像 A 列,行高是计算为长度(例如像素)并设置在外部 div 上font-size。由此算出,长度值然后继承,这就是为什么当字体大小随后增加时它看起来被压扁的原因。

两者的规格均指乘以字体大小的值。所以这里指的是设置了line-height的元素的字体大小,而不是继承line-height的元素的字体大小。

这样就解释了一半。但 B、C 列仅指定 1.4 或 140% 不同,两者是相同的。一定?!

我预计蓝色 C 列的行为至少适用于 B 列和 C 列。(虽然我认为它也不是 A 列,这很奇怪,但至少我明白这一点。)

我查了一下,Firefox 和 Chromium 也做了同样的事情。

你可以解释吗?


首先根据给定元素的字体大小计算百分比行高。这个计算值是then由后代继承预烤。另一方面,小数线高度的计算值是该十进制值(这就是“指定值”的含义);你最终看到的是used值,这是根据每个后代自己的字体大小“计算”的after它已被继承。在 CSS 中,它是继承的计算值 http://www.w3.org/TR/CSS21/cascade.html#inheritance,不是使用值。

让我们从容器开始:

.container {
    font-size:1rem;
    line-height:140%;
}

该容器的计算字体大小为 1rem,计算行高为 1.4rem。

  1. 然后,计算出的行高将由 A 列继承。A 列的字体大小为 1.2rem,行高为 1.4rem。

    The same然后,行高由 A 列的子项继承,因此其字体大小计算为 1.44rem(基于 A 列),并且其行高保持为 1.4rem。

  2. 您覆盖 B 列的行高,使其拥有自己的行高line-height:140%宣言。该百分比是根据 B 列的字体大小计算的。这使得 1.2rem 的 140%,而不是 1rem,导致行高为 1.68rem。

    然后该值由 B 列的子项继承。其字体大小计算为 1.44rem,行高为 1.68rem。

  3. 您可以使用 a 覆盖 C 列的行高line-height:1.40宣言。虽然C列的字体大小和行高的计算方式与B列的相同,但是什么是遗传由它的孩子是not1.4×1.2rem = 1.68rem;它是 1.4(一个比率,或者如果您愿意的话,可以是原始百分比,但不是长度)。

    因此,C 列的子项的计算行高为 1.4,继承自 C 列。然后使用该值根据其自身的字体大小计算子项的行高。因此其used行高为 1.4 × 1.44rem = 2.016rem。

埃里克·迈耶(Eric Meyer)有一个伟大的article http://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights关于小数与百分比线高度。我的解释恰好稍微复杂一些,但原理是相同的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小数和百分比行高有什么区别 的相关文章

随机推荐

  • 如何将llvm IR转换为c代码?

    有什么方法可以将 llvm IR 转换为 c 代码并保留其语义吗 例如 我们可以先将c代码编译到llvm IR 然后再将其编译回另一段c代码吗 我不希望这两个文件是相同的 但它们需要具有相同的功能 谢谢 您可以使用 C 后端 llc mar
  • 使用 MIDP 通过 http 从服务器读取 UTF8 字符串

    我想使用 java MIDP 从我控制的服务器读取 UTF 8 字符串 我的服务器正在发送 UTF 8 数据 下面的代码很接近 c StreamConnection Connector open myServer Connector REA
  • 使用样式或 Javascript 使图像变亮

    我想使用 css 或 javascript 在鼠标悬停时使网页上的图像变亮 我见过一些在样式中使用不透明度和滤镜的示例 但它们似乎对我不起作用 提前致谢 CP UPDATE 一个纯 CSS 解决方案是使用CSS 过滤器 https deve
  • 在 R 中读取二进制文件

    在以下代码中 可以导入具有这些属性的部分 LAS 文件版本 1 1 列表 项目格式 尺寸要求 X长4字节 Y长4字节 Z长4字节 强度无符号短 2 字节 返回编号 3 位 位 0 1 2 3 位 返回数 给定脉冲 3 位 位 3 4 5 3
  • 将页面映射到不同进程的地址空间

    可以使用以下命令读取和修改另一个进程地址空间中的内存ptrace 2 or process vm readv 2 process vm writev 2 但是我找不到系统调用来在另一个进程的地址空间中分配新内存 我目前能想到的唯一方法是向进
  • undefined 不是对象(评估 '_react.PropTypes.object')

    刚刚使用react native init创建了一个新项目 使用 react 16 0 0 react native 0 51 0 从 xcode 运行项目我收到以下错误 未处理的 JS 异常 模块 AppRegistry 不是已注册的可调
  • Antlr4:如何在语法中隐藏和使用令牌

    我正在解析一种定义两种类型的语句的脚本语言 控制语句和非控制语句 非控制语句总是以 而控制语句可能以以下结尾 or EOL n 语法的一部分如下所示 script statement EOF statement control statem
  • 在 PowerShell 中选择数组的所有对象的一个​​属性的值

    假设我们有一个对象数组 objects 假设这些对象有一个 Name 属性 这就是我想做的 results objects results Name 这可行 但是可以用更好的方式来完成吗 如果我做类似的事情 results objects
  • 无法绑定Margin属性?

    我正在尝试制作一种动画电影片段 其中在给定时刻只有一个字段可见 就像相机中的胶片一样 当前只有一个胶片场放置在镜头下方并准备被照亮 我尝试将其实现为一个带有另一个网格的网格 Film strip 在下面的代码中称为 pageContaine
  • 为什么x86很丑?为什么与其他人相比,它被认为是劣等的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我的 redis 密钥不会过期

    当生存时间达到 0 时 我的 Redis 服务器不会删除键 这是示例代码 redis cli gt SET mykey ismykey gt EXPIRE mykey 20 check TTL gt TTL mykey gt integer
  • 配置两节点 hazelcast 集群 - 避免多播

    上下文 Hazelcast 集群的两个节点 每个节点都位于一个离散的子网上 因此多播不适合也不适合节点定位 我想使用最少的 XML 配置文件 比如说hazelcast xml 将 Hazelcast 配置为使用 TCP IP 连接两个节点
  • 如何根据闪亮的输入选择对数据框进行子集化并用传单进行绘图

    我正在尝试使用 Rstudio 制作一个闪亮的应用程序来生成传单输出 请注意 shiny 是我以前从未使用过的包 因此脚本中可能存在除我当前遇到的错误之外的其他错误 我正在使用一个包含不同个体轨迹的数据帧 我想从中子集并绘制一只动物的轨迹以
  • 32位校验和算法比CRC32质量更好?

    是否有具有以下任一功能的 32 位校验和算法 输入数据大小 碰撞的分布更加均匀 这些与 CRC32 相关 由于 32 位存储空间的限制 我实际上不依赖第一个属性 但第二次 似乎就在那里could予以改进 有任何想法吗 谢谢 我需要具体的实现
  • 使用struts2使用动态参数进行重定向不起作用

    我在尝试使用动态参数重定向映射时遇到问题 我在 Struts2 中映射的方式
  • Facebook:应用程序配置不允许给定 URL

    从本周末开始 我们的一些较旧的 Facebook 游戏将无法加载 我认为这是由于游戏未获得访问令牌而导致的问题 因此无法代表用户 即 me 等 进行调用 我在 Javascript 控制台中看到以下内容 应用程序配置不允许给定 URL 应用
  • 'Zend_Db_Statement_Exception' 并显示消息 '无效的绑定变量名称 ':1'

    再会 背景信息 客户的托管服务器正在从 PHP 5 2 升级到 PHP 5 3 在 PHP 5 3 上测试时 客户端的应用程序崩溃了 具体来说 插入和更新方法是破坏应用程序的方法 该应用程序在 Zend Framework v1 7 2 中
  • WebAuthenticationBroker.AuthenticateAsync 引发异常

    我的代码使用 WebAuthenticationResult WebAuthenticationResult await WebAuthenticationBroker AuthenticateAsync WebAuthentication
  • 具有任意顺序的 JavaScript 依赖解决方案包括

    问题是这样的 我包含一个脚本 它使用另一个脚本 但是如果该依赖项还需要准备另一个脚本怎么办 这意味着加载它是不够的 但我还需要确保在执行之前调用了它的初始化回调 如果允许依赖项需要更多依赖项并在加载后显示它们 则 DOM 中脚本标签的顺序可
  • 小数和百分比行高有什么区别

    这个问题最初引用了w3c学校 我已经更正了该引用 根据w3c http www w3 org TR CSS21 visudet html propdef line heightCSSline height值可以设置如下