CSS自定义属性是否跨链接的CSS文档全局?

Dom*_*Dom 15 css css3 css-variables

我正在尝试使用CSS3自定义属性(又名CSS变量)取得很大成功.我在谈论--black: #000;background: var(--black);类型变量.但是,当变量在单独的链接文档中声明时,我没有运气.

随着CSS自定义属性超过72%的浏览器兼容性(src:https://caniuse.com/#search=css%20variables),我很想开始在一个非常特定的应用程序中使用它们,我知道我的观众正在使用它们兼容浏览器.

我想知道这些CSS自定义属性是否在所有链接的CSS文档中都是全局的,或者它们是否只是:root每个文档的全局(在元素中)?

我无法找到答案(即使在规范中)!

我读到的一些研究:

我的具体问题发生在Ruby on Rails应用程序中,其中我将CSS自定义属性包含在<style>SCSS样式表之前的块中,其中包括部署时要预编译的样式.如果我将变量包含在SCSS的顶部,一切正常.但是该<style>块包含主题变量,需要在运行时由ERB编译.

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      :root {
        --primary-color: #000;
      }
    </style>
    <%= stylesheet_link_tag 'application', media: 'all' %>
  </head>
</html>
Run Code Online (Sandbox Code Playgroud)

tha*_*you 19

MDN:

自定义属性参与级联:它们中的每一个都可以出现多次,并且变量的值将匹配由级联算法决定的自定义属性中定义的值.

它就像任何其他CSS属性一样工作.它应该在目标元素的祖先中声明.所以通常它会被声明为顶级元素htmlroot:.

CSS自定义属性是在外部CSS文件还是同一文件中声明无关紧要.

以下是使用两个外部CSS文件的示例.它适用于Firefox,Safari和Chrome.

https://thatseeyou.github.io/css3-examples/basics/customproperty.html

variables.css :

:root {
    --red: #f00;
    --green: #0f0;
    --blue: #00f;
}
Run Code Online (Sandbox Code Playgroud)

style.css :

.red {
    background-color: var(--red);
}
.green {
    background-color: var(--green);
}
.blue {
    background-color: var(--blue);
}
Run Code Online (Sandbox Code Playgroud)

HTML :

<!DOCTYPE html>
<html lang="en">
    <head>
        <link href="customproperty/variables.css" rel="stylesheet">
        <link href="customproperty/style.css" rel="stylesheet">
        <style>
            .module {
                --red: #800;
                --green: #080;
                --blue: #008;
            }
        </style>
    </head>
    <body>
        <div class="red">red</div>
        <div class="green">green</div>
        <div class="blue">blue</div>
        <div class="module">
            <div class="red">red in module</div>
            <div class="green">green in module</div>
            <div class="blue">blue in module</div>
        <div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 而且,作为旁注,它可以跨越 Shadow dom 边界 (2认同)