使用less管理多个部分

时间:2013-11-02 18:20:12

标签: css less

我正在开发一个包含多个部分的项目。根据部分,该部分中的元素具有不同的颜色。通过我的LESS文件,我正在定义所有这些可能性:

a{
    .section_what &{
        color: darken(@what,10%);
    }
    .section_where &{
        color: darken(@where,10%);          
    }
    .section_who &{
        color: darken(@who,10%);
    }
    .section_post &{
        color: darken(@post,10%);           
    }
    .section_events &{
        color: darken(@events,10%);         
    }
    .section_deals &{
        color: darken(@deals,10%);          
    }
}   

这似乎不是最精简的做事方式。使用这种方法我必须重复这个部分列表。因此,由其部分更改的每个元素都需要定义此部分列表。有时它的颜色,背景颜色,边框颜色等......

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

在LESS中你可以使用更通用的代码来获取它:

@what:   #111;
@where:  #222;
@who:    #333;
@post:   #444;
@events: #555;
@deals:  #666;

@items: what,
        where,
        who,
        post,
        events,
        deals;

@items-count: 6;

.sections() {
    .-(@items-count);
    .-(@i) when (@i > 0) {
        .-((@i - 1));

        @name: extract(@items, @i);
        .section_@{name} & {
            color: darken(@@name, 10%);
        }
    }
}

a {
    .sections();
}

b {
    .sections();
}

,如果您不需要其他任何变量,那就更好了:

@items: what   #111,
        where  #222,
        who    #333,
        post   #444,
        events #555,
        deals  #666;

.sections() {
    .-(length(@items));
    .-(@i) when (@i > 0) {
        .-((@i - 1));

        @item: extract(@items, @i);
        @name: extract(@item, 1);
        .section_@{name} & {
            color: darken(extract(@item, 2), 10%);
        }
    }
}

a {
    .sections();
}

b {
    .sections();
}

它看起来相当冗长,但我认为一定程度的定制值得这样做。 请注意,length函数仅在LESS 1.5.x中可用,对于早期版本,您可以使用预定义的计数变量,如第一个示例所示。


另一种方法(如果你更喜欢“复制 - 粘贴”式):

@what:   #111;
@where:  #222;
@who:    #333;
@post:   #444;
@events: #555;
@deals:  #666;

.item(@name) {
    .section_@{name} & {
        color: darken(@@name, 10%);
    }
}

a {
    .item(what);
    .item(where);
    .item(who);
    .item(post);
    .item(events);
    .item(deals);
}

P.S。

  

因此,由其部分更改的每个元素都需要定义此部分列表。有时它的颜色,背景颜色,边框颜色等......

也可以为属性添加更多“自定义点” - 但这取决于这些部分和CSS属性之间的确切关系......(所以我没有把它放到上面的例子中,不做事情要理解得更复杂)。 基本上关键是“list / loops”,“mixins / abstraction”等。