发布于 2024-02-25, 更新于 2025-11-15
Tailwind CSS 是当前最流行的样式框架,拥有良好的生态。它提供了 css 基础工具类,可在 html 标签中完成样式代码编写。
官方网站: https://tailwindcss.com/
它有许多优势:
另外,它在 AIGC 方面很友好:
可在官方的在线编辑器所见即所得的编码,然后复制到项目中。
配置 IDE 后,类名可以有很好的智能提示,也能同时显示类名对应的 css 代码。
"tailwindCSS.includeLanguages": {
"javascript": "javascript",
"html": "HTML"
},
"editor.quickSuggestions": {
"strings": true
},
各框架中的创建方式:
https://tailwindcss.com/docs/installation/framework-guides
官方提供了 prettier-plugin-tailwindcss 插件,可用于排序。可通过 prettier 结合 eslint 实现一体化控制。
// .prettierrc
{
"plugins": ["prettier-plugin-tailwindcss"]
}
Tailwind 有一些定义的语法
!tw-bottom-tw-bottom-5*: 修饰符自定义的状态修饰符:
group-* 去控制整个组的状态生效时的效果,如 group-hover: 控制组被 hover 的效果。peer-disabled 是当前面元素 disabled 时本元素的样式,同样可以命名和用自定义类名少量自定义概念的工具类:
width、height、padding、margin、space、gap 等都使用了数值表示,它的含义为:
m-2 代表 8 pxm-0.5,表示 2 px-mt-1 ,表示 margin-top: -4px默认的媒体查询断点 sm md lg xl 2xl ,是使用 min-width 控制的,移动优先,开发时先考虑小屏幕样式,再处理大屏幕样式。
@media (min-width: 640px)@media (min-width: 768px)@media (min-width: 1024px)@media (min-width: 1280px)@media (min-width: 1536px)使用方法:
lg:w-16 这种形式写特点断点下的样式const isLg = useMedia("(min-width: 1024px)", false) 来判断tailwind 提供了许多精美的颜色: https://tailwindcss.com/docs/customizing-colors
比如希望使用 purple 中 500 这个颜色,写成:
更多颜色用法:
bg-gradient-to-r from-fuchsia-600 to-pink-600可通过 theme.extend.colors 配置文件继续添加自定义颜色。比如 shadcn/ui 初始化后就会创建:
border: "hsl(var(--border))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
background: "hsl(var(--background))",
foreground: "hsl(var(--foreground))",
primary: {
DEFAULT: "hsl(var(--primary))",
foreground: "hsl(var(--primary-foreground))",
},
// 省略其他配置
那么对于这些自定义的样式,也是这样使用:
这些颜色使用了 css 变量,可自由调配,类似地也可以其他设计系统结合起来,比如定义一个 tailwind 的颜色,使用 ant design 的 css 变量 --ant-color-primary
通过 tailwind-merge 包,用于合并 tailwind 类名。
如作为一个组件,组件内部使用了 px-2 py-1 组件外部传入 className="p-3" ,通过 tailwind-merge 就可以合并这些样式,避免冲突。
因为 css 样式的优先级是根据编写 css 的定义顺序来的,而非类名顺序,架设 px-2 优先级比 px-1 高,那么从外部传入 px-1 , 即 px-2 px-1 的类名下生效的永远是前面的,所以需要合并。
twMerge('border rounded px-2 py-1', props.className)
可使用 @tailwindcss/typography 插件,通过 prose 类快速获得专业、美观的排版样式。
https://github.com/tailwindlabs/tailwindcss-typography
支持多种尺寸,主要是影响字号,如判断大屏幕使用更大字号 prose lg:prose-xl;默认有最大宽度,可使用 max-w-none 覆盖;支持配置支持黑夜模式 dark:prose-invert。
<div className="prose lg:prose-xl dark:prose-invert max-w-none" ref={ref}>
<div dangerouslySetInnerHTML={{ __html: content }}></div>
</div>
corePlugins.preflight 设置为 false。可以再手动引入 tailwind 的基础样式,解决冲突的部分。使用@layer base 指令向Tailwind的 base,在这里写基础样式,可以确保它们在其他样式之前加。
通过动态计算的类名字符,可能会在生产打包时被删除。
所以动态计算时,需要编写完整的类名:
<div class="{{ error ? 'text-red-600' : 'text-green-600' }}"></div>
文档说明: https://tailwindcss.com/docs/content-configuration#dynamic-class-names
组件库:
Tailwind 组件区块与模板,这些资源也可以为设计页面提供灵感,可配合 html-to-jsx 工具使用:
可以在 aniftyco/awesome-tailwindcss 仓库或 tailwindawesome.com 中找到更多的资源,或者从搜索引擎搜索。