【问题标题】:Sass negative variable value?Sass负变量值?
【发布时间】:2012-10-29 02:02:25
【问题描述】:

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

padding: 0 15px 15px;
margin: 0 -15px 20px -15px;

我更愿意为所有 15px 的数量使用一个变量,但这不起作用:

$pad: 15px;
padding: 0 $pad $pad;
margin: 0 -$pad 20px -$pad;

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

【问题讨论】:

    标签: css sass compass-sass


    【解决方案1】:

    这样试试

    margin: 0 (-$pad) 20px (-$pad);
    

    【讨论】:

    • 自动尝试了这种方法 - 在 calc 函数中使用时似乎不起作用。编辑:似乎你在使用 calc 时不需要使用括号,但你确实需要插入 stackoverflow.com/questions/17982111/…
    【解决方案2】:

    根据 sass 指南,更合理的解决方案是使用 interpolate 变量,如下例所示:

    margin: 0 -#{$pad} 20px -#{$pad};
    

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

    【讨论】:

    【解决方案3】:

    在考虑了前两个答案后,我添加了我的二分之一,但随后阅读了这个(强调我的):

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

    Source

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

    $pad: 15px;
    padding: 0 $pad $pad;
    margin: 0 $pad*-1 20px $pad*-1;
    

    【讨论】:

    • 乍一看,这似乎是挑剔(你的答案),但第二眼看它确实是更好的答案。毕竟,如果变量确实变成了负变量,那么答案就变成了正数! $垫:-2rem; ...边距:0 -#{$pad}; // 变为边距:0 --2rem;边距:0 $pad*-1; // 变为边距:0 2rem;
    【解决方案4】:

    创建一个函数

    @function neg($val) {
      @return $val * -1
    };
    

    那我就这样用

    $gutter: 30px;
    
    .header {
      margin: $gutter neg($gutter);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2017-03-27
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2012-09-11
      相关资源
      最近更新 更多