【发布时间】:2019-06-05 18:38:15
【问题描述】:
假设我有一个元素 #banner 和 font-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或共享父元素) -
那么除非浏览器修复CSS
attr()函数的兼容性问题,否则没有办法做到这一点? -
即使使用 attr() 我也不知道如何使用兄弟元素来做到这一点
-
@TemaniAfif 与其同级元素直接交互的元素,它可以使用
attr()函数从同级元素中检索到的 css 变量值。 -
在这种情况下,只需使用内联 CSS 变量而不是属性 (jsfiddle.net/vgzuyLkb)。如果您能够设置属性,则可以设置内联样式
标签: css css-selectors css-variables css-calc