css - 将变量的值附加到选择器@如果它存在(使用变量存在)

标签 css sass

我正在尝试将类名添加到 SCSS(如果存在)。

使用输出 2 个 CSS 文件的基本框架。

  • 主题_1.css
  • 主题_2.css

每个 CSS 文件都是从其各自的 SCSS 文件编译而来 - 该文件要么包含名为 $body-container 的变量,要么不包含。

$body-container: .body-container;

如果变量存在,则应将其附加到正文标记。

这是我迄今为止尝试过的 SCSS

body @if(variable-exists(body-container)) { $body-container } {
  /* styles here */
}

我期待以下内容:

对于包含变量的SCSS文件

body .body-container {
    /* styles here */
}

并且没有声明变量

body {
    /* styles here */
}

但出现以下错误错误:“...body-container”后的 CSS 无效:预期为“:”,为“} {”

最佳答案

正如我的评论中提到的,我认为不可能以这种方式将变量附加到选择器(所讨论的选择器)。错误消息表明它需要在变量名称后添加 :,这意味着它需要对 @if 中的变量进行赋值> 循环。

话虽如此,仍然可以使用以下解决方法来实现此目的。这个想法是查看变量是否已定义,如果是,则设置另一个虚拟变量 ($selector) 作为 body 和原始变量 ($主体容器)值。如果没有,则将其设置为body

然后我们可以通过插值来使用这个虚拟变量($selector)。因此,如果已定义$body-container,则选择器将为body .body-container。否则,它就只是body

$body-container: ".body-container";
@if variable-exists(body-container) {
  $selector: "body " + $body-container !global;
}

@else {
  $selector: "body" !global;
}

#{$selector} {
  color: red;
}

关于css - 将变量的值附加到选择器@如果它存在(使用变量存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37727434/

相关文章:

jquery - 无法仅在 Safari 中解决此奇怪的悬停错误

javascript - CSS tr 背景不适用于 IE7

css - 如何用前后 block 干掉sass mixin代码?

php - 使用 Laravel 5.5 从 Bootstrap 3.3.7 迁移到 4.0

css - 在 SASS 上禁用 map 文件

html - 将 div 元素定位在绝对定位的图像上

javascript - 平滑滚动条不适用于主体元素

jquery - 单击具有负 z-index 的 div

css - & 在 Sass 中用于特定标签

ruby-on-rails - Errno::ENOENT 没有这样的文件或目录 Rails 4