英文:
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));
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论