使用占位符仅获取imediate父级,而不是所有路径

时间:2018-05-21 14:41:03

标签: sass scss-mixins

我有以下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但没有运气。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
}