据我了解,您也可以通过使用来解决此问题extend
。
.settingsIcon {
background: url("settings.png");
&:hover {
background: url("settings_hover.png");
}
}
.SettingsButton {
height: 50px;
width: 200px;
&:extend(.settingsIcon all);
.icon {
&:extend(.settingsIcon all);
}
}
输出:
.settingsIcon,
.SettingsButton,
.SettingsButton .icon {
background: url("settings.png");
}
.settingsIcon:hover,
.SettingsButton:hover,
.SettingsButton .icon:hover {
background: url("settings_hover.png");
}
.SettingsButton {
height: 50px;
width: 200px;
}
请注意,上面会.settingsIcon
在您的 CSS 中生成一个未使用的选择器。原因 Less 不允许您扩展不输出的 mixins(请参阅:https ://github.com/less/less.js/issues/1177 ),您只能通过将.settingsIcon
声明放在不同的文件中@import
来解决这个问题使用reference
关键字文件:
设置图标.less:
.settingsIcon {
background: url("settings.png");
&:hover {
background: url("settings_hover.png");
}
}
项目.less:
@import (reference) "settingsicon.less";
.SettingsButton {
height: 50px;
width: 200px;
&:extend(.settingsIcon all);
.icon {
&:extend(.settingsIcon all);
}
}
现在编译project.less
生成:
.SettingsButton,
.SettingsButton .icon {
background: url("settings.png");
}
.SettingsButton:hover,
.SettingsButton .icon:hover {
background: url("settings_hover.png");
}
.SettingsButton {
height: 50px;
width: 200px;
}
--
注意,您不是在寻找包含所有子元素的悬停 CSS吗?
更新
@harry 写道:
我的理解是,仅 .SettingsButton:hover .icon 和 .SettingsButton .icon:hover 需要应用相同的背景。
我认为这是有道理的。你也可以通过使用extend来做到这一点,但我也同意将同一个类扩展两次也不是那么干燥。
再次settingsicon.less
出现:
.settingsIcon {
background: url("settings.png");
&:hover {
background: url("settings_hover.png");
}
}
您可以使用:
@import (reference) "settingsicon.less";
.SettingsButton {
height: 50px;
width: 200px;
&.icon {
&:extend(.settingsIcon);
}
&:hover, & .icon:hover {
&:extend(.settingsIcon:hover);
}
}
或者:
@import (reference) "settingsicon.less";
.SettingsButton {
height: 50px;
width: 200px;
& .icon {
&:extend(.settingsIcon all);
}
&:hover {
&:extend(.settingsIcon:hover);
}
}
两者都编译为:
.SettingsButton.icon {
background: url("settings.png");
}
.SettingsButton:hover,
.SettingsButton .icon:hover {
background: url("settings_hover.png");
}
.SettingsButton {
height: 50px;
width: 200px;
}