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

时间:2013-04-19 15:25:46

标签: sass

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

.social-media { /* ... */ }
.social-media .twitter { /* ... */ }
.social-media .facebook { /* ... */ }
ul.social-media { /* ... */ }

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

.social-media {

    /* ... */

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

    // Here's the problem:
    ul& {
        /* ... */
    }
}

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

1 个答案:

答案 0 :(得分:24)

Sass 3.2及以上

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

    /* ... */

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

ul.social-media {
    /* ... */
}

Sass 3.3及更高版本

您可以使用插值和@at-root指令

来实现
.social-media {
    /* ... */

    // Here's the solution:
    @at-root ul#{&} {
        /* ... */
    }
}

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

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

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

输出:

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