【问题标题】:Assign CSS var() to style property value of another CSS element with pure CSS?使用纯 CSS 将 CSS var() 分配给另一个 CSS 元素的样式属性值?
【发布时间】:2019-06-05 18:38:15
【问题描述】:

假设我有一个元素 #bannerfont-size: 36px;,如下面的代码片段所示:

#banner {
    font-size: 36px;
    width: 100%;
    background-color: red;
    text-align: center;
}
<div id="banner">
  <h1>Hello StackOverflow!!</h1>
</div>

如何从#banner's css 属性font-size 检索36px 并将其分配给 css variable 以便我可以使用 calc()动态设置另一个元素的font-size 的函数,比如#someOtherBanner#banner's font-size 值除以说,3 从而返回12px


可以在下面的代码片段中看到我正在寻找的虚拟表示:

:root {
  --bannerFontSize: #banner.font-size;
}

#banner {
    font-size: 36px;
    width: 100%;
    background-color: red;
    text-align: center;
}
#someOtherBanner {
    font-size: calc(var(--bannerFontSize) / 3); // should return 12px
    width: 100%;
    background-color: green;
    text-align: center;
}
<div id="banner">
  <h1>Hello StackOverflow!!</h1>
</div>
<hr />
<div id="someOtherBanner">
  <h1>Hello from me too, StackOverflow!!</h1>
</div>

我发现可能有帮助的最接近的东西是CSS attr() 函数,它从 HTML 元素中检索属性的值(可以使用它来将元素的 css 属性设置为属性,同时将 css 变量设置为属性的值)但是根据CanIUse.com,目前不兼容任何浏览器。

使用 JavaScript 或 CSS 预处理器(如 SCSS)将是小菜一碟,但 Vanilla CSS 方法是什么?

【问题讨论】:

  • 开始:如果两个元素都没有任何父/子关系,那么考虑到继承就没有办法共享一些价值。即使是普通的 CSS 变量也不起作用(除非您考虑 :root 或共享父元素)
  • 那么除非浏览器修复CSSattr()函数的兼容性问题,否则没有办法做到这一点?
  • 即使使用 attr() 我也不知道如何使用兄弟元素来做到这一点
  • @TemaniAfif 与其同级元素直接交互的元素,它可以使用 attr() 函数从同级元素中检索到的 css 变量值。
  • 在这种情况下,只需使用内联 CSS 变量而不是属性 (jsfiddle.net/vgzuyLkb)。如果您能够设置属性,则可以设置内联样式

标签: css css-selectors css-variables css-calc


【解决方案1】:

您可以做的一件事是简单地使用与 both 横幅中的 font-size 和辅助横幅中的 padding 相同的 CSS 变量。

看起来像这样:

:root {
  --bannerFontSize: 36px;
}

#banner {
  font-size: var(--bannerFontSize);
  width: 100%;
  background-color: red;
  text-align: center;
}

#someOtherBanner {
  padding: calc(var(--bannerFontSize) / 3);
  width: 100%;
  background-color: green;
  text-align: center;
}
<div id="banner">
  <h1>Hello StackOverflow!!</h1>
</div>
<hr />
<div id="someOtherBanner">
  <h1>Hello from me too, StackOverflow!!</h1>
</div>

请注意,在您的示例中,您有一个除以 / 3px,而您想要 / 3

【讨论】:

  • / 3px 更正为/ 3。谢谢大佬提醒。是的,使用通用 css 变量将是解决此问题的最佳方法,但假设我必须更改站点的布局,其中包含一堆具有相同类名(不是 id)的元素,它们具有自己独特的内联 font-style在 HTML 中的属性,如果我可以检索元素的当前属性值并根据该值执行计算会更容易。
猜你喜欢
  • 1970-01-01
  • 2013-01-12
  • 2014-04-23
  • 2012-07-20
  • 2020-09-30
  • 2018-07-20
  • 1970-01-01
  • 2015-04-28
  • 2010-12-13
相关资源
最近更新 更多