css - 更少的祖 parent 有类选择器

标签 css sass less

<分区>

我有一个类:

.item
{
    svg
    {
        fill: var(--theme-font-color-extra-light);
    }

    &.active
    {
        svg
        {
            fill: var(--theme-main-color);
        }
    }
}

是否有任何选择器或方法可以实现相同的结果,但在 less 中使用类似于以下代码的内容:

.item
{
    svg
    {
        fill: var(--theme-font-color-extra-light);

        @selector executed if div having .item also has .active (.item.active)
        {
            fill: var(--theme-main-color);
        }
    }
}

[编辑 2019 年 12 月 11 日]
使用以下代码不起作用:

.item
{
    svg
    {
        fill: var(--theme-font-color-extra-light);

        .active&
        {
            fill: var(--theme-main-color);
        }
    }
}

我对为什么它不起作用感到有点困惑,但显然 VS Code 告诉我这段代码被转换为:

enter image description here

(没有工具提示):

enter image description here

[编辑 2019 年 12 月 12 日]
完整的代码块如下所示:

enter image description here

正如@chazsolo 在评论中指出的那样,在这种情况下没有选择器来实现这样的事情。

最佳答案

您可以使用 parent selector要实现这一点 - 只需注意 &

的位置
.item {
  svg {
    fill: red;

    .active& { // <-- no space between .active and &
      fill: blue;
    }
  }
}

这里有一些示例,说明更改位置将如何更改已评估的选择器:

.active&  // .active.item svg (what you want)
.active & // .active .item svg
&.active  // .item svg.active
& .active // .item svg .active

SASS

请注意,在 SASS (yet) 中不允许将 & 放在复合选择器的末尾。

但是,您可以使用 @at-root 指令获得相同的输出:

.item {
  svg {
    fill: red;

    @at-root .active#{&} { // <-- directive + interpolation #{&}
      fill: blue;
    }
  }
}

关于css - 更少的祖 parent 有类选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59284945/

上一篇:html - 如何减少表单的宽度 (CSS/HTML)

下一篇:css - 显示:grid. 如何将 block 拉伸(stretch)到全宽

相关文章:

css - 从剪辑迁移到剪辑路径以使用百分比值

javascript - less.js 在 watch 上没有方法 'toCSS'

javascript - 如何使用 LESS 获取任何元素的高度?

javascript - 可以为 div 设置动画

JavaScript 切换按钮

javascript - 如何将单个 CSS 样式存储在数据库中?

html - 在绝对定位中调整多个 div 的大小

css - Ionic 2 如何使 ionic 列表从下往上增长?

javascript - 将 Javascript 和 SCSS 文件添加到 wordpress 插件

css - 如何继承宽度为: auto?的像素值