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

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

有没有一种方法可以创建可将表达式传递给的mixin或函数,以便生成所需的标签,然后将其设置为a widthheight

Gil米亚卡卡西2020/03/19 11:39:07

它将是带有参数的基本mixin,幸运的是,表达式在受支持的范围内不是特定于浏览器的:

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

.test {
  @include calc(width, "25% - 1em");
}

将呈现为

.test {
  width: -webkit-calc(25% - 1em);
  width: calc(25% - 1em);
}

当不支持calc时,您可能需要包括一个“默认”值。

小宇宙理查德2020/03/19 11:39:07

另一种写法:

@mixin calc($prop, $val) {
  @each $pre in -webkit-, -moz-, -o- {
    #{$prop}: $pre + calc(#{$val});
  } 
  #{$prop}: calc(#{$val});
}

.myClass {
  @include calc(width, "25% - 1em");
}

我认为这是一种更优雅的方式。