在Sass中匹配多个BEM修饰符

Rob*_*ert 5 css sass bem

我正在使用BEM,并且有一个包含多个修饰符的元素:

<div class="block__element block__element--m1 block__element--m2"></div>
Run Code Online (Sandbox Code Playgroud)

我正在使用SCSS并利用它来编写与BEM兼容的嵌套规则.如果我想编写一个规则,其中元素(如上所述)同时具有m1和m2修饰符,是否有一种方法可以编写与我当前编写它们的方式兼容的方法?这是我之后的语法,但会导致语法错误:

.block {
    display: block;

    &__element {
        display: inline;

        &--m1 {
            background-color: red;
        }

        &--m2 {
            background-color: green;
        }

        // Syntax error
        &--m1&--m2 {
            background-color: yellow;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过使用属性选择器来想办法,但有更简洁的方法吗?

对于记录,编译的属性选择器应该是:

.block__element--m1.block__element--m2
Run Code Online (Sandbox Code Playgroud)

Rob*_*ert 18

@ 3rdthemagical的回答确实给了我一些更好的解决方案的灵感.Sass根本不喜欢&在选择器开头之后出现,但它并不介意它包含在#{}:

.block {
    display: block;

    &__element {
        display: inline;

        &--m1 {
            background-color: red;
        }

        &--m2 {
            background-color: green;
        }

        // Correct!
        &--m1#{&}--m2 {
            background-color: yellow;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不错的解决方案(如果有点混淆阅读)。感谢您指出此便捷的解决方法 (2认同)