css - 如何在&的sass插值中获得直接父级

标签 css sass

有没有办法使用 {$} 获取最直接的父级? 在下面的例子中,'&#{&}' 没有像我预期的那样工作,我设法使用 mixin 解决了这个问题。

@mixin modifier($modifier, $block: &) {
    &#{"."+$block}--#{$modifier} {
        @content;
    }
}
.namespace{
  $button : 'btn';
  .#{$button} {
    line-height: 1;
    @include modifier('big', $button){ // working but not clean
       padding-top: 8px;
    }
    &#{&}--big{ // not working as {&} is interpolated to namespace .btn
       padding-top: 12px;
    }
  }
}

编译为:

.namespace .btn {
  line-height: 1;
}
.namespace .btn.btn--big {
  padding-top: 8px;
}
.namespace .btn.namespace .btn--big {
  padding-top: 12px;
}

最佳答案

我觉得这个结构有点奇怪——但你可以这样做:

.namespace  {
    $class: ".btn";
    #{$class} { line-height: 1; }
    #{$class}#{$class}--big { padding-top: 8px; }
    & #{$class}#{&} #{$class}--big { padding-top: 12px; }
}

...或使用选择器追加

.namespace .btn {
  line-height: 1;
  @at-root { 
    #{selector-append(&,".btn")}--big{ padding-top: 8px; }
    #{selector-append(&,&)}--big{ padding-top: 12px; }
  }
}

都编译为:

.namespace .btn { line-height: 1; }
.namespace .btn.btn--big { padding-top: 8px; }
.namespace .btn.namespace .btn--big { padding-top: 12px; }

关于css - 如何在&的sass插值中获得直接父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925246/

相关文章:

css - 响应式设计 : How can I hide icon labels for small viewports using only CSS?

css - 根据背景图片大小调整div

sass - Compass 1.x 的最低浏览器支持示例

css - Less CSS - 访问部分类名并在 mixin 中使用

css - 防止溢出 :hidden from cropping the image

javascript - 选择具有相同 URL id 的类

css - box-shadow 被切断

html - CSS Overlay 导致在小型设备上访问所有表单时出现问题

ios - responsive/viewport 在浏览器中工作但在 ios 中不工作

css - SCSS优化