gpt4 book ai didi

sass - 基于类在 Sass 中定义变量

转载 作者:行者123 更新时间:2023-12-02 01:52:11 27 4
gpt4 key购买 nike

我想知道是否可以根据类是否设置在 Sass 中定义变量。我需要做一些字体类型测试并想更改字体变量 $basicFont动态地基于 body 类。

例如。:

$basicFont: Arial, Helvetica, sans-serif;

body {
&.verdana {
$basicFont: Verdana, sans-serif;
}
&.tahoma {
$basicFont: Tahoma, sans-serif;
}
}

有没有可能在 Sass 中处理这个问题?

最佳答案

不。你所要求的需要 Sass 了解 DOM。 Sass 只直接编译成 CSS,它永远不会发送到浏览器。

使用您的示例代码,您所做的就是覆盖 $basicFont每次。在 3.4 或更高版本中,您的变量将仅存在于设置它的块的范围内。

因此,您唯一真正的选择是使用 mixin 或扩展。

延长

这是有效的,但仅适用于非常简单的情况。

%font-family {
&.one {
font-family: Verdana, sans-serif;
}

&.two {
font-family: Tahoma, sans-serif;
}
}

.foo {
@extend %font-family;
}

输出:
.one.foo {
font-family: Verdana, sans-serif;
}
.two.foo {
font-family: Tahoma, sans-serif;
}

混入

如果您想对在何处使用哪些变量进行更细粒度的控制,我会推荐这种方法。
$global-themes:
( '.one': ('font-family': (Verdana, sans-serif), 'color': red)
, '.two': ('font-family': (Tahoma, sans-serif), 'color': blue)
);

$current-theme: null; // don't touch, this is only used by the themer mixin

@mixin themer($themes: $global-themes) {
@each $selector, $theme in $themes {
$current-theme: $theme !global;
&#{$selector} {
@content;
}
}
}

@function theme-value($property, $theme: $current-theme) {
@return map-get($theme, $property);
}

.foo {
@include themer {
font-family: theme-value('font-family');

a {
color: theme-value('color');
}
}
}

输出:
.foo.one {
font-family: Verdana, sans-serif;
}
.foo.one a {
color: red;
}
.foo.two {
font-family: Tahoma, sans-serif;
}
.foo.two a {
color: blue;
}

关于sass - 基于类在 Sass 中定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22147959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com