与根目录嵌套

嵌套可能最常用于创建更具体的选择器,但它也可以仅用于代码组织。使用 @at-root 指令,你可以跳出你在 Sass 中嵌套它的位置,让你回到顶层。这样做可以让你保持样式分组,而不会创建比你需要的更多的特异性。

例如,你可以这样:

.item {
    color: #333;

    @at-root {
        .item-wrapper {
            color: #666;

            img {
                width: 100%;
            }
        }
    }
    
    .item-child {
        background-color: #555;
    }
}

这将编译为:

.item {
  color: #333;
}
.item-wrapper {
  color: #666;
}
.item-wrapper img {
  width: 100%;
}
.item .item-child {
  background-color: #555;
}

通过这样做,我们所有与 .item 类相关的样式都在 SCSS 中,但是我们不一定在每个选择器中都需要该类。

排除背景

默认情况下,@at-root 中的声明将出现在任何上下文中。这意味着例如 @media 块内的规则将保留在那里。

@media print {
  .item-wrapper {
    @at-root {
      .item {
        background: white;
      }
    }
  }
}

// Will compile to
@media print {
  .item {
    background: white;
  }
}

这并不总是需要的行为,因此你可以通过将 media 传递给 @at-root 指令的 without 选项来排除媒体上下文。

@at-root (without: media) {..

有关更多信息,请参阅官方文档