【问题标题】:SASS Ampersand – Chaining CSS class with the parent selector '&' like in LESSSASS & 与父选择器“&”链接 CSS 类,就像在 LESS 中一样
【发布时间】:2017-06-18 07:47:17
【问题描述】:

少(CSS)

see in action

.app {
  #page {
    .inner {
      .left {
        &.padding-left-10px {
          padding-left: 10px;

          // rtl direction
          .rtl& {  //////////////////////////////////
            padding-left: 0;
            padding-right: 10px;
          }
        }
      }
    }
  }
}

考虑一下我用///.... 突出显示的那一行。

我希望在 SASS (.scss) 中得到相同的结果。有可能吗?

预期结果应该是:

.rtl.app #page .inner .left.padding-left-10px {}

而不是

.rtl .app #page .inner .left.padding-left-10px {}

谢谢。

【问题讨论】:

  • .rtl& 之间放置一个空格。 .rtl & { & 符号是一个字符串连接
  • @ntgCleaner,您看到描述中 Thanks. 之前的那行了吗?我希望在 Sass 中以相同的层次结构输出 .rtl.app
  • 对不起,我读到了预期的和“而不是”相反的内容!调查一下

标签: css sass less


【解决方案1】:

您似乎正在尝试使用 LESS 功能,您可以通过使用父选择器来change the order of the selectors。它没有按预期工作,因为特定 LESS 功能在 SASS 中的实现方式不同。

如果您想要 SASS 中的等效输出代码,则可以使用 @at-root directive 将选择器范围限定为根。那么你还需要使用variable interpolation(即.rtl#{&})作为父选择器:

.app {
  #page {
    .inner {
      .left {
        &.padding-left-10px {
          padding-left: 10px;

          @at-root {
            .rtl#{&} {
              padding-left: 0;
              padding-right: 10px;
            }
          }
        }
      }
    }
  }
}

编译成:

.app #page .inner .left.padding-left-10px {
  padding-left: 10px;
}
.rtl.app #page .inner .left.padding-left-10px {
  padding-left: 0;
  padding-right: 10px;
}

【讨论】:

  • 感谢@Josh 的快速回答。让我试试这个。
  • 非常感谢@Josh。这对我有用。但我仍在寻找一种没有@at-root 指令的方法...
【解决方案2】:

我猜乔希给了你一个可行的答案。但我仍然想给你一些建议,那就是看看BEM,或者以某种方式。这样的嵌套真的没必要。

您的代码在可读性方面可能会更好。

例如:

.padding {
     padding: 10px;
 }

 .padding--left { // This is a modifier for padding
     padding: 0 0 0 10px;
 }

 .padding--right { // This is a modifier for padding
     padding: 0 10px 0 0;
 }

 <div class="padding padding--left">Using it in a div</div>

您不必遵循 BEM 中定义的所有规则,但有些规则非常好用。

【讨论】:

  • 您的评论很有道理,非常感谢您的建议。但有时我们无法控制 HTML 结构并通过特异性覆盖 CSS,我们必须遵循更深层次的层次结构。
  • 请注意,这可以写成.padding { &amp;#{&amp;}--left { ... } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2017-06-04
  • 2017-09-13
  • 2010-09-12
  • 2016-08-22
相关资源
最近更新 更多