- Tailwind CSS 教程
- Tailwind CSS - 首页
- Tailwind CSS - 路线图
- Tailwind CSS - 简介
- Tailwind CSS - 安装
- Tailwind CSS - 编辑器设置
- Tailwind CSS - 核心概念
- Tailwind CSS - 实用优先基础
- Tailwind CSS - 悬停、焦点和其他状态
- Tailwind CSS - 响应式设计
- Tailwind CSS - 深色模式
- Tailwind CSS - 重用样式
- Tailwind CSS - 添加自定义样式
- Tailwind CSS - 函数和指令
- Tailwind CSS - 自定义
- Tailwind CSS - 配置
- Tailwind CSS - 内容配置
- Tailwind CSS - 主题配置
- Tailwind CSS - 自定义屏幕尺寸
- Tailwind CSS - 自定义颜色
- Tailwind CSS - 自定义间距
- Tailwind CSS - 插件
- Tailwind CSS - 预设
- Tailwind CSS - 基础样式
- Tailwind CSS - 预处理
- Tailwind CSS - 布局
- Tailwind CSS - 宽高比
- Tailwind CSS - 容器
- Tailwind CSS - 列
- Tailwind CSS - 断行后
- Tailwind CSS - 断行前
- Tailwind CSS - 断行内
- Tailwind CSS - 边框装饰断开
- Tailwind CSS - 盒子大小
- Tailwind CSS - 显示
- Tailwind CSS - 浮动
- Tailwind CSS - 清除浮动
- Tailwind CSS - 隔离
- Tailwind CSS - 对象适应
- Tailwind CSS - 对象位置
- Tailwind CSS - 溢出
- Tailwind CSS - 滚动行为
- Tailwind CSS - 定位
- Tailwind CSS - 上/右/下/左
- Tailwind CSS - 可见性
- Tailwind CSS - Z-index
- Tailwind CSS - Flexbox 和 Grid
- Tailwind CSS - Flex 基准
- Tailwind CSS - Flex 方向
- Tailwind CSS - Flex 换行
- Tailwind CSS - Flex
- Tailwind CSS - Flex 伸展
- Tailwind CSS - Flex 收缩
- Tailwind CSS - 顺序
- Tailwind CSS - 网格模板列
- Tailwind CSS - 网格列开始/结束
- Tailwind CSS - 网格模板行
- Tailwind CSS - 网格行开始/结束
- Tailwind CSS - 网格自动流
- Tailwind CSS - 网格自动列
- Tailwind CSS - 网格自动行
- Tailwind CSS - 间隙
- Tailwind CSS - 内容对齐
- Tailwind CSS - 项目对齐
- Tailwind CSS - 自身对齐
- Tailwind CSS - 内容排列
- Tailwind CSS - 项目排列
- Tailwind CSS - 自身排列
- Tailwind CSS - 内容放置
- Tailwind CSS - 项目放置
- Tailwind CSS - 自身放置
- Tailwind CSS - 间距
- Tailwind CSS - 内边距
- Tailwind CSS - 外边距
- Tailwind CSS - 元素间距
- Tailwind CSS - 尺寸
- Tailwind CSS - 宽度
- Tailwind CSS - 最小宽度
- Tailwind CSS - 最大宽度
- Tailwind CSS - 高度
- Tailwind CSS - 最小高度
- Tailwind CSS - 最大高度
- Tailwind CSS - 尺寸
- Tailwind CSS - 排版
- Tailwind CSS - 字体家族
- Tailwind CSS - 字体大小
- Tailwind CSS - 字体平滑
- Tailwind CSS - 字体样式
- Tailwind CSS - 字体粗细
- Tailwind CSS - 数字字体变体
- Tailwind CSS - 字间距
- Tailwind CSS - 行数限制
- Tailwind CSS - 行高
- Tailwind CSS - 列表样式图像
- Tailwind CSS - 列表样式位置
- Tailwind CSS - 列表样式类型
- Tailwind CSS - 文本对齐
- Tailwind CSS - 文本颜色
- Tailwind CSS - 文本装饰
- Tailwind CSS - 文本装饰颜色
- Tailwind CSS - 文本装饰样式
- Tailwind CSS - 文本装饰粗细
- Tailwind CSS - 文本下划线偏移
- Tailwind CSS - 文本转换
- Tailwind CSS - 文本溢出
- Tailwind CSS - 文本换行
- Tailwind CSS - 文本缩进
- Tailwind CSS - 垂直对齐
- Tailwind CSS - 空格
- Tailwind CSS - 断词
- Tailwind CSS - 连字符
- Tailwind CSS - 内容
- Tailwind CSS - 背景
- Tailwind CSS - 背景附件
- Tailwind CSS - 背景裁剪
- Tailwind CSS - 背景颜色
- Tailwind CSS - 背景原点
- Tailwind CSS - 背景位置
- Tailwind CSS - 背景重复
- Tailwind CSS - 背景大小
- Tailwind CSS - 背景图片
- Tailwind CSS - 渐变颜色停止点
- Tailwind CSS - 边框
- Tailwind CSS - 边框半径
- Tailwind CSS - 边框宽度
- Tailwind CSS - 边框颜色
- Tailwind CSS - 边框样式
- Tailwind CSS - 分隔线宽度
- Tailwind CSS - 分隔线颜色
- Tailwind CSS - 分隔线样式
- Tailwind CSS - 轮廓宽度
- Tailwind CSS - 轮廓颜色
- Tailwind CSS - 轮廓样式
- Tailwind CSS - 轮廓偏移
- Tailwind CSS - 环宽度
- Tailwind CSS - 环颜色
- Tailwind CSS - 环偏移宽度
- Tailwind CSS - 环偏移颜色
- Tailwind CSS - 效果
- Tailwind CSS - 盒子阴影
- Tailwind CSS - 盒子阴影颜色
- Tailwind CSS - 不透明度
- Tailwind CSS - 混合模式
- Tailwind CSS - 背景混合模式
- Tailwind CSS - 滤镜
- Tailwind CSS - 模糊
- Tailwind CSS - 亮度
- Tailwind CSS - 对比度
- Tailwind CSS - 投影
- Tailwind CSS - 灰度
- Tailwind CSS - 色调旋转
- Tailwind CSS - 反转
- Tailwind CSS - 饱和度
- Tailwind CSS - 棕褐色
- Tailwind CSS - 背景模糊
- Tailwind CSS - 背景亮度
- Tailwind CSS - 背景对比度
- Tailwind CSS - 背景灰度
- Tailwind CSS - 背景色调旋转
- Tailwind CSS - 背景反转
- Tailwind CSS - 背景不透明度
- Tailwind CSS - 背景饱和度
- Tailwind CSS - 背景棕褐色
- Tailwind CSS - 表格
- Tailwind CSS - 边框折叠
- Tailwind CSS - 边框间距
- Tailwind CSS - 表格布局
- Tailwind CSS - 标题位置
- Tailwind CSS - 过渡和动画
- Tailwind CSS - 过渡属性
- Tailwind CSS - 过渡持续时间
- Tailwind CSS - 过渡时序函数
- Tailwind CSS - 过渡延迟
- Tailwind CSS - 动画
- Tailwind CSS - 变换
- Tailwind CSS - 缩放
- Tailwind CSS - 旋转
- Tailwind CSS - 位移
- Tailwind CSS - 倾斜
- Tailwind CSS - 变换原点
- Tailwind CSS - 交互性
- Tailwind CSS - 强调色
- Tailwind CSS - 外观
- Tailwind CSS - 光标
- Tailwind CSS - 光标颜色
- Tailwind CSS - 指针事件
- Tailwind CSS - 调整大小
- Tailwind CSS - 滚动行为
- Tailwind CSS - 滚动边距
- Tailwind CSS - 滚动填充
- Tailwind CSS - 滚动捕捉对齐
- Tailwind CSS - 滚动捕捉停止
- Tailwind CSS - 滚动捕捉类型
- Tailwind CSS - 触摸操作
- Tailwind CSS - 用户选择
- Tailwind CSS - 将更改
- Tailwind CSS - SVG
- Tailwind CSS - 填充
- Tailwind CSS - 描边
- Tailwind CSS - 描边宽度
- Tailwind CSS - 可访问性
- Tailwind CSS - 屏幕阅读器
- Tailwind CSS - 强制颜色调整
- Tailwind CSS - 附加内容
- Tailwind CSS - 与预处理器一起使用
- Tailwind CSS - 生产环境优化
- Tailwind CSS - 参考
- Tailwind CSS - 核心概念
- Tailwind CSS - 自定义
- Tailwind CSS - 布局
- Tailwind CSS - Flexbox 和 Grid
- Tailwind CSS - 间距
- Tailwind CSS - 尺寸
- Tailwind CSS - 排版
- Tailwind CSS - 背景
- Tailwind CSS - 边框
- Tailwind CSS - 效果
- Tailwind CSS - 滤镜
- Tailwind CSS - 表格
- Tailwind CSS - 过渡和动画
- Tailwind CSS - 变换
- Tailwind CSS - 交互性
- Tailwind CSS - 资源
- Tailwind CSS - 讨论
- Tailwind CSS - 有用资源
Tailwind CSS - 插件
Tailwind CSS 插件允许使用可重用的第三方插件扩展 Tailwind。插件允许你使用 JavaScript 而不是常规 CSS 代码向 Tailwind 添加新的样式。
要创建你的第一个插件,你需要做两件事
- 导入插件函数:这是通过在你的 Tailwind CSS 配置文件中添加 `import { plugin } from 'tailwindcss/plugin'` 来完成的。
- 将你的插件添加到 plugins 数组: 你可以通过在你的 plugins 数组中调用 plugin 函数来实现这一点。在 plugin 函数内部,你将编写你的插件代码。
const plugin = require('tailwindcss/plugin') module.exports = { plugins: [ plugin(function({ addUtilities, addComponents, e, config }) { // Add your custom styles here }), ] }
插件函数的设计非常灵活。它们接受一个单一的对象作为输入,可以将其分解成多个辅助函数以简化处理。
- addUtilities() 用于注册新的静态实用程序样式。
- matchUtilities() 用于注册新的动态实用程序样式。
- addComponents() 用于注册新的静态组件样式。
- matchComponents() 用于注册新的动态组件样式。
- addBase() 用于注册新的基础样式。
- addVariant() 用于注册自定义静态变体。
- matchVariant() 用于注册自定义动态变体。
- theme() 用于查找用户主题配置中的值。
- config() 用于查找用户 Tailwind 配置中的值。
- corePlugins() 用于检查核心插件是否已启用。
- e() 用于手动转义要在类名中使用的字符串。
官方插件
Tailwind CSS 有几个官方插件,用于核心库中尚未包含的功能。可以使用 npm 安装这些插件,然后将其添加到你的 `tailwind.config.js` 文件中。
/** @type {import('tailwindcss').Config} */ module.exports = { // ... plugins: [ require('@tailwindcss/typography'), require('@tailwindcss/forms'), require('@tailwindcss/aspect-ratio'), require('@tailwindcss/container-queries'), ] }
排版
Tailwind CSS 排版插件简化了内容文本的样式设置。它提供预构建的类,可为来自 Markdown 或 CMS 数据库等地方的内容添加时尚的排版,从而无需太多努力即可使你的文本看起来不错。
<article class="prose lg:prose-xl"> <h1> Garlic bread with cheese: What the science tells us </h1> <p> For years parents have espoused the health benefits of eating garlic bread with cheese to their children, with the food earning such an iconic status in our culture that kids will often dress up as warm, cheesy loaf for Halloween. </p> <p> But a recent study shows that the celebrated appetizer may be linked to a series of rabies cases springing up around the country. </p> <!-- ... --> </article>
表单
@tailwindcss/forms 插件通过提供一组默认样式来简化表单样式设置。这使得创建外观一致的表单更加简单。
宽高比
@tailwindcss/aspect-ratio 插件提供了一种方法,可以在不支持此功能的较旧浏览器中设置元素的宽高比。它添加了新的实用程序类,例如 `aspect-w-*` 和 `aspect-h-*`,用于控制元素的宽度和高度比例。
容器查询
"@tailwindcss/container-queries" 插件允许你使用 "@container" 指令根据其父容器的大小来设置元素的样式。
<div class="@container"> <div class="@lg:text-sky-400"> <!-- ... --> </div> </div>
添加实用程序
addUtilities 和 matchUtilities 函数允许你向 Tailwind CSS 添加自定义样式,就像默认样式一样。但是,只有当你实际在项目中使用这些自定义样式时,它们才会包含在最终 CSS 中。
静态实用程序
`addUtilities` 函数用于添加简单的、不变的样式(实用程序),不支持用户提供的值。
const plugin = require('tailwindcss/plugin') module.exports = { plugins: [ plugin(function({ addUtilities }) { addUtilities({ '.content-auto': { 'content-visibility': 'auto', }, '.content-hidden': { 'content-visibility': 'hidden', }, '.content-visible': { 'content-visibility': 'visible', }, }) }) ] }
动态实用程序
`matchUtilities` 函数允许你创建使用主题配置中值的 CSS 实用程序类。
const plugin = require('tailwindcss/plugin') module.exports = { theme: { tabSize: { 1: '1', 2: '2', 4: '4', 8: '8', } }, plugins: [ plugin(function({ matchUtilities, theme }) { matchUtilities( { tab: (value) => ({ tabSize: value }), }, { values: theme('tabSize') } ) }) ] }
即使在你的主题中没有定义,你也可以使用方括号在你的实用程序中使用自定义值。
<div class="tab-[13]"> <!-- ... --> </div>
前缀和重要性
插件的工具会自动使用用户的设置,例如“前缀”和“重要”选项。
这意味着,给定此 Tailwind 配置
/** @type {import('tailwindcss').Config} */ module.exports = { prefix: 'tw-', important: true, // ... }
上面的示例插件将生成以下 CSS
.tw-content-auto { content-visibility: auto !important; } .tw-content-hidden { content-visibility: hidden !important; } .tw-content-visible { content-visibility: visible !important; }
与修饰符一起使用
使用 `addUtilities` 添加的任何自定义实用程序都可以与其他实用程序类(如 `hover`、`focus` 等)组合使用。
<div class="content-auto lg:content-visible"> <!-- ... --> </div>
提供默认值
实用程序插件可以通过向插件函数的第二个参数提供配置对象来设置默认值。这些默认值的行为类似于原始默认设置,用户可以更改或添加它们。
const plugin = require('tailwindcss/plugin') module.exports = plugin(function({ matchUtilities, theme }) { matchUtilities( { tab: (value) => ({ tabSize: value }), }, { values: theme('tabSize') } ) }, { theme: { tabSize: { 1: '1', 2: '2', 4: '4', 8: '8', } } })
添加组件
Tailwind CSS 中的 `addComponents` 函数允许你创建自定义预先设计的组件,例如按钮、表单、警告等等。这些组件就像你可以设计中使用的构建块,如果需要,你可以使用其他 Tailwind 类修改它们的外观。
要从插件添加新的组件样式,请调用 `addComponents`,并使用 CSS-in-JS 语法传入你的样式。
const plugin = require('tailwindcss/plugin') module.exports = { plugins: [ plugin(function({ addComponents }) { addComponents({ '.btn': { padding: '.5rem 1rem', borderRadius: '.25rem', fontWeight: '600', }, '.btn-blue': { backgroundColor: '#3490dc', color: '#fff', '&:hover': { backgroundColor: '#2779bd' }, }, '.btn-red': { backgroundColor: '#e3342f', color: '#fff', '&:hover': { backgroundColor: '#cc1f1a' }, }, }) }) ] }
前缀和重要性
默认情况下,组件类遵循用户的 `prefix` 首选项,但忽略它们的“重要”首选项。
这意味着,给定此 Tailwind 配置
/** @type {import('tailwindcss').Config} */ module.exports = { prefix: 'tw-', important: true, // ... }
上面的示例插件将生成以下 CSS
.tw-btn { padding: .5rem 1rem; border-radius: .25rem; font-weight: 600; } .tw-btn-blue { background-color: #3490dc; color: #fff; } .tw-btn-blue:hover { background-color: #2779bd; } .tw-btn-red { background-color: #e3342f; color: #fff; } .tw-btn-red:hover { background-color: #cc1f1a; }
通常最好不要使组件声明为重要。但是,如果你绝对需要这样做,你可以手动添加 `!important` 关键字。
const plugin = require('tailwindcss/plugin') module.exports = { plugins: [ plugin(function({ addComponents }) { addComponents({ '.btn': { padding: '.5rem 1rem !important', borderRadius: '.25rem !important', fontWeight: '600 !important', }, // ... }) }) ] }
默认情况下,选择器中的所有类都将添加前缀,因此,如果你添加更复杂的样式,例如:
const plugin = require('tailwindcss/plugin') module.exports = { prefix: 'tw-', plugins: [ plugin(function({ addComponents }) { const components = { // ... '.navbar-inverse a.nav-link': { color: '#fff', } } addComponents(components) }) ] }
将生成以下 CSS:
.tw-navbar-inverse a.tw-nav-link { color: #fff; }
与修饰符一起使用
使用 `addUtilities` 添加的任何自定义实用程序都可以与其他实用程序类(如 `hover`、`focus` 等)组合使用。
<div class="btn md:btn-lg"> <!-- ... --> </div>
添加基础样式
Tailwind CSS 中的 `addBase` 函数允许你添加应用于整个项目的全局基础样式。这非常适合设置默认字体样式、重置浏览器默认值或定义自定义字体。
要从插件添加新的基础样式,请调用 `addBase`,并使用 CSS-in-JS 语法传入你的样式。
const plugin = require('tailwindcss/plugin') module.exports = { plugins: [ plugin(function({ addBase, theme }) { addBase({ 'h1': { fontSize: theme('fontSize.2xl') }, 'h2': { fontSize: theme('fontSize.xl') }, 'h3': { fontSize: theme('fontSize.lg') }, }) }) ] }
添加变体
`addVariant` 和 `matchVariant` 函数允许你创建你自己的自定义修饰符,这些修饰符可以像 `hover`、`focus` 或 `supports` 等内置变体一样使用。
静态变体
使用 `addVariant` 函数创建简单的自定义变体。提供你的自定义变体的名称和一个描述如何修改选择器的格式字符串。
const plugin = require('tailwindcss/plugin') module.exports = { // ... plugins: [ plugin(function({ addVariant }) { addVariant('optional', '&:optional') addVariant('hocus', ['&:hover', '&:focus']) addVariant('inverted-colors', '@media (inverted-colors: inverted)') }) ] }
第一个参数是用户将在 HTML 中使用的修饰符名称,因此上面的示例将使编写如下类成为可能:
<form class="flex inverted-colors:outline ..."> <input class="optional:border-gray-300 ..." /> <button class="bg-blue-500 hocus:bg-blue-600">...</button> </form>
动态变体
`matchVariant` 函数允许你创建自定义参数化变体,类似于内置变体,如 `supports-*`、`data-*` 和 `aria-*`。
const plugin = require('tailwindcss/plugin') module.exports = { plugins: [ plugin(function({ matchVariant }) { matchVariant( 'nth', (value) => { return `&:nth-child(${value})`; }, { values: { 1: '1', 2: '2', 3: '3', } } ); }) ] }
使用 `matchVariant` 定义的变体也支持使用方括号表示法的任意值。
<div class="nth-[3n+1]:bg-blue-500 ..."> <!-- ... --> </div>
如果需要避免与来自相同变体的其他值的优先级问题,请使用 `sort` 选项控制生成的 CSS 的源顺序。
matchVariant("min", (value) => `@media (min-width: ${value})`, { sort(a, z) { return parseInt(a.value) - parseInt(z.value); }, });
父级和兄弟级状态
Tailwind 的特殊功能(如 `group-*` 和 `peer-*`)不会自动与自定义修饰符一起工作。要使它们工作,你需要使用 `:merge` 将自定义修饰符注册为单独的变体。这确保了 `group` 和 `peer` 类只在最终样式表中出现一次,从而确保正确的应用。
const plugin = require('tailwindcss/plugin') module.exports = { // ... plugins: [ plugin(function({ addVariant }) { addVariant('optional', '&:optional')addComponents([ { '@media (min-width: 500px)': { // ... } }, { '@media (min-width: 500px)': { // ... } }, { '@media (min-width: 500px)': { // ... } }, ]) addVariant('group-optional', ':merge(.group):optional &') addVariant('peer-optional', ':merge(.peer):optional ~ &') }) ] }
扩展配置
插件可以通过向插件函数的第二个参数提供对象来向用户的 `tailwind.config.js` 文件添加自己的设置。
const plugin = require('tailwindcss/plugin') module.exports = plugin(function({ matchUtilities, theme }) { matchUtilities( { tab: (value) => ({ tabSize: value }), }, { values: theme('tabSize') } ) }, { theme: { tabSize: { 1: '1', 2: '2', 4: '4', 8: '8', } } })
公开选项
`plugin.withOptions` API 允许你使用自定义配置对象配置插件。这使用户能够调整插件的行为,而这些行为与主题设置没有直接关系。例如,你可以使用此 API 让用户指定插件使用的类名。此 API 的工作方式类似于常规插件 API,但不是直接传递值,而是定义接收用户配置选项并返回插件相应值的函数。
const plugin = require('tailwindcss/plugin') module.exports = plugin.withOptions(function (options = {}) { return function({ addComponents }) { const className = options.className ?? 'markdown' addComponents({ [`.${className}`]: { // ... } }) } }, function (options) { return { theme: { markdown: { // ... } }, } })
用户将在他们的插件配置中注册插件时,传递他们的选项。
/** @type {import('tailwindcss').Config} */ module.exports = { theme: { // ... }, plugins: [ require('./plugins/markdown.js')({ className: 'wysiwyg' }) ], }
如果用户不需要传入任何自定义选项,他们也可以正常注册以这种方式创建的插件,而无需调用它们。
/** @type {import('tailwindcss').Config} */ module.exports = { theme: { // ... }, plugins: [ require('./plugins/markdown.js') ], }
CSS-in-JS 语法
Tailwind 的插件系统使用 JavaScript 对象编写 CSS 规则,类似于 Emotion 等 CSS-in-JS 库的方式。它在后台使用 postcss-js。
考虑这个简单的 CSS 规则:
.card { background-color: #fff; border-radius: .25rem; box-shadow: 0 2px 4px rgba(0,0,0,0.2); }
将其转换为 CSS-in-JS 对象如下所示:
addComponents({ '.card': { 'background-color': '#fff', 'border-radius': '.25rem', 'box-shadow': '0 2px 4px rgba(0,0,0,0.2)', } })
也支持嵌套(由 postcss-nested 提供支持),使用你可能熟悉的与 Sass 或 Less 相同的语法。
addComponents({ '.card': { backgroundColor: '#fff', borderRadius: '.25rem', boxShadow: '0 2px 4px rgba(0,0,0,0.2)', '&:hover': { boxShadow: '0 10px 15px rgba(0,0,0,0.2)', }, '@media (min-width: 500px)': { borderRadius: '.5rem', } } })
可以在同一个对象中定义多个规则。
addComponents({ '.btn': { padding: '.5rem 1rem', borderRadius: '.25rem', fontWeight: '600', }, '.btn-blue': { backgroundColor: '#3490dc', color: '#fff', '&:hover': { backgroundColor: '#2779bd' }, }, '.btn-red': { backgroundColor: '#e3342f', color: '#fff', '&:hover': { backgroundColor: '#cc1f1a' }, }, })
或者,如果需要重复相同的键,则可以作为对象数组。
addComponents([ { '@media (min-width: 500px)': { // ... } }, { '@media (min-width: 500px)': { // ... } }, { '@media (min-width: 500px)': { // ... } }, ])