不是如何而是最有效的方法来定位 Sass 中的元素?

Not how but MOST efficient way to target element in Sass?

在我的 sass 中,我希望它不会失控,我有一个简单的 question/example 我想知道什么是最有效的在下面的示例中定位按钮的方法?

我个人喜欢选项 2,但我做对了吗?

说它挑剔,但我的问题如下所列,

  1. 我不喜欢通过 html

  2. 将 class/id 添加到所有内容中
  3. 使用 Sass 的能力 nest/target 父元素中的子元素过于具体

选项 1: 在 html 中为按钮 class 命名,以便在 css

中轻松定位
<div id = "box">
 <!-- Give button class/id -->
 <button class = "button1"></button>
</div>

选项 2: 有 _buttons.scss 部分包含 .button1 class

在我的 main.scss 上,在 html 中定位没有按钮的父容器 #box class 名称,然后定位嵌套按钮

buttons.scss

.button1 {
 width: 100px;
 height: 100px;
 background-color: grey;
}

main.scss

@import 'components/buttons.scss';

#box {
 button {
  // Extend class from buttons.scss
  @extend .button1;
 }
}

我认为这取决于您对不同按钮使用样式的频率。不过,拥有 'box' 的 ID 对我来说似乎非常具体。你不打算有任何其他箱子吗?如果是这样,这需要是 class 而不是 id。

而不是定位父级并为子级设置样式(当你想为没有父级的元素设置样式时会发生什么),我只是在按钮本身上设置 class 的样式。

第一个选项 - HTML

中只需要一个 class
.button1{
    /* button css */
}

第二个选项 - 需要 id 属性,特定 HTML 层次结构,更多 CSS 输出

#box button, .button1{
    /* button css */
}

关于 "most efficient" 什么是 SASS 和部分的很多答案取决于你完整的 SASS 配置的样子,所以很难说基于在一个具体的例子上。

您是否需要在多种样式中使用此按钮的样式sheet?

例如,如果您只有一种样式 sheet (main.scss),我会说根本没有理由使用部分样式。当您需要在多个样式 sheet 中包含部分中的项目时,应使用部分。比如很多人会把所有的变量和mixin都写成一个partial,然后在每一个style中都include它们sheet.

鉴于这个具体的例子,更有效的做法是不使用部分。

向按钮添加 class 并在 css 中定位 class 或定位容器和子元素(不带 class)同样有效:

#box button {}
button.button1 {}

此外,如果您在#box parent 中没有其他规则,则没有理由嵌套在这里:

#box {
 button {
 }
}

只需这样做:

#box button {}

(小心使用 extends。如果在不需要它们的地方使用它们,您可能会得到一大堆不必要的样式规则。See this great article。)