检查类是不是在任何祖先上的 Sass 选择器

Posted

技术标签:

【中文标题】检查类是不是在任何祖先上的 Sass 选择器【英文标题】:Sass selector that checks if a class is on any ancestor检查类是否在任何祖先上的 Sass 选择器 【发布时间】:2020-04-02 20:51:43 【问题描述】:

是否可以编写一个 Sass 选择器,以针对具有应用了某个类的祖先的元素?

<div class="fruit">
    <div class="tree">
        <div class="apple">
            <div class="seed">I want this to go red.</div>
        </div>
    <div>
    <div class="bush">
        <div class="raspberry">
            <div class="seed">I don't want this to go red.<div>
        </div>
    <div>
<div>

有可能写出这样的 Sass 吗?

.seed :ancestor-selector(.tree) 
    color: red;

...让“我想让它变红”真的变红了吗?

这是一支笔,您可以尝试让它发挥作用: https://codepen.io/timrhaynes/pen/xxGNppx

【问题讨论】:

【参考方案1】:

是的。你可以像这样使用&amp;

.seed 
    .tree & 
        /** Wow! I'm seed in tree! */
        color: red;
    

您可以在Sass documentation 中阅读有关父选择器的更多信息。

【讨论】:

很遗憾,这不起作用。在这里查看笔:codepen.io/timrhaynes/pen/xxGNppx 它有效。你只是没有关闭你的div 标签。检查生成的 CSS。修正了你的错字:codepen.io/Jaxp/pen/YzXoXoj 天哪,你是对的!谢谢,这是完美的:-)【参考方案2】:

使用&符号您的具体情况是可能的。

.seed 

  color: green;

  .tree & 

    color: red;

  

直接回答。我不这么认为,虽然 CSS 喜欢从根部开始思考,然后朝着“叶子”方向组织,你可能也猜到了。

【讨论】:

以上是关于检查类是不是在任何祖先上的 Sass 选择器的主要内容,如果未能解决你的问题,请参考以下文章

元素选择器中的 SASS 嵌套类选择器不起作用 [重复]

计算css文件中选择器的数量

scss Sass:在任何选择器上创建新范围的最简单方法。 #sass

在 Sass 中修改选择器的中间(添加/删除类等)

Sass--嵌套选择器

sass 扩展