Sass负变量值?

Ste*_*eve 95 sass css3 compass-sass

我有几个scss选择器,我使用相同数量的正面和负面,如:

padding: 0 15px 15px;
margin: 0 -15px 20px -15px;
Run Code Online (Sandbox Code Playgroud)

我更喜欢为所有15px数量使用变量,但这不起作用:

$pad: 15px;
padding: 0 $pad $pad;
margin: 0 -$pad 20px -$pad;
Run Code Online (Sandbox Code Playgroud)

保证金金额转换为正数.我错过了什么吗?

Zol*_*oth 196

试试吧

margin: 0 (-$pad) 20px (-$pad);
Run Code Online (Sandbox Code Playgroud)

  • 自动尝试了这种方法 - 在计算函数中使用时似乎不起作用。编辑:似乎在使用 calc 时不需要使用括号,但您确实需要插值http://stackoverflow.com/questions/17982111/sass-variable-in-css-calc-function (3认同)

Van*_*Tzo 21

根据sass准则,更合理的解决方案是interpolate变量,如下例:

margin: 0 -#{$pad} 20px -#{$pad};
Run Code Online (Sandbox Code Playgroud)

一个例子:https://www.sassmeister.com/gist/c9c0208ada0eb1fdd63ae47830917293


Bou*_*ouh 6

创建一个函数

@function neg($val) {
  @return $val * -1
};
Run Code Online (Sandbox Code Playgroud)

然后我像这样使用它

$gutter: 30px;

.header {
  margin: $gutter neg($gutter);
}
Run Code Online (Sandbox Code Playgroud)


Evi*_*lDr 5

在考虑了之前的两个答案后,我添加了我的二分之一,但随后阅读了这篇文章(重点是我的):

你应该特别避免使用像#{$number}px. 这实际上并没有创建一个数字!它创建一个看起来像数字的不带引号的字符串,但不适用于任何数字操作或函数。尝试使您的数学单元干净,以便$number已经有 unit px,或者写$number * 1px.

来源

因此,我认为正确的方法如下,它保留了 SASS/SCSS 的数学能力:

$pad: 15px;
padding: 0 $pad $pad;
margin: 0 $pad*-1 20px $pad*-1;
Run Code Online (Sandbox Code Playgroud)

  • 乍一看,这似乎是挑剔的(你的答案),但仔细一看,它确实是更好的答案。毕竟,如果变量确实变成负变量,那么答案就会变成正!$pad: -2rem; ... 边距:0 -#{$pad}; // 变为 margin: 0 --2rem; 边距:0 $pad*-1;// 变为 margin: 0 2rem; (3认同)