Internet Explorer 曾经支持像您描述的那样有效(有效?)的“CSS 表达式”。这从未被开发人员、其他浏览器或标准机构广泛采用。
为什么这不是一个好的设计的一般原则称为“关注点分离”,特别是 W3C 一直大力提倡的东西。这个想法是定义抽象内容的语言 (HTML) 完全独立于定义视觉外观的语言 (CSS) 和动态行为的语言 (JavaScript)。
尽管通常感觉将“快速”计算直接放入 CSS 中而不是创建单独的脚本是有意义的,但实际上这会导致很多问题,例如:
- 理解 JS 和 CSS 如何交互更复杂;哪个代码先运行,JS属性是反映计算值还是表达式本身等。
- 它重复了在创建 JavaScript 时已经完成的工作
- CSS 的实现变得更加复杂,而且速度可能更慢且错误更多
- 由于 CSS 不是作为编程语言设计的,因此(如果可能的话)代码运行时更难理解和控制;在实践中,这可能意味着重新计算表达式的频率超过了它们需要的频率
- CSS 成为安全问题的新载体,特别是当表达语言是图灵完备或接近它时
由于这些原因,IE 的实现据说性能很差(像大多数人一样,我从未认真使用过它)。它本质上只是一种将 JS 嵌入 CSS 文件的方法,因此它不适用于禁用脚本。
您可能会争辩说,仍然存在像您的示例这样的“简单”表达式的情况,并且这不需要图灵完备的语法。但是,无论您如何定义“简单”,总会出现您想要的表达式不够“简单”的情况,并且无论如何您都必须将所有内容迁移到 JS。合乎逻辑的选择是让 CSS 只处理常量值(使其实现尽可能简单),并使用 JS 进行任何动态计算。
所以简短的回答是:W3C 和个别浏览器供应商考虑了 CSS 的这个方向,并得出结论认为它弊大于利。
预计到达时间
重新阅读这个问题,不清楚您是在谈论一般表达式(如width:element1.width*2
),还是只是简单的符号值。CSS-Variable 确实允许您使用宏类型变量,这使得样式表更易于编辑。但是,它不允许您将一个元素的高度设置为另一个元素的实际渲染高度。这将涉及潜在的复杂运行时计算,由于上述原因,最好通过 JS 来完成,您可以控制何时进行计算、如何考虑 CSS 转换等。