0

我试图在我的代码库中采用 LESS 1.4 扩展功能,但发现它会输出所有的mixins.. 例如:

.DefaultFont {
  font: 12px/1.5 sans-serif;
}
.NoPaddingMargin {
  padding: 0;
  margin: 0;
}

body:extend(.DefaultFont all, .NoPaddingMargin all) {

}

这会产生

.DefaultFont,
body {
  font: 12px/1.5 sans-serif;
}
.NoPaddingMargin,
body {
  padding: 0;
  margin: 0;
}

但我不想在输出中.DefaultFont.NoPaddingMargin

我试图将.DefaultFontand.NoPaddingMargin作为参数混合(.DefaultFont() {}body:extend(.DefaultFont() all) {})以避免输出,但似乎解析器无法识别它。

在 Stylus 中有用%于此目的。有什么方法可以在 LESS 中做同样的事情吗?提前谢谢

4

3 回答 3

1

目前 LESS 不支持你想要的,它的扩展只能用于选择器,不能用于参数混合(参见https://github.com/less/less.js/issues/1177)。因此,您要么必须在 CSS 输出中接受虚拟的 .DefaultFont/.NoPaddingMargin 选择器,要么回退到保守的 mixin 扩展而不是扩展。

于 2013-08-28T07:52:27.750 回答
1

如果你定义了一个类,你可以在另一个规则集中重用这个类:

.DefaultFont {
  font: 12px/1.5 sans-serif;
}

通过这样的调用在另一个规则集中使用它:

.DefaultFont();

如果您想防止.DefaultFont被编译为 css 规则集本身,请添加()到末尾:

.DefaultFont() {
  font: 12px/1.5 sans-serif;
}

您仍然以相同的方式使用它,但这不会自行编译为规则集。

编辑:

http://lesscss.org/#-parametric-mixins

用 声明 mixin()会阻止它被编译。没有参数或具有默认值的 mixin 不需要使用 mixin()只需要声明 mixin。

您还可以使用不带参数的参数混合。如果您想从 CSS 输出中隐藏规则集,但又想将其属性包含在其他规则集中,这很有用:

于 2013-08-28T02:39:16.280 回答
0

您尝试使用:extend不正确,因为该功能的全部目的是扩展原始选择器的声明。如果您只是想body拥有类的属性,则需要通过普通的 mixin 将它们包含在其中:

body {
  .DefaultFont;
  .NoPaddingMargin;
}
于 2013-08-29T00:55:32.687 回答