如何创建一个calc mixin作为表达式传递以生成标签?

sec*_*ula 41 css sass css3

我正在开发一个sass样式表,我希望使用该calc元素动态调整某些内容的大小.由于calc元素尚未规范,我需要为目标calc(),-moz-calc()-webkit-calc().

有没有办法让我创建一个mixin或函数,我可以传递一个表达式,以便它生成所需的标签,然后可以设置为widthheight

o.v*_*.v. 87

这将是一个带参数的基本mixin,幸好表达式在支持的范围内不是浏览器特定的:

@mixin calc($property, $expression) {
  #{$property}: -webkit-calc(#{$expression});
  #{$property}: calc(#{$expression});
}

.test {
  @include calc(width, "25% - 1em");
}
Run Code Online (Sandbox Code Playgroud)

将呈现为

.test {
  width: -webkit-calc(25% - 1em);
  width: calc(25% - 1em);
}
Run Code Online (Sandbox Code Playgroud)

您可能希望在不支持calc时包含"默认"值.

  • 这是完美的我不知道你可以将一个属性传递给mixin,但它现在有意义 (2认同)
  • 不要只是无所事事地添加前缀.Opera目前不支持`calc()`,但是当它出现时,很可能没有前缀. (2认同)

ste*_*her 10

Compass提供了一个共享实用程序,可以为这种场合添加供应商前缀.

@import "compass/css3/shared";

$experimental-support-for-opera: true; // Optional, since it's off by default

.test {
  @include experimental-value(width, calc(25% - 1em));
}
Run Code Online (Sandbox Code Playgroud)