2012-02-05 67 views
14

我不知道我怎么会做这样的事情用更少的CSS如下:CSS-减类伪类扩展类

.btn { 
    color : black; 
} 

.btn:hover { 
    color : white; 
} 

.btn-foo { 
    .btn; 
    &:hover { 
    .btn:hover; 
    } 
} 

中 - 当然,这只是一个例子,有什么需要指出是,如果有有什么办法可以扩展伪类,以避免在我需要的地方重新输入伪类的属性:hover。我知道我可以为此创建一个混音,但是我想知道是否可以避免它。

感谢

回答

30

UPDATE: 如果您不能修改外部文件只是重新定义选择,并添加缺少的状态:

.btn { 
    // not adding anything here, won't affect existing style 
    &:hover { 
    // adding my own hover state for .btn 
    background: yellow; 
    ... 
    } 
} 

// this will make your foo button appear as in external style 
// and have the :hover state just as you defined it above 
.btn-foo { 
    .btn; 
} 

好些了吗? :)


你不需要伪类。它只是将工作:)

试试这个:

.btn { 
    background: yellow; 

    &:hover { // define hover state here 
    background: green; 
    } 
} 

button { 
    .btn; 
} 

每个元素创建将继承任何定义,包括悬停状态。我认为这是LESS的主要惊人功能之一。

希望这会有所帮助。

+0

您好,感谢您的回复,我知道这是有效的,这就是为什么我没有'&:hover'在我的例子中,但分开的定义。谢谢 – panosru 2012-02-06 01:25:17

+0

当然,但.. ..是否有意义分开它(当使用lesscss)? – bzx 2012-02-06 07:14:13

+0

不,它不会让你惊叹,但有些情况下,你不想触摸供应商的少文件:) – panosru 2012-02-06 08:51:12

6

在更短的1.4.0

这(1.4.1):

.btn { 
    color : black; 
} 

.btn:hover { 
    color : white; 
} 

.btn-foo:extend(.btn all) { 
} 

扩展到这一点:

.btn, 
.btn-foo { 
    color: black; 
} 
.btn:hover, 
.btn-foo:hover { 
    color: white; 
} 

要小心的是,这个:

.btn { 
    color : black; 
} 

.btn:hover { 
    color : white; 
} 

.abc .btn { 
    margin: 2px; 
} 

.btn-foo:extend(.btn all) { 

} 

输出结果如下:

.btn { 
    color : black; 
} 

.btn:hover { 
    color : white; 
} 

.abc .btn { 
    margin: 2px; 
} 

.btn-foo:extend(.btn all) { 

} 

我没有看过SASS超过半小时,但我相信后面的情况是它的默认(或只)@extend行为。

+0

这是记录在任何地方吗?我在官方网站上找不到它。 – ehdv 2013-08-15 21:30:20

+0

@ehdv是的。现在扩展是记录在案的,至少在其Github页面上。事情是它的文件远远落后于它的发展。您可能需要密切关注讨论(如https://github.com/less/less.js/issues?labels=ReadyForImplementation&milestone=&page=1&state=open) – John 2013-10-06 15:32:32