@mixin themeify { @each $theme-name, $theme-map in $themes { $theme-map: $theme-map !global; [data-theme="#{$theme-name}"] #{if(&, "&", "*")} { @content; } } }
时间: 2024-04-17 14:27:00 浏览: 122
你的代码有一些问题。首先,你试图在循环内部使用 `!global` 修饰符将 `$theme-map` 变量设置为全局变量,但这是无效的。在 Sass 中,你不能将循环变量直接设置为全局变量。
其次,使用 `#{if(&, "&", "*")}` 来构建选择器是错误的,因为 `&` 是 Sass 中的特殊字符,只能在选择器上下文中使用。你可以直接使用 `&` 来引用循环内部的选择器。
下面是修正后的代码示例:
```scss
@mixin themeify {
@each $theme-name, $theme-map in $themes {
[data-theme="#{$theme-name}"] {
@media (prefers-color-scheme: dark) {
@content;
}
}
}
}
```
在修正后的代码中,我们移除了对 `$theme-map` 的 `!global` 修饰符,并使用 `@content` 来插入样式。然后,我们根据 `data-theme` 属性的值来匹配相应的主题,并在暗黑模式下应用样式。
请根据你的实际需求修改示例代码,并确保正确设置主题样式。如果你还有其他问题,请提供更多上下文或完整的代码示例,以便我能更好地帮助你。
相关问题
@mixin themeify { @each $theme-name, $theme-map in $themes {
根据你提供的代码,看起来你正在使用 Sass 的 `@each` 指令来迭代一个名为 `$themes` 的 map。然后,你将每个迭代的键值对分别赋值给变量 `$theme-name` 和 `$theme-map`。
然而,根据你的代码片段,我们无法确定 `$themes` 这个 map 变量在何处定义。你需要确保在使用 `@mixin themeify` 之前定义了 `$themes` 这个 map 变量,并且它包含有效的键值对。
下面是一个示例,展示了如何定义 `$themes` map 变量并使用 `@mixin themeify`:
```scss
$themes: (
theme1: (
color: blue,
font-size: 16px,
),
theme2: (
color: red,
font-size: 18px,
),
);
@mixin themeify {
@each $theme-name, $theme-map in $themes {
// 在这里编写你想要执行的代码
// 使用 $theme-name 和 $theme-map 变量来访问每个主题的信息
}
}
@include themeify; // 调用 mixin
```
在上面的示例中,我们首先定义了一个名为 `$themes` 的 map,其中包含两个主题(`theme1` 和 `theme2`)。然后,我们定义了 `@mixin themeify` 并在其中使用 `@each` 迭代 `$themes` map 变量。
请确保你按照这个示例中的方式定义和使用 `$themes` map 变量,并在 `@mixin themeify` 中编写你希望执行的代码。如果你仍然遇到问题,请提供更多的上下文或完整的代码片段,以便我能够更好地帮助你。
@mixin themeify { @each $theme-name, $theme-map in $themes { @media (prefers-color-scheme: dark) { $theme-map: $theme-map !global; [data-theme="#{$theme-name}"] #{if(&, "&", "*")} { @content; } } } }
你的代码中有一些问题。首先,你在 `@each` 循环内部使用了 `@media` 查询,这将导致在每个主题循环中都会生成相同的 `@media` 查询,并且无法正确设置主题样式。
其次,你试图使用 `!global` 修饰符将 `$theme-map` 变量设置为全局变量,但这是无效的。
最后,在选择器中使用插值时,建议使用 `#{$theme-name}` 而不是 `#{if(&, "&", "*")}`。
下面是修正后的代码示例:
```scss
@mixin themeify {
@each $theme-name, $theme-map in $themes {
[data-theme="#{$theme-name}"] {
@media (prefers-color-scheme: dark) {
@content;
}
}
}
}
```
在修正后的代码中,我们将 `@media` 查询移到了外部,确保它只会被应用于整个选择器块。然后,在选择器内部,我们根据 `data-theme` 属性的值来匹配相应的主题。
请根据你的实际需求修改示例代码,并确保正确设置主题样式。如果你还有其他问题,请提供更多上下文或完整的代码示例,以便我能更好地帮助你。
阅读全文