0

我有以下 sass:

%slider {
  .c-slider {
    $parent: &;
    &--thumb {
     #{$parent}__item{
       margin:0;
     }
    }
  }
}
.l-cap {
  @extend %slider;
}

我得到:

 .l-cap .c-slider--thumb .l-cap .c-slider__item {margin: 0; }

但我想获得:

.l-cap .c-slider--thumb .c-slider__item {margin: 0; }

我需要第二个才能获得直系父母。我试过@at-root 但没有运气。

4

2 回答 2

2

您也可以使用这种方法。&是一个引用当前选择器的所有父元素的列表的 sass 列表,因此您可以使用所有列表函数&并轻松获取&您选择的第 n 个子元素(在本例中为第二个子元素):

%slider {
  .c-slider {

    // Get just the second selector
    $parent : nth(nth(&, 1), 2);

    // Output
    &--thumb #{$parent}__item{
      margin:0;
    }

  }
}

.l-cap {
  @extend %slider;
}

将输出:

.l-cap .c-slider--thumb .c-slider__item {
  margin: 0;
}
于 2018-05-21T16:11:38.093 回答
1

这是实现它的唯一方法

%slider {
  .c-slider {
    &--thumb {
     .c-slider__item{
        margin:0;
      }
    }
  }
}

.l-cap {
  @extend %slider;
}

结果将是

.l-cap .c-slider--thumb .c-slider__item {
  margin: 0;
}

对于更复杂的嵌套,您可以使用 @at-root

.grand-parent {
  .parent {
    @at-root .myDiv {
      color: blue; 
    }
  }
}

结果将是

.myDiv {
  color: blue;
}
于 2018-05-21T15:38:07.603 回答