如果使用函数设置值,SCSS 变量中的不同值
Different value in SCSS variable if using function for setting value
我有一个 util scss
文件用于我的断点,以便在我的 Angular
项目中重用它们:
$breakpoints: (
sm: 768px,
md: 1024px,
lg: 1280px,
xl: 1400px
);
$bp-sm: get-bp('sm');
$bp-md: get-bp('md');
$bp-lg: get-bp('lg');
$bp-xl: get-bp('xl');
@function get-bp($bp) {
@if $bp {
$bp: map-get($breakpoints, $bp);
} @else {
@error "Parameter #{$bp} is unknown or empty.";
}
@return $bp;
}
我有一个断点列表。我需要另一个 util 文件的函数,我在其中循环遍历列表并为每个断点呈现媒体查询。 scss
变量用于 Angular
组件样式中的硬编码媒体查询。所以我尝试通过调用函数来设置变量的值,所以我避免了值的冗余并使用相同的列表。
.logo {
width: 250px;
@media (min-width: $bp-md) {
width: 650px;
}
}
.button {
padding: 20px;
@media (min-width: $bp-md) {
padding: 50px;
}
}
我的问题是,当检查我编译的 css
的徽标时,media query
看起来像这样:@media (min-width: 1024px) {...}
(因此它具有预期值,但对于我的按钮它看起来像这样:@media (min-width: get-bp('md')) {...}
(因此它不会映射将函数调用显示为值的值)。两者都是导入断点实用程序的独立 Angular 组件。
所以我的问题是,是否可以通过调用函数为 scss
变量赋值?为什么它对一个组件有效但对另一个组件不起作用?我知道我可以用 map-get()
来做到这一点,但我已经在函数中这样做了,所以它在某种程度上也是多余的。
css 行的顺序很重要。
您应该将您的功能放在全局范围内,并在以下几行中使用它。
告诉我这个解决方案是否有效。
它太大而无法评论,但是我会像这样重写查询:
@media (min-width: $bp-md) {
.button {
padding: 50px;
}
.logo {
width: 650px;
}
}
在 SASS 中,函数需要在使用前声明。正如在你的例子中,它不是 $bp-sm: get-bp('sm')
不知道你想调用一个函数并向变量建议一个字符串。
解决方法:在函数声明之后写变量。该代码应该有效:
// ### SASS:
$breakpoints: (
sm: 768px,
md: 1024px,
lg: 1280px,
xl: 1400px
);
// function-declaration FIRST:
@function get-bp($bp) {
@if $bp {
$bp: map-get($breakpoints, $bp);
} @else {
@error "Parameter #{$bp} is unknown or empty.";
}
@return $bp;
}
// variables settings with function call
// AFTER FUNCTION DECLARATION
$bp-sm: get-bp('sm');
$bp-md: get-bp('md');
$bp-lg: get-bp('lg');
$bp-xl: get-bp('xl');
.logo {
width: 250px;
@media (min-width: $bp-md) {
width: 650px;
}
}
.button {
padding: 20px;
@media (min-width: $bp-md) {
padding: 50px;
}
}
// ### compiles to CSS
.logo {
width: 250px;
}
@media (min-width: 1024px) {
.logo {
width: 650px;
}
}
.button {
padding: 20px;
}
@media (min-width: 1024px) {
.button {
padding: 50px;
}
}
我有一个 util scss
文件用于我的断点,以便在我的 Angular
项目中重用它们:
$breakpoints: (
sm: 768px,
md: 1024px,
lg: 1280px,
xl: 1400px
);
$bp-sm: get-bp('sm');
$bp-md: get-bp('md');
$bp-lg: get-bp('lg');
$bp-xl: get-bp('xl');
@function get-bp($bp) {
@if $bp {
$bp: map-get($breakpoints, $bp);
} @else {
@error "Parameter #{$bp} is unknown or empty.";
}
@return $bp;
}
我有一个断点列表。我需要另一个 util 文件的函数,我在其中循环遍历列表并为每个断点呈现媒体查询。 scss
变量用于 Angular
组件样式中的硬编码媒体查询。所以我尝试通过调用函数来设置变量的值,所以我避免了值的冗余并使用相同的列表。
.logo {
width: 250px;
@media (min-width: $bp-md) {
width: 650px;
}
}
.button {
padding: 20px;
@media (min-width: $bp-md) {
padding: 50px;
}
}
我的问题是,当检查我编译的 css
的徽标时,media query
看起来像这样:@media (min-width: 1024px) {...}
(因此它具有预期值,但对于我的按钮它看起来像这样:@media (min-width: get-bp('md')) {...}
(因此它不会映射将函数调用显示为值的值)。两者都是导入断点实用程序的独立 Angular 组件。
所以我的问题是,是否可以通过调用函数为 scss
变量赋值?为什么它对一个组件有效但对另一个组件不起作用?我知道我可以用 map-get()
来做到这一点,但我已经在函数中这样做了,所以它在某种程度上也是多余的。
css 行的顺序很重要。 您应该将您的功能放在全局范围内,并在以下几行中使用它。 告诉我这个解决方案是否有效。
它太大而无法评论,但是我会像这样重写查询:
@media (min-width: $bp-md) {
.button {
padding: 50px;
}
.logo {
width: 650px;
}
}
在 SASS 中,函数需要在使用前声明。正如在你的例子中,它不是 $bp-sm: get-bp('sm')
不知道你想调用一个函数并向变量建议一个字符串。
解决方法:在函数声明之后写变量。该代码应该有效:
// ### SASS:
$breakpoints: (
sm: 768px,
md: 1024px,
lg: 1280px,
xl: 1400px
);
// function-declaration FIRST:
@function get-bp($bp) {
@if $bp {
$bp: map-get($breakpoints, $bp);
} @else {
@error "Parameter #{$bp} is unknown or empty.";
}
@return $bp;
}
// variables settings with function call
// AFTER FUNCTION DECLARATION
$bp-sm: get-bp('sm');
$bp-md: get-bp('md');
$bp-lg: get-bp('lg');
$bp-xl: get-bp('xl');
.logo {
width: 250px;
@media (min-width: $bp-md) {
width: 650px;
}
}
.button {
padding: 20px;
@media (min-width: $bp-md) {
padding: 50px;
}
}
// ### compiles to CSS
.logo {
width: 250px;
}
@media (min-width: 1024px) {
.logo {
width: 650px;
}
}
.button {
padding: 20px;
}
@media (min-width: 1024px) {
.button {
padding: 50px;
}
}