CSS - 获取其他元素的 属性

CSS - Get property of other element

我想知道是否可以在不使用 Javascript 或其他编程语言的情况下使用 Javascript DOM 来引用某些元素。
这就是我的意思。假设我们有两个 div 应该具有相同的高度。我想获得第一个 div 的高度以将其分配给第二个,如下所示:

#div1 {
    height:400px;
}

#div2 {
    height:#div1.height;
}

如您所见,我正在做与 document.getElementById("id").style.height 在 Javascript.
中完全相同的事情 是否有可能做到这一点?如果没有,我想知道是否存在论坛、网站等来讨论 CSS 改进或了解这种语言的发展。
提前致谢!

这是不可能的。你必须使用 JS 和 DOM.

使用CSS Flexbox....

查看this tutorialthis demo.

.container {
  align-items: stretch;
}

这个方法是使用 CSS Variable

/*css*/

body {
  --div-height: 400px;
}

#div1 {
  height: var(--div-height);
}

#div2 {
  height: var(--div-height);
}
<!DOCTYPE html>
<!---html--->
<html>

<head>
  <link rel="stylesheet" type="text/css" href="styles.css">
</head>

<body>
  <div id="div1">
    <p>This is div1</p>
  </div>
  <div id="div2">
    <p>This is div2</p>
  </div>
</body>

</html>

在这个例子中,我在 body 范围内声明了变量 --div-height ,所以 body 标签内的任何元素都可以通过 css.

访问这个变量

Internet Explorer 过去支持“CSS 表达式”,就像您描述的那样(有效?)。这从未被开发人员、其他浏览器或标准机构广泛采用。

为什么这不是一个好的设计的一般原则称为“关注点分离”,这是 W3C 特别一直大力提倡的。这个想法是定义抽象内容的语言(HTML)完全独立于定义视觉外观的语言(CSS)和定义动态行为的语言(JavaScript)。

虽然通常感觉将“快速”计算直接放在 CSS 中比创建单独的脚本更有意义,但实际上这会导致很多问题,例如:

  • 理解 JS 和 CSS 如何交互更复杂;哪个代码运行先,JS属性是反映计算值还是表达式本身等
  • 它重复了在创建 JavaScript
  • 时已经完成的工作
  • CSS 实施起来变得更加复杂,而且可能更慢且错误更多
  • 由于 CSS 不是作为一种编程语言设计的,因此当 代码 运行 时,理解和控制 将更加困难(如果可能的话) ;在实践中,这可能意味着表达式被重新计算的次数超过了它们需要的次数
  • CSS成为安全问题的新载体,尤其是当表达语言是图灵完备或接近图灵完备的时候

据说由于这些原因,IE 的实现性能很差(像大多数人一样,我从未认真使用过它)。它本质上只是一种将 JS 嵌入 CSS 文件的方法,因此它不适用于禁用脚本。

您可能会争辩说,仍然存在像您的示例那样的“简单”表达式的情况,并且这不需要图灵完备的语法。但是无论你如何定义“简单”,总会有一个点,你想要的表达方式不够“简单”,无论如何你都必须将所有东西都迁移到 JS。合乎逻辑的选择是让 CSS 只处理常量值(使其尽可能简单地实现),并使用 JS 进行 any 动态计算。

所以简短的回答是:W3C 和个别浏览器供应商考虑了 CSS 这个方向,并得出结论认为它弊大于利。

预计到达时间

重新阅读问题,不清楚您是在谈论一般表达式(如 width:element1.width*2),还是只是简单的符号值。 CSS-Variable 允许您使用宏类型变量,这使得样式表更易于编辑。但是,它不允许您将一个元素的高度设置为另一个元素的实际渲染 高度;这将涉及一个潜在的复杂的 运行 时间计算,并且由于上述原因,最好通过 JS 完成,您可以控制何时进行计算,如何考虑 CSS 转换,等等。