Scss 函数不返回计算值

Posted

技术标签:

【中文标题】Scss 函数不返回计算值【英文标题】:Scss function returns no calculated value 【发布时间】:2021-12-12 14:16:09 【问题描述】:

我正在开发用于断点的 mixin,但我遇到了以下问题。 当设置了特定状态(最大宽度模式)时,应通过提取一个 em 值(1px/16(默认字体大小))重新计算断点。

这是我代码的重要部分(我可能会去掉这个函数,基本上这可以内联完成):


$mediaBreakpoint: map-get( $breakpoints, $breakpoint );

// if the mode is for max-width then subtract 1px.
@if map-get( $modes, $mode ) == 'max-width' 
    $mediaBreakpoint: calculateMaxWidth(#$mediaBreakpoint)

@debug $mediaBreakpoint; 

/**
* calculate the max width based on input
*/
@function calculateMaxWidth($breakpoint)
    $newBreakpoint: calc( #$breakpoint - 0.0625em ); // 1px  in em sizing.
    @return $newBreakpoint;


但无论我尝试什么,@debug 值都显示为: 48em-0.0625em // 这是无效的,我需要实际结果(在本例中为 47.9375)。 64em // 有效的最小宽度

这是编译好的css:

@media screen and (max-width: calc( 48em - 0.0625 )) 


我错过了什么?

【问题讨论】:

为什么在调用自己的函数时要对参数使用字符串插值?这里:$mediaBreakpoint: calculateMaxWidth(#$mediaBreakpoint)。这没有必要。 【参考方案1】:

经过大量调试,我自己找到了答案。起初我误解了插值。在深入阅读文档后,我注意到我应该包装整个计算而不是仅仅包装变量,因为我在地图表达式中工作。

引自官方 Sass 文档:

几乎可以在 Sass 样式表的任何地方使用插值,将 SassScript 表达式的结果嵌入到 CSS 块中。

我将函数更改为像这样计算,然后 mixin 开始工作。万岁!

$newBreakpoint: #$breakpoint - 0.0625em;

【讨论】:

以上是关于Scss 函数不返回计算值的主要内容,如果未能解决你的问题,请参考以下文章

scss function和mixin的区别

本地机器上的SCSS函数的返回值与codepen上的相同

excel函数:计算是不是满足计算值,满足直接计算,如不满足则返回一个固定值?

函数不返回小数,有时返回错误值?

scss 一个SCSS函数,如果$ string以$ find结尾则返回true,否则返回false。

scss 一个SCSS函数,如果$ string以$ find结尾则返回true,否则返回false。