我用的是react 18,nextjs 13和tailwindcss,postcss,自动前缀
预期:单击按钮切换边框颜色和其他样式行为:除border-color之外的所有样式切换
问:为什么border-color的行为方式与其他样式不同?
损坏代码:
import Head from 'next/head'
import { useState } from 'react'
export default function Home() {
const [dark, darkSet] = useState(true)
function handleClick() {
darkSet((prev) => !prev)
}
const bgColor = 'bg-' + (dark ? 'black' : 'white')
const textColor = 'text-' + (dark ? 'white' : 'black')
const borderColor = 'border-' + (dark ? 'white' : 'black')
const borderStyle = 'border-' + (dark ? 'solid' : 'dashed')
return (
<>
<Head>
<title>Create Next App</title>
<meta name="description" content="Generated by create next app" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</Head>
<main>
<div className={`flex min-h-screen min-w-screen `}>
<div
className={`${bgColor} ${textColor} border-8 ${borderStyle} ${borderColor}`}
>
Get started by editing
</div>
<button onClick={handleClick} className="h-8 bg-red-500">
theme
</button>
</div>
</main>
</>
)
}
2条答案
按热度按时间csbfibhn1#
变更
到
解释:
是否建议在
tailwind
中使用dynamic class
?不
通常不建议在
tailwind-css
中使用dynamic classes
,因为tailwind
使用tree-shaking
,即任何未在源文件中声明的类,都不会在输出文件中生成。因此,始终建议使用***完整类名***
根据[文件][1]
如果使用字符串插值或将部分类名连接在一起,Tailwind将找不到它们,因此不会生成相应的CSS
周围没有工作吗?
是
作为最后的手段,Tailwind提供[安全列表课程][2]。
安全列表是最后的手段,应该只在不可能扫描某些内容以查找类名的情况下使用。这种情况很少见,您应该几乎永远不需要此功能。
您可以使用[regular expressions][3]来包含使用
pattern
所需的所有颜色注意:您也可以强制Tailwind创建
variants
:在
tailwind.config.js
中ffx8fchx2#
更新:这仍然不工作的颜色以外的黑色/白色,这是怎么回事?
解决方案:根据tailwindcss文档
不要动态构造类名
始终使用完整的类名
https://tailwindcss.com/docs/content-configuration#dynamic-class-names
工作代码:
不同之处在于,整个实用程序类是有条件地构造的,然后插入到jsx
className
属性中的模板字符串文字中。问:我仍然想知道为什么
border-color
的情况不同,因为我在有条件地构造实用程序类时遇到过几个类似的情况。