Recursion 可以在Sass中编写递归选择器吗?

Recursion 可以在Sass中编写递归选择器吗?,recursion,sass,Recursion,Sass,在Sass中有没有一种简单的方法来编写以下规则?我试图实现的是只为一个部分中的第一个h2设置边距顶部,而不管它嵌套的深度有多深 section { $first : '> *:first-child'; &, & #{$first}, & #{$first} #{$first}, & #{$first} #{$first} #{$first} { > h2 { &am

在Sass中有没有一种简单的方法来编写以下规则?我试图实现的是只为一个部分中的第一个h2设置边距顶部,而不管它嵌套的深度有多深

section  {
  $first : '> *:first-child';

    &,
    & #{$first},
    & #{$first} #{$first},
    & #{$first} #{$first} #{$first} {   
        > h2 {
            &:first-child {
                    margin-top: 33px;
            }
        }
    }
}

下面的mixin在一定程度上满足了您的需求。这样做的问题是,您将创建一大堆样式规则,这些规则需要在您继续操作时进行评估和放弃,并且无论您执行了多少,始终可能会有嵌套更深的内容。在这种情况下,类更有用,即使很好地使用可用的标记(比如每页只允许一个h2),也能更好地解决您的问题,但本质上,这是可行的:

@mixin first-ever-child($select, $limit:20, $root:''){
    $nester: '>*:first-child';
    @for $i from 1 through $limit {
        $root: $root + $nester;
        #{$root + ' ' + $select}{ @content; }
    }
}

body {
    @include first-ever-child(' h2'){
        background: red;
    }
}
默认情况下,上面的mixin将输出以下内容(当然,当pased为选择器元素时):

body>*:第一个孩子h2{
背景:红色;
}
正文>*:第一个子项>*:第一个子项h2{
背景:红色;
}
正文>*:第一个子项>*:第一个子项>*:第一个子项h2{
背景:红色;
}
正文>*:第一个孩子>*:第一个孩子>*:第一个孩子>*:第一个孩子h2{
背景:红色;
}
正文>*:第一个孩子>*:第一个孩子>*:第一个孩子>*:第一个孩子>*:第一个孩子h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;
}
正文>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child>*:first child h2{
背景:红色;

}
否,只有标记中的第一个h2受规则影响。因此,您只希望第一个h2为红色。其他人都不应该受到影响?是的,但我不知道第一个h2嵌套的深度有多深,所以在一个页面中它可能是一级深(div>h2),在另一个四级深(div>div>div>div>h2)。我认为使用纯css是不可能的。
div:first child>h2
一开始就不能全局解决这个问题吗?