当前位置: 首页 > article >正文

11. v4 版本升级指南

11. v4 版本升级指南1. 概述Tailwind CSS v4 是一个重大版本更新从 JavaScript 配置转向 CSS 优先的配置方式。1.1 主要变化变化v3v4配置方式tailwind.config.jsCSS 文件 (theme)安装方式postcsstailwindcsstailwindcss/vite等暗色模式dark:前缀相同但配置方式变化自定义主题theme.extendtheme块插件plugins数组plugin指令2. 升级前的准备2.1 检查当前版本tailwindcss--version2.2 备份项目# 提交当前代码gitadd.gitcommit-m备份升级 Tailwind v4 前2.3 查看破坏性变更官方升级指南注意项目中使用的自定义配置3. 升级步骤3.1 卸载旧版本npmuninstall tailwindcss postcss autoprefixer3.2 安装 v4# 根据项目类型选择npminstalltailwindcss/vite# Vite 项目npminstalltailwindcss/cli# CLI 项目npminstalltailwindcss/postcss# PostCSS 项目3.3 更新配置文件Vite 项目// vite.config.jsimport{defineConfig}fromviteimportreactfromvitejs/plugin-reactimporttailwindcssfromtailwindcss/viteexportdefaultdefineConfig({plugins:[react(),tailwindcss(),],})PostCSS 项目// postcss.config.jsmodule.exports{plugins:{tailwindcss/postcss:{},},}3.4 更新 CSS 文件/* 之前 (v3) */tailwindbase;tailwindcomponents;tailwindutilities;/* 之后 (v4) */importtailwindcss;3.5 迁移配置颜色配置/* v3: tailwind.config.js */module.exports {theme:{extend:{colors:{brand:#6366f1,},},},}/* v4: src/index.css */importtailwindcss;theme{--color-brand:#6366f1;--color-brand-light:#818cf8;--color-brand-dark:#4f46e5;}字体配置/* v3 */theme:{extend:{fontFamily:{sans:[Inter,system-ui],},},}/* v4 */theme{--font-sans:Inter,system-ui,sans-serif;}断点配置/* v3 */theme:{extend:{screens:{3xl:1920px,},},}/* v4 */theme{--breakpoint-3xl:1920px;}间距配置/* v3 */theme:{extend:{spacing:{18:4.5rem,},},}/* v4 */theme{--spacing-18:4.5rem;}3.6 迁移插件/* v3: tailwind.config.js */module.exports {plugins:[require(tailwindcss/typography),require(tailwindcss/forms),],}/* v4: src/index.css */importtailwindcss;plugintailwindcss/typography;plugintailwindcss/forms;3.7 迁移自定义插件/* v3: plugins/custom.js */constpluginrequire(tailwindcss/plugin);module.exportsplugin(function({addUtilities}){addUtilities({.text-gradient:{background:linear-gradient(135deg, #6366f1, #a855f7),-webkit-background-clip:text,background-clip:text,color:transparent,},});});/* v4: src/index.css */importtailwindcss;utilitytext-gradient{background:linear-gradient(135deg,#6366f1,#a855f7);-webkit-background-clip:text;background-clip:text;color:transparent;}4. 常见迁移问题4.1 类名不生效问题升级后某些类名不生效原因动态拼接的类名可能未被识别解决// ❌ 不生效 div className{text-${color}-500} // ✅ 使用完整类名或映射 const colors { red: text-red-500, blue: text-blue-500, }; div className{colors[color]}4.2 自定义主题不生效问题theme中的配置不生效原因语法错误或位置错误解决/* ✅ 正确位置在 import 之后 */importtailwindcss;theme{--color-brand:#6366f1;}/* ❌ 错误在 import 之前 */theme{--color-brand:#6366f1;}importtailwindcss;4.3 插件不兼容问题某些第三方插件还不支持 v4解决检查插件是否发布 v4 兼容版本临时用utility替代等待插件更新4.4 PostCSS 配置问题问题postcss.config.js格式变化解决// v3module.exports{plugins:{tailwindcss:{},autoprefixer:{},},}// v4module.exports{plugins:{tailwindcss/postcss:{},},}5. 新特性使用5.1 容器查询importtailwindcss;plugintailwindcss/container-queries;divclasscontainerdivclassgrid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3!-- 根据容器宽度响应 --/div/div5.2 3D 变换importtailwindcss;plugintailwindcss-3d;divclasspreserve-3d rotate-x-45 rotate-y-303D 元素/div5.3 自定义变体custom-variantchildren( *);/* 使用 */div classchildren:mb-2 div每个子元素都有下边距/div div每个子元素都有下边距/div /div6. 升级检查清单升级前备份项目代码记录自定义配置记录使用的插件检查是否有动态类名升级中卸载旧版本安装新版本更新构建配置更新 CSS 文件迁移主题配置迁移插件配置升级后运行开发服务器检查样式是否正常检查暗色模式检查响应式布局检查自定义类运行生产构建7. 完整迁移示例7.1 迁移前 (v3)// tailwind.config.jsmodule.exports{content:[./src/**/*.{html,js}],darkMode:class,theme:{extend:{colors:{brand:#6366f1,},fontFamily:{sans:[Inter,system-ui],},},},plugins:[require(tailwindcss/typography),],}/* src/index.css */tailwindbase;tailwindcomponents;tailwindutilities;.btn-primary{applypx-4 py-2 bg-brand text-white roundedhover:bg-brand-dark;}7.2 迁移后 (v4)/* src/index.css */importtailwindcss;plugintailwindcss/typography;theme{--color-brand:#6366f1;--color-brand-dark:#4f46e5;--font-sans:Inter,system-ui,sans-serif;}.btn-primary{applypx-4 py-2 bg-brand text-white roundedhover:bg-brand-dark;}// vite.config.jsimport{defineConfig}fromviteimporttailwindcssfromtailwindcss/viteexportdefaultdefineConfig({plugins:[tailwindcss()],})8. 练习练习 1迁移配置将下面的 v3 配置迁移到 v4// tailwind.config.jsmodule.exports{theme:{extend:{colors:{primary:#3b82f6,secondary:#8b5cf6,},screens:{xs:480px,},},},plugins:[require(tailwindcss/forms),],}参考答案importtailwindcss;plugintailwindcss/forms;theme{--color-primary:#3b82f6;--color-secondary:#8b5cf6;--breakpoint-xs:480px;}9. 总结对比项v3v4配置位置tailwind.config.jsCSS 文件主题配置theme.extendtheme块插件配置plugins数组plugin指令自定义类JavaScript 插件utility指令变体JavaScript 插件custom-variant一句话总结Tailwind v4 从 JavaScript 配置转向 CSS 优先配置更直观性能更好但需要按升级指南迁移现有项目。

相关文章:

11. v4 版本升级指南

11. v4 版本升级指南 1. 概述 Tailwind CSS v4 是一个重大版本更新,从 JavaScript 配置转向 CSS 优先的配置方式。 1.1 主要变化 变化v3v4配置方式tailwind.config.jsCSS 文件 (theme)安装方式postcss tailwindcsstailwindcss/vite 等暗色模式dark: 前缀相同&a…...

告别硬编码!用Rule-Engine 1.0.0重构你的Java业务逻辑(附订单折扣实战)

告别硬编码!用Rule-Engine 1.0.0重构你的Java业务逻辑(附订单折扣实战) 每次电商大促前夜,技术团队最怕听到的一句话是什么?"折扣规则又改了!"——这往往意味着通宵修改代码、紧急测试和冒着风险…...

脑网络通信指标——扩散策略的流图指标

和平均首达时间一样,这个指标也是脑网络扩散通信方式的一个指标。这个指标的计算公式也是非常云里雾里,不找原文献推公式看不懂的。 首先给公式: 流图矩阵中的一条边:FG(t)ij = (e^(-tL))ijsj 其中sj = ∑jAij,Aij 就是两个节点之间的结构连接强度,sj就是j节点的强度;…...

【黑金云课堂笔记】第一~二期FPGA知识点总结

知识卡片一:【FPGA 基础篇】开启硬件编程之门FPGA 的本质: FPGA(现场可编程门阵列)并非在运行软件程序,而是在构建电路本身。用户可以通过 Verilog/VHDL 等硬件描述语言,在芯片出厂后随时重新配置其内部逻辑…...

实战应用:基于openclaw在快马平台开发招聘信息采集系统

最近在做一个招聘信息分析的小项目,需要从各大招聘网站采集数据。经过一番调研,发现openclaw这个工具在数据采集方面表现相当不错,特别是在处理复杂页面和反爬机制上很有优势。下面分享一下我在InsCode(快马)平台上开发这个系统的实战经验。 …...

新手零基础入门:借助快马AI生成带注释的微信小程序示例代码

作为一个刚接触微信小程序开发的新手,我最近在InsCode(快马)平台上尝试了一个特别适合零基础学习的实践项目。这个平台最让我惊喜的是,只需要用自然语言描述需求,就能快速生成带详细注释的完整代码,这对理解小程序开发流程帮助很大…...

基于深度学习的FasterRCNN水下图像复原

项目概述:Waternet_FasterRCNN 本项目旨在结合深度学习技术进行水下图像的还原与分析,综合应用 WaterNet 和 Faster R-CNN 来完成以下功能: 水下图像还原:利用 WaterNet 修复和增强水下图像质量。色板检测与提取:通过 …...

别再让AI瞎猜了!5个实战案例教你写出让Vibe Coding一次成功的提示词

别再让AI瞎猜了!5个实战案例教你写出让Vibe Coding一次成功的提示词 当你在Vibe Coding平台上输入一串提示词,满心期待地按下生成按钮,结果却得到一个与你想象中完全不同的产物——这种经历相信很多开发者都不陌生。为什么AI总是"误解&q…...

Win11Debloat:让Windows系统重获新生的一站式自动化优化方案

Win11Debloat:让Windows系统重获新生的一站式自动化优化方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...

腾讯云端Openclaw+飞书 多机器人配置全攻略(新手友好版)

前言:随着AI自动化工具的普及,Openclaw凭借强大的自主执行能力,成为很多人提升效率的首选;而飞书作为高效协同工具,其机器人功能可无缝融入日常工作流。当两者结合,配置多机器人实现分工协作(如…...

Cursor Pro免费激活终极指南:3步永久解锁AI编程神器

Cursor Pro免费激活终极指南:3步永久解锁AI编程神器 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial…...

深度解析ZLUDA:AMD显卡运行CUDA应用的全新解决方案

深度解析ZLUDA:AMD显卡运行CUDA应用的全新解决方案 【免费下载链接】ZLUDA CUDA on AMD GPUs 项目地址: https://gitcode.com/gh_mirrors/zlu/ZLUDA ZLUDA是一个革命性的开源项目,它让AMD显卡能够直接运行未经修改的CUDA应用程序,为AM…...

基础语法篇总结——从入门到精通

基础语法篇总结——从入门到精通 系列专栏:Python 100天从新手到大师 当前进度:Day 01-30 / 100 阅读时长:8 分钟 难度等级:⭐⭐ 一、本篇回顾 基础语法篇共 30 篇文章,涵盖了 Python 编程的核心基础: 知识体系 基础语法篇 (30 篇) ├── 基础入门 (8 篇) │ ├──…...

计算机毕业设计:Python智能二手车数据可视化推荐系统 Flask框架 requests爬虫 协同过滤推荐算法 可视化 汽车之家 机器学习(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

数据结构与算法学习笔记

java一.数据结构简介1. 为什么要有数据结构?数据太多、太乱 → 无法高效处理 → 必须结构化2. 数据结构的两大分类逻辑结构:数据之间的关系(怎么理解)物理结构:内存中的存储方式(怎么实现)3. 逻…...

英飞凌TC3XX时钟系统实战:从PLL配置到CCU分频的避坑指南

英飞凌TC3XX时钟系统实战:从PLL配置到CCU分频的避坑指南 在嵌入式系统开发中,时钟系统如同人体的神经系统,为整个芯片提供精准的时序控制和同步信号。作为英飞凌AURIX™系列中的旗舰产品,TC3XX微控制器凭借其高度可配置的时钟架构…...

G-Helper:重塑华硕硬件控制体验的轻量级开源解决方案

G-Helper:重塑华硕硬件控制体验的轻量级开源解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Sca…...

为什么要使用幂等防重复提交,它的逻辑是什么对比其他的来说有什么优势

好,这个问题非常关键,尤其是在金融、支付、电商、表单提交流水线等场景,理解“为什么用幂等 防重复提交”和“它和其他方案比的优势”是做高可靠系统的核心。一、为什么要做幂等防重复提交?1️⃣ 重复请求是现实世界里的必然在真…...

DeepSeek总结的 PostgreSQL 19:为 UPDATE/DELETE 添加 FOR PORTION OF 子句

原文地址:https://www.depesz.com/2026/04/02/waiting-for-postgresql-19-add-update-delete-for-portion-of/ 等待 PostgreSQL 19:为 UPDATE/DELETE 添加 FOR PORTION OF 子句 2026 年 4 月 1 日,Peter Eisentraut 提交了一个补丁&#xf…...

对在aarch64 Linux环境编译安装的CinderX补充测试

前文最后说,CinderX报错不能用,这不对,我在其github存储库上提了这个issue,alexmalyshev回复 I think that’s actually just a warning that you’re getting but things should be working after that?Right, this is just a l…...

springcloud项目如何禁用三方依赖的拦截器

背景: 原始代码中有一个自定义的通用依赖,这个依赖中有很多通用方法和拦截器供整个系统使用。 需求: 禁用其中一个拦截器,保留其他方法和拦截器,过滤器等。 拦截器介绍 原有拦截器,自己封装了一个jdk&#…...

如何查看浏览器中当前存储的 Cookie?

如何查看浏览器中的 Cookie?为什么有些 Cookie 看不到?1. 引言:快递单号与隐私信封2. Cookie 是什么?(小白必备)3. 核心问题:为什么有些 Cookie“看不到”?4. 如何查看 Cookie&#…...

如何保证 Session ID 的随机性和不可猜测性?

你的 Session ID 安全吗?—— 从可预测的“门禁卡”到安全的“加密钥匙”1. 引言:一张编号可以被猜到的门禁卡2. Session 与 Session ID:会话的“钥匙”3. 为什么 Session ID 必须随机且不可预测?4. 攻击详解:会话劫持…...

OpenClaw安全防护:Phi-3-mini操作权限管控方案

OpenClaw安全防护:Phi-3-mini操作权限管控方案 1. 为什么需要OpenClaw安全防护 上周我在调试一个自动化文档整理任务时,差点酿成大错。当时OpenClaw连接的Phi-3-mini模型误解了我的指令,试图删除整个工作目录下的文件。虽然及时终止了进程&…...

容器环境下各种兼容模式+多实例

注意: #多实例端口不同数据目录不同容器名不同 1. -p 主机端口:容器端口 容器端口永远是 54321(不用改) 主机端口必须不一样:4321、4322、4323... 一个端口只能给一个数据库用,就像一个门不能同时进两个人。2. -v 主机…...

10. Doris 系列第10篇:数据查询全攻略|Join/子查询/窗口函数,从基础到高级实战

适合人群:大数据开发、Doris查询调优工程师、数仓分析师、BI工程师核心价值:吃透Doris 2.x数据查询核心能力,掌握Join算法选型、子查询优化、多维聚合、窗口函数实战,解决查询慢、资源浪费、语法报错等问题系列说明:本…...

从package.xml到CMakeLists.txt:手把手教你配置一个ROS1机器人控制包(附完整项目模板)

从package.xml到CMakeLists.txt:构建工业级ROS1机器人控制包的完整指南 在机器人操作系统(ROS)开发中,功能包的配置质量直接影响项目的可维护性和扩展性。本文将带您深入理解ROS1功能包的核心配置文件,通过一个完整的工业机器人控制包案例&am…...

告别上位机!纯FPGA实现exFAT文件系统,让你的高速数据直接存成标准文件

纯FPGA实现exFAT文件系统:硬件工程师的高速存储革命 在高速数据采集领域,从雷达信号处理到卫星通信,工程师们长期面临一个核心痛点:如何将海量原始数据高效、可靠地转换为标准文件格式。传统方案依赖上位机或嵌入式处理器进行文件…...

OpenCV透视变换实战:从文档矫正到AR应用

1. 透视变换基础:从原理到生活场景 想象一下你正在用手机拍摄一张放在桌上的发票,由于角度问题,发票在照片里变成了梯形。这时候你需要的正是透视变换——它能把这个梯形"掰正"成规整的矩形。在计算机视觉领域,透视变换…...

Apollo6.0 Lattice算法实战解析——从轨迹组合到最优路径生成

1. Lattice算法在Apollo6.0中的核心作用 Lattice算法是Apollo自动驾驶系统中的关键路径规划模块,它负责将横向和纵向轨迹进行智能组合,最终生成安全、舒适且符合交通规则的最优行驶路径。这个算法就像一位经验丰富的导航员,不仅要考虑车辆当前…...