首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >萨克斯·阿巴斯德,选择免疫中介父母?

萨克斯·阿巴斯德,选择免疫中介父母?
EN

Stack Overflow用户
提问于 2013-07-24 12:11:11
回答 6查看 23.1K关注 0票数 39

在Sass中是否有一种方法可以使用符号并选择直接父程序,而不是整个组的父选择器?例如:

代码语言:javascript
复制
.wrapper{
    background-color: $colour_nav_bg;
    h1{
        color: $colour_inactive;
        .active &{
            color: red;
        }
    }
}

汇编成:

代码语言:javascript
复制
.wrapper h1{
    color: grey;
}

.active .wrapper h1{
    color: red
}

但我真正想要的是:

代码语言:javascript
复制
.wrapper .active h1{
    color: red;
}

这样写SCSS是唯一的选择吗?

代码语言:javascript
复制
.wrapper{
    background-color: $colour_nav_bg;
    h1{
        color: $colour_inactive;
    }
    .active h1{
        color: red;
    }
}

HTML如下所示:

代码语言:javascript
复制
<ul class="wrapper">
    <li class="active">
        <h1>blah</h1>
    </li>
</ul>
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-07-24 19:03:04

在本文撰写之时,没有直接父元素的Sass选择器,而没有元素的根父选择器。有& (如您所知)选择根父级。还有% 占位符选择器,它隐藏了一个规则,直到它是扩展

Sass是开源,所以您可以提供一个新的“直接父”选择器。

票数 9
EN

Stack Overflow用户

发布于 2015-06-06 21:37:57

今天你可以用像这样的混合器来解决这个问题:

代码语言:javascript
复制
@mixin if-direct-parent($parent-selector) {
  $current-sequences: &;
  $new-sequences: ();

  @each $sequence in $current-sequences {
    $current-selector: nth($sequence, -1);
    $prepended-selector: join($parent-selector, $current-selector);
    $new-sequence: set-nth($sequence, -1, $prepended-selector);
    $new-sequences: append($new-sequences, $new-sequence, comma);
  }

  @at-root #{$new-sequences} {
    @content;
  }
}

由于&本质上是一个列表列表,所以可以使用列表函数(第n个集nth加入追加)来创建所需的选择器序列。然后使用@at-root在根级输出新的选择器。下面是你如何使用它的方法:

代码语言:javascript
复制
.grandparent-1,
.grandparent-2 {
  color: red;

  .child {
    color: blue;

    @include if-direct-parent('.parent') {
      color: green;
    }
  }
}

将产生以下结果:

代码语言:javascript
复制
.grandparent-1,
.grandparent-2 {
  color: red;
}
.grandparent-1 .child,
.grandparent-2 .child {
  color: blue;
}
.grandparent-1 .parent .child, .grandparent-2 .parent .child {
  color: green;
}
票数 12
EN

Stack Overflow用户

发布于 2017-01-12 10:55:30

您需要在{}中包装@at-root内容。

代码语言:javascript
复制
.wrapper {
    h1 {
        @at-root {
           .wrapper .active h1 {
                color: red;
           }
        }
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17833674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档