【问题标题】:Referencing parent with multiple levels of nesting in LESS在 LESS 中引用具有多级嵌套的父级
【发布时间】:2013-01-23 18:01:51
【问题描述】:

我有以下 LESS:

.container {
    .column, .columns {
        .one& {
            width: 40px;
        }
    }
}

当我编译时,我的 CSS 得到以下内容:

.one.container .column,
.one.container .columns {
    width: 40px;
}

但我希望得到:

.container .one.column,
.container .one.columns {
    width: 40px;
}

看起来 LESS 中的父运算符 (&) 实际上是在引用我期望的祖父母。我是否正确嵌套了东西?文档没有显示任何嵌套深度超过一层的示例。我可以通过嵌套实现我想要的输出吗?

我正在使用通过 npm 安装的 lessc 1.3.3。

【问题讨论】:

  • 我不这么认为,也许你应该避免让事情变得那么复杂。而且我真的不认为计算机会关心2 column2 columns 中的哪一个是正确的。
  • 即使我只选择了column 并放弃了columns,我仍然遇到同样的问题。
  • 但是如果你放弃columns,你就不需要&,对吧?
  • 是的,因为& 会产生.one.column。没有我得到.one .column。 (第一个:没有空格。第二个:空格)。
  • 我的意思是,你可以把&放在.one之前,不用嵌套。

标签: less


【解决方案1】:

& 更多地视为“父系”组合器,而不是“父级”组合器,这一点很重要。也就是说,它将整个嵌套的选择器字符串带到该点(无论有多少层深),并充当字符串替换持有者的等价物。因此,使用您的示例的简化版本...

.container {
    .column {
        .one& {
            width: 40px;
        }
    }
}

...该级别的选择器字符串是.container .column。这就是在& 的位置“替换”的内容,因此当您像上面那样连接到 beginning 时,它会附加在 beginning 的 整个选择器字符串,你最终得到:

.one.container .column {width 40px;}

但是如果你从 end 连接(&. 之间没有空格)那么...

.container {
    .column {
        &.one {
            width: 40px;
        }
    }
}

...变成:

.container .column.one {width 40px;}

这最后一个确实是您想要的类组合,尽管与您希望的顺序不太一样。但是顺序对浏览器来说并不重要,.one.column.column.one 是相同的,它只是意味着一个元素同时应用了两个单独的类:

<div class="column one"></div>
<div class="one column"></div>

这两者是等价的,.one.column.column.one 作为选择器将选择这两个元素,因为这两个元素都有两个类。

如果顺序对您来说绝对重要(您必须让生成的 CSS 符合您的要求),那么您需要做一些重复,如下所示:

.container {
    .column {
       ...generic column code here...
    }
    .one {
        &.column {
            width: 40px;
            ...any other code dependent on combination of .one.column here...
        }
    }
}

【讨论】:

  • 我希望喜欢生成的 CSS 中的正确顺序,但对我来说更重要的是 LESS 的可读性,因为这是人类将使用的。
  • @NoobsArePeople2 单个元素的类选择器的顺序根本不重要。这意味着.one.column.column.one 都适用于class="one column"class="column one",反之亦然。
猜你喜欢
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多