15

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

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

所以,我试着用 SCSS 做这样的事情:

.social-media {

    /* ... */

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

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

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

4

1 回答 1

27

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 {
  /* ... */
}
于 2013-04-19T15:29:00.847 回答