嵌套深度

嵌套是一个非常强大的功能,但应谨慎使用。它可以非常容易和快速地发生,你开始嵌套并继续将所有孩子包括在巢,巢,巢中。让我来证明一下:

// SCSS
header {
  // [css-rules]

  .holder {
    // [css-rules]

    .dropdown-list {
      // [css-rules]

      ul {
        // [css-rules]

        li {
          margin: 1rem 0 0 1rem;
        }
      }
    }
  }
}

// CSS output of the last rule
header .holder .dropdown-list ul li {
  margin: 1rem 0 0 1rem;
}

问题

特异性

上面例子中的 li 有一个 margin 集。假设我们希望稍后在媒体查询中覆盖它。

@media (max-width: 480) {

  // will not work
  .dropdown-list ul li {
    margin: 0;
  }

  // will work
  header .holder .dropdown-list ul li {
    margin: 0;
  }
}

因此,通过嵌套太深,无论何时想要覆盖某个值,都必须再次深入嵌套。更糟糕的是,这通常是使用规则 !important 的地方。

@media (max-width: 480) {

  // BIG NO-NO, don't do this
  .dropdown-list ul li {
    margin: 0 !important;
  }

为什么 !important 规则是个坏主意

你应该以良好的方式编写 SCSS,这些解决方案首先是不必要的。在这样一个小问题上使用 !important 已经会让你陷入一个兔子洞!

可重用性

这与特异性问题非常相似,但值得单独指出。如果你设置类似按钮或下拉菜单的样式,你可能希望在页面上的其他位置重用这些样式。

通过嵌套太深,你的样式仅限于位于最外层父级(SCSS 顶部的元素)内的元素。这会导致你复制样式并再次将它们粘贴到其他位置。可能在另一个嵌套规则中。

你的样式表将变得越来越大,越来越难以维护。

你应该有多深?

大多数 styleguides 将最大深度设置为 2.这是一般的好建议,因为很少有你想要深入嵌套的场合。大多数时候,2 就足够了。