更少的CSS嵌套类


101

我正在使用LESS改进我的CSS,并试图将一个类嵌套在一个类中。层次结构相当复杂,但是由于某种原因,我的嵌套无法正常工作。我有这个:

.g {
    float: left;
    color: #323a13;
    .border(1px,#afc945);
    .gradient(#afc945, #c8da64);
    .common;
    span {
        .my-span;
        .border-dashed(1px,rgba(255,255,255,0.3));
    }
    .posted {
         .my-posted;
         span {
            border: none;
         }
    }
}

我无法.g.posted上班。它只是显示.g位。如果我这样做就可以了:

.g {
    float: left;
    color: #323a13;
    .border(1px,#afc945);
    .gradient(#afc945, #c8da64);
    .common;
    span {
        .my-span;
        .border-dashed(1px,rgba(255,255,255,0.3));
    }
}

.g.posted {
         .my-posted;
         span {
            border: none;
         }
    }

我想窝.posted.g虽然。有任何想法吗?

Answers:


192

&角色具有的功能this关键字,居然(事我不知道在写答案的时刻)。可以这样写:

.class1 {
    &.class2 {}
}

并且将生成的CSS如下所示:

.class1.class2 {}

作为记录,@ grobitto是第一个发布此信息的站点。


[原始答案]

LESS不能以这种方式工作。

.class1.class2 {} -在同一个DOM节点上定义两个类,但是

.class1 {
    .class2 {}
}

定义嵌套节点。.class2仅当它是具有class的节点的子节点时才应用class1

我对此也感到困惑,我的结论是LESS需要一个this关键字:)。


5
sass具有使用&运算符内置的功能。
sevenseacat 2011年

2
LESS仍然很棒,特别是PHP LESS预处理器,它具有经过修改的更灵活的语法。但是,在出现某种普遍接受的语法之前,有时会出现此类问题。我认为,这是LESS唯一的缺点。
mingos 2011年

1
@ newbie_86您不能混合使用sass和本机css语法。因此,迁移到Sass需要完全重新编写样式,而更少的时间就可以编译现有样式并开始逐段重新编写它们。
裸照

1
我很好奇为什么第二个答案比这个答案有更多优势,尽管它是相同的并且有较晚的日期。然后,我看到了最后一句话,并提高了两个答案
llamerr 2014年

@topless您的意思是“您不能混合使用sass和本机css语法”,我已经做了很多年了。对我来说很棒。
Shanimal


2

如果&符位于嵌套子元素的旁边,则将其编译为双精度类选择器。如果&和选择器之间有空格,它将被编译为子选择器。在此处了解有关嵌套的更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.