如何使用 TailwindCSS 将动态颜色用于 ShadcnUI 复选框?

How to use dynamic color to ShadcnUI checkbox using TailwindCSS?

提问人:Owenn 提问时间:11/16/2023 更新时间:11/16/2023 访问量:60

问:

因此,我有调用该字段的数据,我使用它来动态呈现每个数据的颜色。我正在尝试在每个数据的复选框上使用此字段(复选框组件来自 ShadcnUI)。colorHexCode

默认情况下,如下所示:

<Checkbox className="w-4 h-4 data-[state=checked]:bg-red-500" />

我想做什么:

<Checkbox className={`w-4 h-4 data-[state=checked]:bg-[${data.colorHexCode}]`} />

我知道这是行不通的,因为 TW 基本上不支持它,所以我知道我们可以应用动态颜色的唯一方法是使用参数,但是我如何仅在选中复选框时才应用它?style

我现在能想到的唯一方法是控制组件,然后有条件地渲染它,但我只是想知道是否有更好或更简单的方法来做到这一点。Checbox

javascript 顺风 css

评论


答:

0赞 Anatol 11/16/2023 #1

使用 Tailwind CSS 和模板文字动态设置复选框的背景颜色时遇到的问题源于 Tailwind 编译器的运行方式。Tailwind CSS 旨在提高效率,作为其构建过程的一部分,它会从最终的 CSS 包中删除所有未使用的类。此修剪过程要求在代码中显式提及完整的类名。由于模板文字会动态生成类名,因此 Tailwind 的编译器无法在构建时预测这些类名,因此无法将它们包含在最终的 CSS 中。

在您的例子中,当您尝试使用模板文字将十六进制颜色代码注入类名(例如,)时,Tailwind 的编译器在构建过程中无法识别此动态类名。因此,该类在最终的 CSS 中不存在,因此不会应用所需的样式。data-[state=checked]:bg-[${data.colorHexCode}]

但是,有一个简洁的解决方案,涉及使用 CSS 变量来动态设置背景颜色。此方法利用 CSS 变量以内联方式定义,然后在 Tailwind CSS 类中引用的功能。以下是将其应用于 Checkbox 组件的方法:

<Checkbox
  className="w-4 h-4 data-[state=checked]:bg-[var(--primary)]"
  style={{ "--primary": data.colorHexCode }}
/>

在此示例中,我们在 style 属性中内联定义了一个 CSS 变量。的值设置为数据中所需的颜色十六进制代码。然后,在 className 中,我们使用 Tailwind 的任意值语法 () 在选中复选框时将变量应用为背景色(用 表示)。--primary--primarybg-[var(--primary)]--primarydata-[state=checked]

这种方法将 Tailwind CSS 的实用性与 CSS 变量的灵活性相结合,允许您根据组件的状态或属性动态更改样式。

评论

0赞 Owenn 11/16/2023
一个简单的问题,当您在样式中设置变量时,它是全局应用,还是与它所应用的组件隔离?--primary
0赞 Anatol 11/16/2023
@Owenn 在 HTML 元素的 style 属性中设置 CSS 变量时,该变量的作用域仅限于元素本身及其子元素。它不适用于全球。如果我的回复解决了您的问题,如果您能将其标记为已接受的答案,我将不胜感激:)
0赞 Dalija Prasnikar 11/16/2023
这篇文章似乎全部或部分是用人工智能工具创建的。请注意,生成式 AI(例如 ChatGPT)已被禁止,请阅读帮助中心:AI 政策。不允许使用 AI 工具生成或改写您在 Stack Overflow 上发布的内容,即使您事先审查了这些内容。他人的作品没有署名也构成剽窃。读者应该仔细和批判性地审查这个答案,因为人工智能生成的信息通常包含根本性的错误和错误信息。
0赞 Anatol 11/17/2023
@DalijaPrasnikar有趣的是,我只是试着问 ChatGPT 这个问题,它无法接近我想出的解决方案。我自己 100% 想出了这个解决方案,并对其进行了测试并确保它有效。我花了半个小时试图尽可能地解释它背后的逻辑,使它尽可能清晰和容易理解。但无论如何,我感谢你投反对票并完全诋毁我半小时的工作