【问题标题】:Prevent nesting in SCSS/SASS output [duplicate]防止在 SCSS/SASS 输出中嵌套 [重复]
【发布时间】:2016-06-25 22:00:26
【问题描述】:

借助 SCSS 中的所有简洁功能,很容易让人忘乎所以并最终得到一些相当粗糙的 CSS。

以一个经典的嵌套老鼠巢为例-

.image {
    ...

    .imageWrapper {
        ...

        img {
            ...
        }
    }

    .textWrapper {
        ...

        title {
            ...
        }

        caption {
            ...
        }
    }
}

编译成

.image {
    ...
}

.image .imageWrapper {
    ...
}

.image .imageWrapper img {
    ...
}

.image .textWrapper {
    ...
}

.image .textWrapper .title {
    ...
}

.image .textWrapper .caption {
    ...
}

这不仅难以阅读,而且对处理器来说也是一个难题。

现在,我不喜欢使用不特定的类名( 有多长?),所以嵌套对我来说几乎没有什么功能用处,但我发现它让我的 pre-编译的 SCSS 非常 可以理解 - 暗示元素与其父元素和子元素之间的关系的能力对于我自己和在我的代码中发生的下一个开发人员来说都是无价的。

有什么方法可以让我的 SCSS 嵌套在我的工作表的全部或(最好是)部分而不在我的 CSS 中呈现无穷无尽的子选择器?

【问题讨论】:

  • 这个问题是真的吗?如果你不想要嵌套带来的结果,不要嵌套?嵌套对您来说是一种便利,因此您可以避免重复选择器,而不是要求。
  • @cimmanon 就像我在问题中所说,我喜欢 SCSS 中的嵌套样式
  • 这不是嵌套的用途
  • @cimmanon 这就是我想用它来做的事情,如果不可能,那就不可能

标签: css sass nested


【解决方案1】:

我认为您正在寻找 @at-root 指令。

它的工作原理是“跳出”你在 Sass 中的嵌套位置,成为顶层。

例如,你可以这样做:

.image {
    color: #333;
    @at-root {
        .imageWrapper {
            color: #666;
            img {
                color: #999;
            }
        }
    }

    .stayNested {
        background-color: #555;
    }

    @at-root {
        .textWrapper {
            color: #aaa;
            title {
                color: #ccc;
            }
            caption {
                color: #fff;
            }
        }
    }
}

那会编译成这样:

.image {
  color: #333;
}
.imageWrapper {
  color: #666;
}
.imageWrapper img {
  color: #999;
}
.image .stayNested {
  background-color: #555;
}
.textWrapper {
  color: #aaa;
}
.textWrapper title {
  color: #ccc;
}
.textWrapper caption {
  color: #fff;
}

有关详细信息,请参阅official documentation

【讨论】:

  • 这几乎是在鼻子上。看到它需要另一个级别的括号/缩进有点失望,但乞丐不能成为选择者。谢谢!
  • @SandyGifford : 不客气......如果你要使用 @at-root 指令来“跳出”嵌套,我建议使用像 BEM (@ 987654322@),或任何其他通过命名类的方式指定父子关系的命名约定。这样,您可以通过命名 CSS 类来保留与 SCSS 中父选择器的关系。
  • 我实际上喜欢 BEM,并尽可能使用它 - 遗憾的是,在进行现有项目时,它并不总是一种选择,因为命名方案通常(希望)到位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 2012-06-20
  • 2014-08-12
  • 2015-12-29
  • 2014-02-19
  • 1970-01-01
相关资源
最近更新 更多