将Tailwind CSS项目从v2升级到v3。
Tailwind CSS v3.0是对框架的一次重大更新,它使用了一个全新的内部引擎,因此包含了一些突破性的更改。
我们非常重视稳定,并努力使任何突破性的变化尽可能无痛。对于大多数项目,升级到Tailwind CSS v3.0应该不到30分钟。
要了解更多关于Tailwind CSS v3.0的新功能,请阅读我们博客上的[Tailwind CSS v3.0公告](/blog/tailwindcss-v3)。
使用npm更新Tailwind、PostCSS和autoprefixer:
npm install -D tailwindcss@latest postcss@latest autoprefixer@latest
请注意,Tailwind CSS v3.0需要PostCSS 8,不再支持PostCSS 7。如果您无法升级到PostCSS 8,我们建议您使用[Tailwind CLI](/docs/installation),而不是将Tailwind作为PostCSS插件安装。
如果你在自定义CSS中使用嵌套(与PostCSS嵌套插件结合使用),你还应该在PostCSS配置中[配置Tailwind CSS/nesting
插件](/docs/using with preprocessors#nesting),以确保与Tailwind CSS v3.0的兼容性。
我们所有的第一方插件都已更新,以与v3.0兼容。
如果您正在使用我们的任何插件,请确保同时将它们全部更新到最新版本,以避免版本约束错误。
npm install -D tailwindcss@latest \
@tailwindcss/typography@latest \
@tailwindcss/forms@latest \
@tailwindcss/aspect-ratio@latest \
@tailwindcss/line-clamp@latest \
postcss@latest \
autoprefixer@latest
对于Tailwind CSS v3.0,我们过去提供的基于CSS的CDN构建已被新的[Play CDN](/docs/installing/blay-CDN)所取代,这使您无需构建步骤即可在浏览器中完全使用新引擎。
要尝试一下,在你的<head>
中抛出这个<script>
标签:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Example</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
<!-- -->
</body>
</html>
Play CDN仅用于开发目的——在生产中编译自己的静态CSS构建是一个更好的选择。
我们在3月份宣布的新[Just in Time engine](/blog/Just in Time,下一代顺风css)已经取代了顺风css v3.0中的经典引擎。
新引擎按需生成项目所需的样式,并且可能需要对项目进行一些小的更改,具体取决于您对Tailwind的配置。
如果你已经在Tailwind CSS v2.x中选择了`mode:‘jit’,你可以在v3.0中安全地将其从配置中删除:
module.exports = {
mode: 'jit',
// ...
}
由于Tailwind不再在幕后使用PurgeCSS,我们将“purge”选项重命名为“content”,以更好地反映其用途:
module.exports = {
purge: [
content: [
// Example content paths...
'./public/**/*.html',
'./src/**/*.{js,jsx,ts,tsx,vue}',
],
theme: {
// ...
}
// ...
}
如果您尚未在项目中使用“清除”选项,那么现在配置模板路径至关重要,否则编译的CSS将为空。
由于我们不再在幕后使用PurgeCSS,一些高级清除选项已经发生了变化。有关高级选项的更多信息,请参阅新的[内容配置](/docs/content configuration)文档。
默认情况下,暗模式功能现在使用“media”策略启用,因此您可以从“tailwind.config.js”文件中完全删除此键,除非您使用的是“class”策略。
module.exports = {
darkMode: 'media',
// ...
}
如果当前设置为“false”,您也可以安全地删除此密钥:
module.exports = {
darkMode: false,
// ...
}
在Tailwind CSS v3.0中,默认情况下,每个变量都可以自动用于每个实用程序,因此您可以从Tailwind.config.js
文件中删除variables
部分:
module.exports = {
// ...
variants: {
extend: {
padding: ['hover'],
}
},
}
由于默认情况下所有变体都已启用,因此您不再需要使用以下命令为自定义CSS显式启用这些变体 @variants
或者 @responsive
指令。
相反,将任何自定义CSS添加到适当的 “layer” 使用@layer
指令:
@variants hover, focus {
@layer utilities {
.content-auto {
content-visibility: auto;
}
}
任何添加到Tailwind层中的自定义CSS都将自动支持变体。
有关更多信息,请参阅[使用CSS和@layer添加自定义样式](/docs/addy custom styles#使用CSS和layer)的文档。
在Tailwind CSS v3.0中,转换和过滤实用程序(如scale50
和brightness-75
)将自动生效,而无需添加transform
、filter
或background filter
类:
<div class="transform scale-50 filter grayscale backdrop-filter backdrop-blur-sm">
<div class="scale-50 grayscale backdrop-blur-sm">
虽然将它们留在HTML中没有坏处,但可以安全地删除它们——只有一个例外。如果你依赖“transform”来创建新的堆叠上下文,你可能想离开它,否则你可能会遇到z顺序问题。或者,用“相对”或“隔离”替换它,以强制创建新的堆栈上下文。
新发动机推出a new syntax 为了更改颜色实用程序的不透明度,我们建议从“bg opacity-*”等实用程序迁移到:
<div class="bg-black bg-opacity-25">
<div class="bg-black/25">
旧方法仍然适用于所有情况,除非使用默认的border类的border opacity-*实用程序——在v3中,您需要显式指定边框颜色:
<div class="border border-opacity-25">
<div class="border border-gray-200/25">
其他情况都是一样的,所以除了这个变化之外,你的项目将完全像以前一样工作。不过,我们确实建议继续使用新语法,并计划在v4中默认禁用“border opacity-*”和“bg opacity-”等实用程序,但如果需要,您仍然可以启用它们。
这种新语法适用于所有颜色实用程序,即使是过去没有任何方法更改不透明度的实用程序,如“from-red-500/75”。
Tailwind CSS v3.0现在默认包含扩展调色板中的所有颜色,包括之前禁用的颜色,如青色、玫瑰色、紫红色和石灰色,以及所有五种灰色变体。
在v2.0中,几个默认颜色实际上是扩展颜色的别名:
v2 Default | v2 Extended |
---|---|
green | emerald |
yellow | amber |
purple | violet |
在v3.0中,这些颜色默认使用其扩展名称,因此以前的“bg-green-500”现在是“bg-emerald-500”,“bg-grreen-500”指的是扩展调色板中的绿色。
如果你在项目中使用这些颜色,最简单的升级方法是在tailwind.config.js
文件中将它们重新命名为以前的名称:
const colors = require('tailwindcss/colors')
module.exports = {
theme: {
extend: {
colors: {
green: colors.emerald,
yellow: colors.amber,
purple: colors.violet,
}
},
},
// ...
}
如果您已经在使用自定义调色板,则此更改根本不会影响您。
作为默认启用所有扩展颜色的一部分,我们为不同的灰色调提供了较短的单个单词名称,使其更实用,并使它们同时共存时不那么尴尬。
v2 Default | v2 Extended | v3 Unified |
---|---|---|
N/A | blueGray | slate |
gray | coolGray | gray |
N/A | gray | zinc |
N/A | trueGray | neutral |
N/A | warmGray | stone |
如果你引用了任何扩展的灰色,你应该更新对新名称的引用,例如:
const colors = require('tailwindcss/colors')
module.exports = {
theme: {
extend: {
colors: {
gray: colors.trueGray,
gray: colors.neutral,
}
},
},
// ...
}
如果您没有引用扩展调色板中的任何灰色,则此更改根本不会影响您。
Tailwind CSS v3.0中的一些类名已经更改,以避免命名冲突,改善开发人员体验,或支持新功能。
只要有可能,我们也会保留旧名称,因此许多更改都是不间断的,但我们鼓励您更新到新的类名。
那些该死的浏览器开发人员添加了一个真正的“overflow:clip”属性,因此现在将“overflow-clip”用于“textoverflow:click”是一个非常糟糕的主意。
为了避免命名冲突,我们将“overflow clip”重命名为“text clip”,并将“overlow省略号”更名为“text省略号”:
<div class="overflow-clip overflow-ellipsis">
<div class="text-clip text-ellipsis">
这极不可能影响任何人,因为“文本剪辑”的用例很少,而且它只是为了完成而被包含在内。
我们添加了grow-*
和shrink-*
作为flex-grow-*'和
flex-shrink-`的别名:
<div class="flex-grow-0 flex-shrink">
<div class="grow-0 shrink">
旧的类名始终有效,但我们鼓励您更新为新的类名。
由于浏览器在渲染轮廓时终于开始考虑边框半径,我们为“轮廓样式”、“轮廓颜色”、“大纲宽度”和“轮廓偏移”属性添加了单独的实用程序。
这意味着“白色轮廓”和“黑色轮廓”现在只设置轮廓_color_,而在v2中,它们设置颜色、宽度、样式和偏移。
如果你在项目中使用“白色轮廓”或“黑色轮廓”,你可以通过在项目中添加以下自定义CSS来恢复旧样式:
@layer utilities {
.outline-black {
outline: 2px dotted black;
outline-offset: 2px;
}
.outline-white {
outline: 2px dotted white;
outline-offset: 2px;
}
}
或者,您可以使用以下类更新CSS中它们的任何用法:
<div class="outline-black">
<div class="outline-black outline-2 outline-dotted outline-offset-2">
<div class="outline-white">
<div class="outline-white outline-2 outline-dotted outline-offset-2">
我们添加了“box decadement clone”和“box decade slice”作为“decadement clone”和“decaderation slice”的别名,以避免与所有使用“decadement-”命名空间的新“text decadement”实用程序混淆:
<div class="decoration-clone"></div>
<div class="box-decoration-clone"></div>
<div class="decoration-slice"></div>
<div class="box-decoration-slice"></div>
旧的类名始终有效,但我们鼓励您更新为新的类名。
Tailwind CSS v3.0需要一些其他小的突破性更改,这些更改不太可能影响很多人,但已在此处捕获。
破折号(“-”)字符在v3.0中不能用作自定义分隔符,因为它在引擎中引入了解析歧义。
你必须切换到另一个字符,比如“_”:
module.exports = {
// ...
separator: '-',
separator: '_',
}
在Tailwind CSS v3.0之前,可以将类前缀定义为函数:
/** @type {import('tailwindcss').Config} */
module.exports = {
// ...
prefix(selector) {
// ...
},
}
这在新引擎中是不可能的,我们不得不删除对此功能的支持。
相反,对Tailwind生成的每个类使用相同的静态前缀:
/** @type {import('tailwindcss').Config} */
module.exports = {
// ...
prefix: 'tw-',
}
自v3.0.0-alpha.2引入“file”修饰符以来,发生了非常小的变化——如果你将其与“hover”或“focus”等其他修饰符组合在一起,你需要翻转修饰符的顺序:
<input class="file:hover:bg-blue-600 ...">
<input class="hover:file:bg-blue-600 ...">
在[排序堆叠修改器](/docs/hover focus和其他状态#ordering stack modifier)文档中了解更多信息。
现在默认情况下,fill-*
和stroke-*
实用程序反映了您的theme.colors
键。如果你没有自定义你的调色板,这不是一个突破性的变化,但如果你有,如果你没有在自己的自定义调色板中包含“当前”,那么“填充当前”和“笔划当前”类可能无法工作。
将“current”添加到自定义调色板中以解决此问题:
module.exports = {
// ...
theme: {
colors: {
current: 'currentColor',
// ...
}
}
}
像“-mx-4”这样的实用程序中的负前缀现在是Tailwind中的一个一流功能,而不是由您的主题驱动的功能,因此您可以在任何支持负值的实用程序前面添加“-”,它就会正常工作。
负值已从默认主题中删除,因此如果您使用“theme()”引用它们,在尝试编译CSS时将看到错误。
使用calc()
函数更新任何受影响的代码:
.my-class {
top: theme('top.-4')
top: calc(theme('top.4') * -1)
}
在Tailwind CSS v3.0中,必须存在“@Tailwind base”指令,变换、过滤器和阴影等实用程序才能按预期工作。
如果您之前通过不包含此指令来禁用Tailwind的基本样式,则应将其添加回来,并在“corePlugins”配置中禁用“preflight”:
@tailwind base;
@tailwind components;
@tailwind utilities;
module.exports = {
// ...
corePlugins: {
preflight: false,
},
}
这将禁用Tailwind的全局基础样式,而不会影响依赖于添加自己的基础样式才能正常运行的实用程序。
The @tailwind screens
layer has been renamed to @tailwind variants
:
/* ... */
@tailwind screens;
@tailwind variants;
我认为你在办公桌前工作时更有可能被鲨鱼袭击,而不是受到这种变化的影响。