具有算术运算的 CSS 变量在速记属性中不起作用?

标签 css shorthand css-calc css-variables

请帮我找出为什么 CSS 变量中的算术运算会破坏代码。

我从一个带有一条规则的简单 CSS 文件开始:

html {
  font: 16px/32px Arial;
}

在浏览器中,它按写的方式工作:字体大小为 16px,行高为 32px,字体本身为 Arial。

然后我添加了变量:

html {
  --default-font-size: 16px;
  --default-line-height: var(--default-font-size);
  font: var(--default-font-size)/var(--default-line-height) Arial;
}

它也有效;以为行高是16px,因为我让它等于字体大小。

但是当我乘以第二个值时,字体声明停止工作:

html {
  --default-font-size: 16px;
  --default-line-height: var(--default-font-size) * 2;
  font: var(--default-font-size)/var(--default-line-height) Arial;  /* not working! */
}

所有属性 font-sizeline-heightfont-family 都设置为浏览器默认值。

如果我将 font 速记属性拆分为三个不同的速记属性,代码将再次正常运行:

html {
  --default-font-size: 16px;
  --default-line-height: var(--default-font-size) * 2;
  font-size: var(--default-font-size);
  line-height: var(--default-line-height);
  font-family: Arial;
}

前面的代码示例有什么问题,有没有办法让它在不拆分为普通属性的情况下工作?

最佳答案

你需要像这样使用calc:

html {
  --default-font-size: 16px;
  --default-line-height: calc(var(--default-font-size) * 2);
  font: var(--default-font-size)/var(--default-line-height) Arial;
}

--default-line-height 在被评估之前在 font 属性中被替换,所以你有这样的东西(无效 ):

font: var(--default-font-size)/var(--default-font-size) * 2 Arial;

通过使用 calc,您可以计算表达式并获得有效的语法。即使你的第三个例子也行不通。 CSS 无法识别乘号,因为它应该在 calc

中使用

p {
  --default-font-size: 16px;
  --default-line-height: calc(var(--default-font-size) * 4);
  font: var(--default-font-size)/var(--default-line-height) Arial;
}
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>

关于具有算术运算的 CSS 变量在速记属性中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850904/

相关文章:

由于未编辑指定的段落 ID,Javascript 函数无法正常运行

javascript - 翻译令人困惑的条件速记

css - 如何获得 CSS 变量的负值(又名自定义属性)

css - 如何防止 Less 尝试编译 CSS calc() 属性?

javascript - 如何在画廊 View 中的一系列动态 div 中使用 Jquery 更改最后一个弹出窗口(动态)的位置

css - JSF 富 :datatable column display very long text in multiple lines

html - DIV到页面右侧

html - 我的字体速记不起作用,其中包括字体大小和字体粗细属性

javascript - 理解 JavaScript 简写(if/&&)

css - 为什么 min() (或 max())不能与无单位 0 一起使用?