Sass计算百分比减px
我希望能够做到以下几点:
height: 25% - 5px;
显然,当我这样做,我得到的错误:
Incompatible units: 'px' and '%'.
Sass不能对不能从一个单元转换到下一个单元的值进行算术运算。 Sass无法准确知道像素或其他任何单位的“100%”究竟有多宽。 这是只有浏览器知道的东西。
你需要使用calc()
来代替。 检查浏览器兼容性我可以使用…
.foo { height: -webkit-calc(25% - 5px); height: -moz-calc(25% - 5px); height: calc(25% - 5px); }
如果你的值是在variables中,你可能需要使用插值把它们变成string(否则Sass只是试图执行算术):
$a: 25%; $b: 5px; .foo { width: -webkit-calc(#{$a} - #{$b}); width: -moz-calc(#{$a} - #{$b}); width: calc(#{$a} - #{$b}); }
SCSS [编译时]和CSS [运行时]都有一个calc
函数。 你可能会调用前者而不是后者。
由于显而易见的原因,混合单元将不能在编译时运行,而是在运行时运行。
您可以使用unquote
(SCSS函数)强制后者。
.selector { height: unquote("-webkit-calc(100% - 40px)"); }
$var:25%; $foo:5px; .selector { height:unquote("calc( #{$var} - #{$foo} )"); }
如果你知道容器的宽度,你可以这样做:
#container width: #{200}px #element width: #{(0.25 * 200) - 5}px
我知道,在许多情况下#container可以有一个相对宽度。 那么这是行不通的。
对不起,要恢复旧的线程 – 指南针'拉伸:在伪select符后可能适合您的目的 – 例如。 如果你想要一个div来填充从左到右(50%+ 10px)的屏幕宽度,你可以使用(SASS缩进语法):
.example background: red +stretch(0, -10px, 0, 0) &:after +stretch(0, 0, 0, 50%) content: ' ' background: blue
:after元素在.example右侧填充50%(剩下50%可用于.example的宽度),然后.example被拉伸到这个宽度加上10px。