是否可以使字母间距相对于字体大小并正确继承?

2023-11-25

我的问题与此基本相同,但将“line-height”替换为“letter-spacing”:当继承相对行高时,它与元素的字体大小无关。为什么?我如何使其相对?

我的用例是这样的:

body {
    font-size: 18px;
    letter-spacing: 1.2em; /* I would like letter-spacing to be relative to the font-size across the document, at least until I override it */
}

.small {
    font-size: 14px;
    /* letter-spacing is 1.2em of 18px instead of 14px */
}

我知道它不起作用的原因是计算值而不是指定值是继承的,所以我必须重新指定letter-spacing每次font-size变化。但我希望有一些类似于无单位值的东西line-height work.

当然我可以这样做:

* {
    letter-spacing: 1.2em;
}

但是我无法在某些元素上停止级联,就像我能够做到的那样line-height:

body {
    font-size: 18px;
    line-height: 1.5;
}

.normal-line-height {
    line-height: normal;
    /* all the descendants of this element will have a normal line-height */
}

我的意思是,当然,我总是可以做到这一点......

.normal-letter-spacing, .normal-letter-spacing * {
    letter-spacing: normal;
}

但它仍然没有我想要的那么优雅。我认为这个问题没有一个优雅的解决方案,但我想问一下,以防我遗漏了什么。


CSS 变量并未得到广泛支持,但可以解决问题:

body {
  font-size: 18px;
  --spacing: 1.2em;
}
.normal-letter-spacing { /* No need to select `.normal-letter-spacing *` */
  --spacing: normal;
}
body * {
  letter-spacing: var(--spacing);
}
.small {
  font-size: 14px;
}
<div>
  <p>Lorem ipsum</p>
  <p class="small">Lorem ipsum</p>
</div>
<hr />
<div class="normal-letter-spacing">
  <p>Lorem ipsum</p>
  <p class="small">Lorem ipsum</p>
</div>

它们之所以有效,是因为自定义属性计算到指定值:

计算值:用变量替换的指定值(但请参见 “无效变量”的散文)

因此,与发生的情况不同letter-spacing, 1.2em不转换为绝对长度。

然后,您可以告诉所有要使用的元素--spacing作为价值letter-spacing. So 1.2em将根据每个元素的字体大小在本地进行解析。

Unlike * { letter-spacing: 1.2em; },该方法设置--spacing: 1.2em仅有一次,在body,并让它通过继承传播。因此,如果你想改变子树中的值,你只需要覆盖--spacing在根中。您不必选择所有子树。

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

是否可以使字母间距相对于字体大小并正确继承? 的相关文章

随机推荐

  • MongoDB c# 驱动程序 - 名为 Id 的字段可以不是 Id 吗?

    更具体地说 有一个类 class X string Id get set class Y X ObjectId MyId get set 我希望 MyId 成为 Y 的 id 即映射到 id 是否可以 在这段代码之后我得到一个异常 var
  • SQLAlchemy - 如何映射只读(或计算)属性

    我试图弄清楚如何映射一个简单的只读属性 并在保存到数据库时触发该属性 一个人为的例子应该可以让这一点更加清楚 首先 一个简单的表格 meta MetaData foo table Table foo meta Column id Strin
  • 用因子替换一定范围内的数字[重复]

    这个问题在这里已经有答案了 给定一个由一系列整数 年龄 组成的数据帧列 我想将整数范围转换为序数变量 我当前的代码不起作用 我该怎么做 df lt read table http dl dropbox com u 822467 df csv
  • unity Shader 使用 Shader.Find 时返回 NULL

    就像声明的那样here我不是唯一发现以下问题的人 Shader Find 返回 Null 在上面的链接中 他们通过在资源文件夹中创建某些内容 给出了解决方案 但我不确定我是否理解 首先 这对于所有情况都是必要的吗 意味着 Shader Fi
  • 更改 Windows 窗体中的内容

    我正在使用 Windows 窗体在 C 中制作一个应用程序 我想完全交换 Windows 窗体中的所有内容并将其替换为其他内容 有什么方便的方法可以做到这一点吗 示例 我有一个菜单 当我单击 开始 时 我希望菜单消失并开始游戏 我没有使用
  • Windows Phone 7.1 和 Windows Phone 8 上的 Sqlite

    我正在开发一个适用于 Windows Phone 7 1 7 5 8 必须适用于两者 的应用程序 其中需要数据库连接 该应用程序已经针对 Iphone 和 Android 实现 因此我必须使用那里的数据库文件 以使所有应用程序的数据库结构都
  • 我是否使用正确的方法来监视创建句柄时要执行的任务?

    是否有普遍接受的最佳实践来创建自行取消订阅的事件处理程序 例如 我想到的第一件事是 Foo cs Bar bar new Bar add l req d state EventHandler handler new EventHandler
  • 在 Android 应用程序中从 Java JSch 中的字符串或资源加载私钥

    我正在编写一个应用程序 该应用程序应该使用 JSch 通过 SSH 访问我的私人服务器 由于我已经设置了公钥身份验证 因此我希望此应用程序以相同的方式进行身份验证 我将是唯一使用此应用程序的人 因此我想将我的密钥直接存储在应用程序内 例如硬
  • 如何使用 git-cache-meta?

    我想将目录的权限保留在 git 存储库中 似乎一种简单的方法是使用git cache meta 其用途的示例和最小解释是什么 如果您指的是this实施git cache meta 那么您需要做的就是确保该脚本位于您的 PATH 中 将其放入
  • 当警告趋势出现时,如何将构建标记为不稳定?

    因此 我们将 Jenkins 与 MS Build 结合使用来构建我们的项目 我们还有一个警告插件以及我们项目中的大量警告 我正在努力与这些警告作斗争 我想要采取的步骤之一是 当最后一个构建中的警告数量大于前一个构建时 将构建标记为不稳定
  • PHP 中的整数四舍五入到最接近的 5 的倍数

    搜索将数字四舍五入到最接近的 5 倍数的函数 22 gt 20 23 gt 25 40 gt 40 46 gt 45 48 gt 50 等等 尝试过这个总是返回更高的值 5 ceil n 5 Use round 代替ceil 5 round
  • Laravel:任务调度[并行]

    我有多项任务需要每隔一两个小时完成一次 所有这些都已通过 Laravel 使用以下命令作为 cron 作业进行安排 schedule gt command email notifications1 gt cron 15 schedule g
  • 如何在package.json中使用环境变量

    因为我们不希望项目代码中包含敏感数据 包括 package json 文件 所以在我看来 使用环境变量将是一个合理的选择 示例 package json dependencies accounting 0 4 0 async 1 4 2 m
  • JavaScript 中的 For..In 循环 - 键值对

    我想知道是否有办法做类似 PHP 的事情foreachJavaScript 中的循环 我正在寻找的功能类似于这个 PHP 片段 foreach data as key gt value 我正在看JSfor in循环 但似乎没有办法指定as
  • dyld:未加载库:@rpath/libswiftCore.dylib /未找到图像

    我正在从 xcode 到我的 iOS 设备运行我的应用程序 并且在 iOS 设备上出现此屏幕和黑屏 控制台文本 dyld Library not loaded rpath libswiftCore dylib Referenced from
  • 如何设置(组合)表中的两个主键

    对于一个小型的销售相关应用程序 我们使用逻辑数据模型设计数据库 上台转换成实体模型 在SQL Server Management Studio Express中创建表时 根据我们的逻辑数据模型 我们需要组合两个属性来形成唯一的id 是否可以
  • 什么是协程?

    什么是协程 它们与并发有何关系 协程和并发在很大程度上是正交的 协程是一种通用控制结构 流量控制在两个不同的例程之间协作传递而不返回 Python 中的 yield 语句就是一个很好的例子 它创建一个协程 当遇到 yield 时 函数的当前
  • 我如何知道我的 ansible 使用的是哪个版本的 Jinja2?

    我尝试使用pip list and pip freeze没有成功 这可能是显而易见的事情 但到目前为止我还无法找到它 将此文件拖放到 action plugins jin ver py from ansible plugins action
  • python 在哪里查找 Windows 上由 ctypes.cdll. 打开的 dll?

    恐怕我在互联网上找不到这个问题的简单答案 所以也许将来会因为这个问题而找到一个简单的答案 我正在使用 pywiiuse 它是 Windows 上 C wiiuse 库的 python 包装器 我已经获得了几个简单的 C 示例 只需将 dll
  • 是否可以使字母间距相对于字体大小并正确继承?

    我的问题与此基本相同 但将 line height 替换为 letter spacing 当继承相对行高时 它与元素的字体大小无关 为什么 我如何使其相对 我的用例是这样的 body font size 18px letter spacin