使用Sass将父选择器附加到末尾

Jos*_*ino 14 sass

好吧,假设我有以下传统的CSS

.social-media { /* ... */ }
.social-media .twitter { /* ... */ }
.social-media .facebook { /* ... */ }
ul.social-media { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

所以,我尝试用SCSS这样做:

.social-media {

    /* ... */

    .twitter { 
        /* ... */
    }
    .facebook {
        /* ... */
    }

    // Here's the problem:
    ul& {
        /* ... */
    }
}
Run Code Online (Sandbox Code Playgroud)

最后一部分不起作用,因为似乎&符号应该只出现在选择器的开头.有解决方法吗?

cim*_*non 24

萨斯3.2及以上

你唯一能做的就是反转你的嵌套或者根本不用嵌套:.social-media {

    /* ... */

    .twitter { 
        /* ... */
    }
    .facebook {
        /* ... */
    }
}

ul.social-media {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

Sass 3.3及更高版本

你可以使用插值和@at-root指令来做到这一点:

.social-media {
    /* ... */

    // Here's the solution:
    @at-root ul#{&} {
        /* ... */
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的父选择器包含多个选择器,则需要使用selector-append:

.social-media, .doodads {
    /* ... */

    // Here's the solution:
    @at-root #{selector-append(ul, &)} {
        /* ... */
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

.social-media, .doodads {
  /* ... */
}
ul.social-media, ul.doodads {
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

  • @AdrianFlorescu检查您的依赖项.如果您的版本正确,则可能有一个依赖于旧版本的库.`sass --version`命令只会报告您安装的最新版本,而不是所有版本. (2认同)