Sass lightness()函数不适用于TailwindCSS主题变量

Sass lightness()函数不适用于TailwindCSS主题变量,sass,tailwind-css,Sass,Tailwind Css,我有一个项目主题的彩色Sass地图,让我有机会循环并生成类选项(例如,.row--primary和.row--secondary等),而不必手动使用Tailwind的变量指定它们。这些定义如下: $colors: ( 'primary': theme('colors.green.700'), 'secondary': theme('colors.red.500'), ); 然后使用我的.rowpartial,我可以执行以下操作: .row { @each

我有一个项目主题的彩色Sass地图,让我有机会循环并生成类选项(例如,
.row--primary
.row--secondary
等),而不必手动使用Tailwind的变量指定它们。这些定义如下:

$colors: (
    'primary':      theme('colors.green.700'),
    'secondary':    theme('colors.red.500'),
);
然后使用我的
.row
partial,我可以执行以下操作:

.row {
    @each $name, $hex in $colors {
        &--#{$name} {
            background: $hex;

            // Setting the text colour based on how dark/light the bg is.
            color: set-text-color($hex);
        }
    }
}
在这里,有一个利用Sass亮度功能的函数,因此我可以根据背景自动生成暗文本或亮文本:

@function set-text-color($color) {
    @if (lightness($color) > 80) {
        @return color('black');
    } @else {
        @return color('white');
    }
}
但这会引发以下错误:
错误:“亮度($color)”的参数“$color”必须是颜色


为了解决这个问题,我做了很多努力。当我将使用tailwind变量(
theme(
)的主题地图变量替换为基本十六进制时,它就起作用了。有没有办法让我仍然可以访问TailwindCSS变量?

Tailwind应用于postss阶段,该阶段在更少、scss、sass处理器之后。由于theme()是一个Tailwind函数,因此该值在预处理器编译期间不可用

这一特殊情况将得到进一步解释


我还没有尝试过(但很快就会尝试),但您应该能够将颜色值存储在JSON文件中。然后使用在SCSS中导入此文件。然后返回
tailwind.config.js
导入此JSON文件并使用其中的值。这将为你的价值观创造一个单一的真实来源。

这意味着
主题('colors.green.700')
不是一种颜色。尝试
@debug
并查看它返回什么。调试器正在输出
DEBUG:color:theme(“colors.orange.500”)
。所以它不是获取与函数相关联的Tailwind变量,而是按原样呈现它。是的,这就是我猜测的。不幸的是,您无法使用Sass提取任何“外来”数据。