热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

是否支持使用父选择器如下?-Doessasssupporttouseparentselectorasfollows?

ProblemImainlyusethefollowingmethods.(SASS)我主要使用以下方法。(SASS).person{&.man{
Problem

I mainly use the following methods. (SASS)

我主要使用以下方法。 (SASS)

.person {
    &.man {
        .head { A }
    }

    &.woman {
        .head { B }
    }

    .head { C }
}

But I want to use the following method. (SASS)

但我想使用以下方法。 (SASS)

.person {
    .head {
        C

         {
            A
        }

         {
            B
        }
    }
}

compiled result (CSS)

编译结果(CSS)

.person .head { C }
.person.man .head { A }
.person.woman .head { B }

I want to know if there is such a function. Thank you.

我想知道是否有这样的功能。谢谢。

My result

I got the idea from @falsarella's @at-root approach. It seems a bit crude, but this is also possible. (I actually used deeper selectors than the example, so it was hard to solve with at-root and #{$} alone.)

我从@ falsarella的@ at-root方法中得到了这个想法。看起来有点粗糙,但这也是可能的。 (我实际上使用了比示例更深的选择器,所以很难用at-root和#{$}单独解决。)

.person {
    $person: &;

    .head {
        C

        @at-root #{$person}.man .head {
            A
        }

        @at-root #{$person}.woman .head {
            B
        }
    }
}

Or it would be more convenient and readable(If the parent selector is not a simple selector.) to use it by naming $parent and overriding the previous $parent.

或者它更方便和可读(如果父选择器不是一个简单的选择器。)通过命名$ parent并覆盖前一个$ parent来使用它。

When I think about it once, the current selector is named $parent, so it is confusing. It might be better to ignore '>', ':after', ... of a parent selector and just name it as $person. (or create naming conventions.)

当我考虑一次时,当前选择器被命名为$ parent,因此它令人困惑。最好忽略父选择器的'>',':after',...并将其命名为$ person。 (或创建命名约定。)

.earth {
    $parent: &;

    .person {
        $parent: &;

        .head {
            C

            @at-root #{$parent}.man .head {
                A
            }

            @at-root #{$parent}.woman .head {
                B
            }
        }
    }
}

As a result of further Googling, postcss seems to support parent selectors I want.

由于进一步谷歌搜索,postcss似乎支持我想要的父选择器。

3 个解决方案

#1


4  

There's no "parent" selector in Sass, but, in your case, you can use a tricky #{&} interpolation together with @at-root, like this:

Sass中没有“父”选择器,但是,在您的情况下,您可以使用棘手的#{&}插值和@ at-root,如下所示:

.person {
    .head {
        color: white;

        @at-root .man#{&} {
            color: blue;
        }

        @at-root .woman#{&} {
            color: pink;
        }
    }
}

Resulting in the following CSS:

导致以下CSS:

.person .head {
  color: white;
}
.man.person .head {
  color: blue;
}
.woman.person .head {
  color: pink;
}

#2


3  

Unfortunately, not. I think the first example that you give is the best way to achieve this. Another option might be:

不幸的是,没有。我认为你提供的第一个例子是实现这一目标的最佳方式。另一种选择可能是:

  .head {
    .person & {
      color: red;
    }
    .person.man & {
      color: blue;
    }
    .person.woman & {
      color: green;
    }
  }

It will produce the same compiled result as you desire. But beware of nesting the .head class. It will trip you up.

它将根据您的需要生成相同的编译结果。但要注意嵌套.head类。它会绊倒你。

#3


1  

The following does not really uses a parent selector. Just uses a SASS @mixin to give same CSS output.

以下并不真正使用父选择器。只需使用SASS @mixin来提供相同的CSS输出。

@mixin personHead($gender) {
    @if $gender == man {
        &.man .head{
            property: A; 
        }
    }
    @if $gender == woman {
        &.woman .head{
            property: B; 
        }
    }
    @if $gender == "" {
        .head{
            property: C; 
        }
    }
}

.person { @include personHead(man); }
.person { @include personHead(woman); }
.person { @include personHead(""); }


/* Compiled CSS Output */

.person.man .head {
    property: A;
}

.person.woman .head {
    property: B;
}

.person .head {
    property: C;
}

推荐阅读
  • 保持sass条理性和可读性的最基本的三个方法:嵌套、导入和注释安装sass和compassruby-v查看ruby版本gemsources—removehttps:rubyg ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • Java 中重写与重载的区别
    本文详细解析了 Java 编程语言中重写(Override)和重载(Overload)的概念及其主要区别,帮助开发者更好地理解和应用这两种多态性机制。 ... [详细]
  • 解决Windows下创建子进程时代码重复执行的问题
    在Windows系统中,当启动子进程时,主进程的文件会被复制到子进程中。由于导入模块时会执行该模块中的代码,因此可能导致某些代码在主进程和子进程中各执行一次。本文探讨了这一现象的原因及其解决方案。 ... [详细]
  • 原因:增加配置:webpack.base.conf.jsloaders:{scss:[vue-style-loader,css,sass].join(! ... [详细]
  • 我在SCSS中为网格列(12列)提供了一个@for函数。我的SASS功能:@for$ifrom1through12 ... [详细]
  • 【BZOJ3197】[Sdoi2013]assassinDescriptionInputOutputSampleInput412233400111000SampleOutput ... [详细]
  • CSSandSass(SCSS)stylerulesIDandclassnamingID和class(类)名总是使用可以反应元素目的和用途的名称,或其他通用名称。代替表象和 ... [详细]
  • 本文主要分享【】,技术文章【SassScss、Less是什么?】为【CRMEB】投稿,如果你遇到CRMEB,学习笔记相关问题,本文相关知识或能到你。Sass(SyntacticallyAw ... [详细]
author-avatar
hja2045905
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有