【问题标题】:Using CSS @Variables [duplicate]使用 CSS @Variables [重复]
【发布时间】:2011-11-26 20:08:15
【问题描述】:

我正在尝试使用 CSS 变量。我在网上寻找教程,到目前为止所有的教程都有效。

这是我的 CSS:

@variables {
 defaultColor: #8E5050;
 defaultBackGround: #E1DBC3;
}
body {
 background: var(defaultBackGround);
}
a {
 color: var(defaultColor);
}

我也试过了:

body {
 background: @defaultBackGround;
}
a {
 color: @defaultColor;
}

它们都不起作用,我做错了什么?谢谢

【问题讨论】:

  • 可能是因为对它们的支持非常有限,而且它们在 3 年多之后的这个阶段只是一个提案。你找不到太多关于它们的信息是有原因的。查看 Petah 提到的建议的 CSS 预处理器。
  • 您只是缺少双破折号前缀-- 例如--defaultColor: #8E5050; 并使用该变量 background: var(--defaultBackGround);
  • @DaveEveritt 这是一个老问题,那时 CSS 变量和自定义属性还不是问题!现在下面有一个 answer 是关于原生变量的。

标签: css css-variables


【解决方案1】:

我会使用 CSS 预处理器,例如 SassLess

【讨论】:

【解决方案2】:

您使用的变量不是普通 CSS 规范的一部分。看起来您正在使用某些 CSS 框架编写代码。

如果您确实想使用纯 CSS,则每次都要手动设置颜色/边距/填充的值。但是你最喜欢的文本编辑器中一个好的“搜索和替换”功能可能会帮助你。 :)

如果您想使用这些变量,@Petah 可以为您提供正确的答案。 :)

【讨论】:

    【解决方案3】:

    使用原生 CSS3 变量!

    变量实际上是 CSS3 中的原生特性 - 您可以在 MDN 阅读规范。但是,它们仍然是一个相对较新的功能,因此您可能需要在使用它们之前查看浏览器支持图表here

    话虽如此,最新版本的 Chrome、Firefox、Opera、Safari 和 Microsoft Edge 都支持 CSS 变量。

    以下代码显示了如何使用 CSS 变量的示例:

    :root {
        --name: #ff0000;
    }
    p {
        color: var(--name);
    }
    

    这是如何工作的?

    如果在元素的父容器上定义了变量,则可以使用它们 - 这里我使用:root,以便在任何地方都可以访问该变量。

    可以使用--name:content; 定义变量,其中name 是变量的名称,内容是变量的内容(可以是颜色,如#ff0000,大小如1em,或更多可能值之一)。

    然后,只需在 CSS 代码中使用 var(--name) 而不是属性,其中 name 再次是您调用变量的名称。

    【讨论】:

    • 虽然这在理论上可以回答问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。否则,如果链接失效,您的答案将变得毫无用处。此外,链接的文档没有给出兼容性矩阵。在浏览器支持方面是否有限制?
    • 已编辑以包含示例代码、如何使用它们和浏览器支持的说明(有关浏览器支持情况的更多信息,请访问http://caniuse.com/#search=variables
    • 非常感谢!正如我所担心的那样,没有任何东西可以跨浏览器工作。您的示例看起来像“旧草案”,其中 var- 前缀已同时替换为 -- 。此外,一些引用具有名为:root 的根元素,另一些具有名为::root 的根元素。有人说使用var(name)(就像你的例子),并匹配那个“跨浏览器”(来自var-name-webkit-var-name等),当前的草稿写var(--name)并且不允许不同的(浏览器-特定)声明。我很困惑。还没有成熟的使用方法。
    • 关于我用不同符号和草稿写的内容的参考,请参阅Creating CSS Global Variables : Stylesheet theme management:根元素是::root,变量以--为前缀,并且必须传递给@ 987654344@ 使用他们的全名。 OP 提到的内容对应于 W3C 草案。
    • @Izzy:我见过有人将 :root 称为 ::root 的唯一一次是他们错误地认为它是伪元素而不是伪类。 :root 是一个伪类,并且一直都是——它是一个伪元素是没有意义的,因为根元素就是这样——一个 元素
    【解决方案4】:

    据我了解,目前还没有完全支持变量,但是当它们支持时,您将通过以下方式设置它们:

    /* declare in :root with the usual browser prefixes */
    :root {
      var-myVariableColor: #f00;
      -webkit-var-myVariableColor: #f00;
      -moz-var-myVariableColor: #f00;
      -ie-var-myVariableColor: #f00;
    }
    
    /* to reference encase in var() */
    body {
      background-color: var(myVariableColor);
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2014-12-15
    • 2019-10-05
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    相关资源
    最近更新 更多