Scss变量未解析为实际值。

huangapple go评论82阅读模式
英文:

Scss variable not resolving to actual value

问题

在使用以下方式初始化一个 SCSS 变量时,该变量包括一个 CSS 变量和一个回退值:

$BaseFontSize: var(--BaseFontSize, 10px);

我尝试在一个函数中使用 BaseFontSize,但它抛出以下错误:

错误未定义操作 "40px/var(--BaseFontSize, 10px) * 1rem"

抛出错误的函数如下:

@function px-to-rem($px) {
  $convertedValue: ($px / $BaseFontSize) * 1rem;
  @return $convertedValue;
}

在代码中的使用:

.className{
  padding: px-to-rem(40px);
}
英文:

After initializing a scss variable with a css variable and a fallback value using this manner

$BaseFontSize: var(--BaseFontSize, 10px);

I am trying to use BaseFontSize in a function, but it throws the following error:

> Error: Undefined operation "40px/var(--BaseFontSize, 10px) * 1rem".

The function which is throwing the error:

@function px-to-rem($px) {
  $convertedValue: ($px / $BaseFontSize) * 1rem;
  @return $convertedValue;
}

Usage in Code:

.className{
  padding: px-to-rem(40px);
}

答案1

得分: 2

CSS变量只在运行时解析;当应用CSS样式并存在DOM时。(DOM嵌套对于变量解析是相关的)

而SCSS变量、函数和混合是纯粹的SASS预处理器功能,只在构建过程中解析/执行。在那个时刻,没有DOM,没有嵌套,也没有应用的CSS样式;SASS将分配给你的SCSS变量的值仅视为一个字符串。

$base-font-size: var(--base-font-size, 10px);

被视为与

$base-font-size: "var(--base-font-size, 10px)";

相同。

英文:

CSS variables are only resolved during runtime; when CSS styles are applied and a DOM exists. (the DOM nesting is relevant for variable resolution)

SCSS variables, functions, and mixins are purely SASS preprocessor features and are resolved/executed only during the build process. At that point in time there is no DOM, no nesting, and no applied css styles; and SASS treats the value assigned to your SCSS variable as merely a string.

$base-font-size: var(--base-font-size, 10px);

is treated exactly like

$base-font-size: "var(--base-font-size, 10px)";

答案2

得分: 1

你可以更新你的函数以及如何使用它来实现类似的结果:

需要从你的CSS变量中移除单位,以及传递给函数的参数:--BaseFontSize: 16;font-size: px-to-rem(32);

然后,更新函数以使用 calc()calc(#{$px}rem / var(--BaseFontSize));

编译后的CSS将如下所示:

:root {
  --BaseFontSize: 16;
}

p {
  font-size: calc(32rem / var(--BaseFontSize));
}
英文:

You could update your function and how you use it to achieve a similar result:

You will need to remove the unit from your css variable, and the argument passed to the function: --BaseFontSize: 16;, font-size: px-to-rem(32);
.

Then, update the function to use calc(): calc(#{$px}rem / var(--BaseFontSize));.

:root {
  --BaseFontSize: 16;
}

$BaseFontSize: var(--BaseFontSize);

@function px-to-rem($px) {
  @return calc(#{$px}rem / var(--BaseFontSize));
}

p {
  font-size: px-to-rem(32);
}

The compiled CSS will look like this:

:root {
  --BaseFontSize: 16;
}

p {
  font-size: calc(32rem / var(--BaseFontSize));
}

huangapple
  • 本文由 发表于 2023年8月10日 17:13:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/76874278.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定