Tailwind CSS v4.0 Alpha 发布:更快、更强大、更现代!

大家好,我是前端宝哥。

efc3b60410df42302e1e6d75669dbdd5.jpeg

太棒了! Tailwind CSS 终于发布了 4.0 版本的 Alpha 版本!

还记得去年夏天在 Tailwind Connect 大会上,他们分享了 Oxide 的预告吗? 这个全新的高性能引擎是 Tailwind CSS 的全新升级,旨在简化开发体验,并充分利用近年来 Web 平台的发展。

原本计划作为 v3.x 版本发布的 Oxide,最终进化成了 v4.0。 因为这个新引擎带来了如此多的改变,以至于它完全可以称得上是 Tailwind CSS 的一个全新版本!

目前它还处于早期阶段,还有很多工作要做,但他们已经 开源了开发进度,并发布了第一个公开的 v4.0.0-alpha,现在就可以开始尝试使用它啦!

为了留点惊喜,我先简单介绍一下,等到正式版发布,你一定会有更多惊喜!

速度飞快的新引擎

新引擎从头开始重写,充分利用了他们对 Tailwind CSS 的理解,优化了代码,让你开发更快更顺手。

  • 速度提升 10 倍!  现在构建 Tailwind CSS 官网只需要 105 毫秒,而之前需要 960 毫秒,Catalyst UI 套件也从 341 毫秒缩短到 55 毫秒。

  • 体积更小:  即使加入了 Rust 重写的部分和 Lightning CSS 等重量级原生包,新引擎的安装体积也缩小了 35% 以上!

  • Rust 赋能:  他们将框架中最消耗资源和可并行化的部分迁移到 Rust,而核心部分仍然使用 TypeScript,保证扩展性。

  • 仅需一个依赖:  新引擎唯一依赖的是 Lightning CSS。

  • 自定义解析器:  他们自己编写了 CSS 解析器,并设计了专门的数据结构,使解析速度比使用 PostCSS 快了两倍。

统一的工具链

Tailwind CSS v4 不再只是一个插件,而是一个完整的 CSS 处理工具。他们直接将 Lightning CSS 集成到框架中,所以你不需要再单独配置 CSS 处理流程。

  • 内置 @import 处理:  无需再设置和配置像 postcss-import 这样的工具。

  • 内置厂商前缀添加:  不再需要在项目中添加 autoprefixer

  • 内置嵌套支持:  无需插件,可以直接使用嵌套 CSS,开箱即用。

  • 语法转换:  将现代 CSS 特性,例如 oklch() 颜色和媒体查询范围,转换成浏览器兼容性更好的语法。

他们仍然会提供 PostCSS 插件,但他们也正在探索第一方打包器插件,并且在这个第一个 alpha 版本中,发布了一个官方的 Vite 插件,你可以现在就开始尝试使用它。

面向现代 Web 设计

Tailwind CSS v4 面向未来,努力构建一个在未来几年内依然保持领先的框架。

  • 原生级联层:  他们现在使用真实的 @layer 规则,这解决了他们在过去一直困扰的很多特异性问题。

  • 明确定义的自定义属性:  他们使用 @property 定义内部自定义属性,并设置正确的类型和约束,使得像渐变背景的过渡成为可能。

  • 使用 color-mix 实现透明度修饰符:  使用 CSS 变量作为颜色,甚至调整 currentColor 的透明度,都变得更加容易。

  • 核心功能中的容器查询:  他们直接在核心功能中添加了对容器查询的支持,使用新的 @min-* 和 @max-* 变体来支持容器查询范围。

他们还在不断完善颜色调色板,添加了广色域颜色,并引入了对其他现代 CSS 特性(例如 @starting-style 、锚点定位等等)的支持。

可组合的变体

新的架构让组合不同的变体成为可能,例如 group-*peer-*has-* 以及 v4 中新引入的 not-* 变体。

在之前的版本中,像 group-has-* 这样的变体是在框架中明确定义的,但现在 group-* 可以与现有的 has-* 变体组合,而 has-* 变体可以与其他变体(例如 focus)组合:

<div  class="group"><div  class="group-has-[&:focus]:opacity-100"> <div  class="group-has-focus:opacity-100"> <!-- ... --> </div> </div>

这种组合方式没有限制,你甚至可以写出类似 group-not-has-peer-not-data-active:underline 这样的代码(当然,这在大多数情况下不会用到)。

零配置的内容检测

你会注意到,至少在这些早期的 alpha 版本中,甚至无法配置你的 content 路径。对于大多数项目来说,你可能永远不再需要这么做——Tailwind 会自动为你找到模板文件。

他们使用两种方式来实现这一点,具体取决于你将 Tailwind 集成到项目的方式:

  • 使用 PostCSS 插件或 CLI:  Tailwind 会扫描整个项目,查找模板文件,并使用他们内置的很多启发式算法来加快速度,例如,不扫描 .gitignore 文件中的目录,并忽略二进制文件格式。

  • 使用 Vite 插件:  他们依赖于模块图。这样效率更高,而且不会出现误报或漏报。他们希望在未来将这种方法扩展到 Vite 生态系统之外,使用其他打包器插件。

他们当然会在将来引入一种显式配置内容路径的方法,但他们想知道这种自动方法对每个人的效果如何——它在他们的项目中运行得非常好。

CSS优先配置

Tailwind CSS v4.0 的一个主要目标是让框架感觉更像是原生 CSS,而不是一个 JavaScript 库。

安装完成后,你可以使用常规的 CSS @import 语句将其添加到项目中:

@import "tailwindcss";

并且,你不需要再在 JavaScript 配置文件中设置所有自定义项,而只需使用 CSS 变量:

@import "tailwindcss";@theme {--font-family-display: "Satoshi", "sans-serif";--breakpoint-3xl: 1920px;--color-neon-pink: oklch(71.7% 0.25 360);--color-neon-lime: oklch(91.5% 0.258 129);--color-neon-cyan: oklch(91.3% 0.139 195.8);
}

特殊的 @theme 指令告诉 Tailwind 根据这些变量生成新的实用程序和变体,让你可以在标记中使用像 3xl:text-neon-lime 这样的类:

Data to enrich your online business

添加新的 CSS 变量的行为类似于框架早期版本中的 extend,但你可以通过在定义所有自定义值之前使用 --color-*: initial 这样的语法清除命名空间来覆盖整套变量:

@import "tailwindcss";@theme {--color-*: initial;--color-gray-50: #f8fafc;--color-gray-100: #f1f5f9;--color-gray-200: #e2e8f0;/* ... */--color-green-800: #3f6212;--color-green-900: #365314;--color-green-950: #1a2e05;
}

他们还在不断完善一些命名约定,但你可以在 GitHub 上查看默认主题 来了解可以自定义的内容。

如果你不想明确地清除默认主题,而是想从头开始,可以导入 "tailwindcss/preflight" 和 "tailwindcss/utilities" 来跳过导入默认主题:

@import  "tailwindcss"; 
@import  "tailwindcss/preflight"  layer(base); 
@import  "tailwindcss/utilities"  layer(utilities);   
@theme  {--color-*: initial; --color-gray-50:  #f8fafc; --color-gray-100:  #f1f5f9; --color-gray-200:  #e2e8f0; /* ... */ --color-green-800:  #3f6212; --color-green-900:  #365314; --color-green-950:  #1a2e05; 
}

他们还会在自定义 CSS 中,将所有主题值作为原生 CSS 变量提供:

dist/main.css
:root {--color-gray-50: #f8fafc;--color-gray-100: #f1f5f9;--color-gray-200: #e2e8f0;/* ... */--color-green-800: #3f6212;--color-green-900: #365314;--color-green-950: #1a2e05;
}

这样,你就可以轻松地在任意值中引用任何主题值,而无需使用 theme() 函数:

<div class="p-[calc(var(--spacing-6)-1px)]"> <!-- ... --> </div>

在使用像 Framer Motion 这样的 UI 库时,你也可以使用主题值,而无需使用 resolveConfig() 函数:

import { motion } from "framer-motion"export const MyComponent = () => ()

变化之处

他们非常重视向后兼容性,但在 v4 中,他们做了一些值得分享的改变:

  • 移除过时的实用程序:  他们移除了一些很久以前就停止文档化的实用程序,例如 text-opacity-*、flex-grow-* 和 decoration-slice,用它们更现代的替代方案(如 text-{color}/*grow-* 和 box-decoration-slice)代替。

  • PostCSS 插件和 CLI 成为独立的包:  由于并非所有人都需要它们,因此主 tailwindcss 包不再包含它们,而是应该使用 @tailwindcss/postcss 和 @tailwindcss/cli 单独安装。

  • 默认边框颜色:  border 实用程序以前默认使用 gray-200,现在默认使用 currentColor,就像浏览器一样。他们做出了这个改变,是为了防止你意外地在项目中使用错误的灰色,尤其是在使用 zincslate 或其他灰色系颜色作为主要灰色的时候。

  • 环绕效果默认宽度 1 像素:  ring 实用程序以前默认使用 3 像素的蓝色环绕效果,现在使用 1 像素的 currentColor 环绕效果。他们自己在项目中使用 ring-* 实用程序作为边框的替代方案,并使用 outline-* 来实现焦点环绕效果,因此他们认为使它们保持一致是一个有益的改变。

其他一些细微的实现细节变化可能会在你的项目中以某种方式体现,但没有像这些改变这样刻意为之。如果你遇到任何意外情况,请告知他们。

v4.0 版本路线图

这个新引擎从头开始重写,到目前为止,他们一直专注于使用新的配置方法重新设计开发体验。

他们非常重视向后兼容性,  这就是他们将在今年晚些时候发布稳定版 v4.0 之前需要完成的大部分工作。

  • 支持 JavaScript 配置文件:  重新引入对经典 tailwind.config.js 文件的兼容性,以便轻松迁移到 v4。

  • 显式内容路径配置:  当自动内容检测不足以满足你的设置时,可以明确地告诉 Tailwind 模板文件的位置。

  • 支持其他暗黑模式:  目前他们只支持使用媒体查询的暗黑模式,还需要重新实现选择器和变体策略。

  • 插件和自定义实用程序:  他们还没有对插件或编写自动支持变体的自定义实用程序的支持。显然,在正式发布之前,他们会实现这些功能。

  • 前缀支持:  目前还没有办法为你的类配置前缀,但他们一定会将其带回来。

  • 安全列表和阻止列表:  目前还无法强制 Tailwind 生成特定类或阻止生成其他类。

  • important 配置支持:  目前还无法让所有实用程序都使用 !important 生成,但他们计划实现它。

  • theme() 函数支持:  对于新项目来说,这并非必需,因为你现在可以使用 var(),但他们将实现它以确保向后兼容性。

  • 独立的 CLI:  他们还没有为新引擎开发独立的 CLI,但在 v4.0 发布之前,一定会提供它。

除此之外,他们肯定还会发现很多 bug 需要修复,一些令人兴奋的新 CSS 特性需要添加,以及一些需要在正式发布之前进行改进的新 API。

他们不想承诺具体的发布时间表,但他们个人希望在夏季假期开始之前将 v4.0 版本标记为稳定版。

尝试一下 alpha 版本吧!

他们已经发布了几个 alpha 版本,你现在就可以在你的项目中尝试使用它们。

如果你使用的是 VS Code 的 Tailwind CSS IntelliSense 扩展,请确保从扩展页面切换到预发布版本。如果你使用的是他们的 Prettier 插件,请确保安装最新版本。

如果你发现任何问题,请在 GitHub 上告知他们。他们希望在发布稳定版之前,将它打造成无懈可击的版本,因此你发现的任何问题都会对他们有很大帮助。

使用 Vite

安装 Tailwind CSS v4 alpha 和新的 Vite 插件:

$ npm install tailwindcss@next @tailwindcss/vite@next

然后将他们的插件添加到 vite.config.ts 文件中:

import tailwindcss from '@tailwindcss/vite'
import { defineConfig } from 'vite'export default defineConfig({plugins: [tailwindcss()],
})

最后,在你的主 CSS 文件中导入 Tailwind:

@import "tailwindcss";

使用 PostCSS

安装 Tailwind CSS v4 alpha 和独立的 PostCSS 插件包:

$ npm install tailwindcss@next @tailwindcss/postcss@next

然后将他们的插件添加到 postcss.config.js 文件中:

module.exports = {plugins: {'@tailwindcss/postcss': {}}
}

最后,在你的主 CSS 文件中导入 Tailwind:

@import "tailwindcss";

使用 CLI

安装 Tailwind CSS v4 alpha 和独立的 CLI 包:

$ npm install tailwindcss@next @tailwindcss/cli@next

接下来,在你的主 CSS 文件中导入 Tailwind:

@import "tailwindcss";

最后,使用 CLI 工具编译你的 CSS:

$ npx @tailwindcss/cli@next -i app.css -o dist/app.css

往期推荐

38个Vue、Nuxt 和 Vite 技巧、窍门和实践的合集

Vue 如何处理异步组件加载错误

Vue 3 将推出新特性,可以抛弃虚拟DOM了!

Vue 小技巧:何时使用可组合函数

怎么才能做出一个牛逼的Vue 组件库?

掌握插槽魔法,助你进阶 Vue 开发,赋予组件无限可能!

微软 Edge 推出 "WebUI 2.0":从 React 到 Web Components + HTML,速度提升了42%

我是前端宝哥,每日分享前端开发技术,关注下面二维码,围观我的朋友圈。

373b081d512388e70002aa4da4de20ea.png

备注【文章群】可以进文章分享群,

备注【技术群】可以进技术交流群,

备注【副业群】可以进程序员副业群。

关注下方公众号加星标,送我的电子书资料

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF

  • 回复「Vue脑图」获取 Vue 相关脑图

  • 回复「思维图」获取 JavaScript 相关思维图

  • 回复「简历」获取简历制作建议

  • 回复「简历模板」获取精选的简历模板

  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。

  • 回复「知识点」下载高清JavaScript知识点图谱

  • 回复「读书」下载成长的相关电子书

c7a84a282a200b963017de0a73cad98c.png

觉得好看,请关注我,点“在看”16a70477ee2c487f25b9a924d8afc5d1.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1452950.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C++ string字符串的使用和简单模拟实现

目录 前言 1. string简介 2. string的使用和简单模拟实现 2.1 string类的定义 2.2 string(),~string()和c_str() 2.2 size&#xff0c;重载符号[ ]&#xff0c;begin和end函数 2.3 push_back&#xff0c;reserve&#xff0c;append&#xff0c;运算符重载 2.4 insert和…

WSL Ubuntu安装TensorFlow-GPU、PyTorch-GPU

在Windows 11的WSL Ubuntu中安装TensorFlow-GPU、PyTorch-GPU 0、WSL Ubuntu安装 在Windows 11的商店中下载即可&#xff0c;此处以Ubuntu22.04.3为例 1、CUDA Toolkit安装 参考公孙启的文章Windows11 WSL Ubuntu Pycharm Conda for deeplearning前往nVidia官网下载CUDA …

VCG显示——汉字,数字,图像

详细的介绍资料&#xff1a; 【从零开始走进FPGA】 玩转VGA http://www.cnblogs.com/spartan/archive/2011/08/16/2140546.html 【FPGA实验】基于DE2-115平台的VGA显示_vga接口实验 de2-115-CSDN博客 【FPGA】VGA显示文字、彩条、图片——基于DE2-115-CSDN博客 一.VCG原理 1.1…

LeetCode --- 401周赛

题目列表 3178. 找出 K 秒后拿着球的孩子 3179. K 秒后第 N 个元素的值 3180. 执行操作可获得的最大总奖励 I 3181. 执行操作可获得的最大总奖励 II 一、找出K秒后拿着球的孩子 这题可以直接模拟&#xff0c;从前往后&#xff0c;再从后往前走k次&#xff0c;最后直接返回…

uniapp使用css实现瀑布流

页面 <template><view><gj v-if"likeList.length 0"></gj><view v-else class"list"><view class"pbl" v-for"(item,index) in likeList" :key"index"><view class"image&quo…

如何通过在线封装APP快速上线?小猪APP分发帮你解决难题

你是否曾经为了上线一款APP而头疼不已&#xff1f;开发完成后&#xff0c;封装、测试、分发&#xff0c;这些繁琐的步骤让人望而却步。别担心&#xff0c;小猪APP分发来了&#xff01;这篇文章将带你了解如何通过在线封装APP快速上线&#xff0c;并且告诉你为什么选择小猪APP分…

英语学习笔记37——Making a bookcase

Making a bookcase 做书架 词汇 Vocabulary work v. 工作 ing形式&#xff1a;working 搭配&#xff1a;work on 工作 做……工作    work for 人 为……而工作 例句&#xff1a;我正在做我的家庭作业。    I am working on my homework.    我正在为Bobby工作。 …

MEMS:Lecture 18 Feedback

讲义 Linear feedback MEMS热板 Hotplate MEMS&#xff08;微机电系统&#xff09;热板是现代气体传感器的重要组成部分。它们通过加热一种活性材料来工作&#xff0c;这种材料与气体发生反应&#xff0c;从而改变其电阻。电阻的变化可以用来检测和测量特定气体的存在和浓度。…

Go注册GRPC服务遇到接口未实现报错处理方法

已经完成了proto文件中所有接口的实现 但是注册服务这里仍然会报错 且添加实现方法也无法解决 最终解决方法 在handle.go中的server结构体加入 proto.UnimplementedUserServer 可以避免方法未实现的错误

求导,积分

求导公式&#xff1a; 复合函数求导法则&#xff1a;两个函数导函数的乘积. 例如&#xff1a;f(x)2x1,f(x)2,g(x)x^24x4,g(x)2x4 那么复合函数&#xff1a; g(f(x))(2x1)^24(2x1)4 把&#xff08;2x1&#xff09;看做整体,则g2(2x1)4 然后再求&#xff08;2x1&#xff09;的导函…

使用PyMuPDF程序处理PDF

MuPDF 是一个 C/C 编写的跨平台 PDF 库&#xff0c;它提供强大的功能来处理 PDF 文件&#xff0c;包括提取文本、图像和元数据&#xff0c;以及支持PDF页面的添加、删除和旋转。PyMuPDF 是 MuPDF 的 Python 版本&#xff0c;允许 Python 程序使用 MuPDF 的强大功能。 首先&…

Spring Bean详解

Spring Bean作用域 默认情况下&#xff0c;所有的 Spring Bean 都是单例的&#xff0c;也就是说在整个 Spring 应用中&#xff0c; Bean 的实例只有一个 如果我们需要创建多个实例的对象&#xff0c;那么应该将 Bean 的 scope 属性定义为 prototype&#xff0c;如果 Spring 需…

热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【Quartus 13.0】NIOS II 部署UART 和 PWM

打算在 EP1C3T144I7 芯片上部署 nios ii 做 uart & pwm控制 这个芯片或许不够做 QT 部署 这个芯片好老啊&#xff0c;但是做控制足够了&#xff0c;我只是想装13写 leader给的接口代码是用VHDL写的&#xff0c;我不会 当然verilog我也不太会 就这样&#xff0c;随便写吧 co…

Tensorflow-GPU工具包了解和详细安装方法

目录 基础知识信息了解 显卡算力 CUDA兼容 Tensorflow gpu安装 CUDA/cuDNN匹配和下载 查看Conda driver的版本 下载CUDA工具包 查看对应cuDNN版本 下载cuDNN加速库 CUDA/cuDNN安装 CUDA安装方法 cuDNN加速库安装 配置CUDA/cuDNN环境变量 配置环境变量 核验是否安…

51单片机STC89C52RC——2.1 独立按键控制LED亮灭

目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;独立按键 2.1 独立按键位置 2.2 独立按键电路图 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 六&#xff0c;效果 目的 当独立K1按键按下时LED D1 点亮&#x…

IDEA上MySQL的jar包导入教程

jar包下载网址——》https://mvnrepository.com/ 1.进入界面&#xff0c;点击搜索框&#xff0c;搜索mysql&#xff1a; 外国网站&#xff0c;可能有点慢,耐心等待即可。 2.点击查询结果&#xff1a; 进入界面&#xff0c;点击前两个结果的其中一个&#xff0c;两个都可以 …

如何从印刷体的图片中把手写体部分统统去掉?--免费途径

AI图像处理技术 我是从国外某个网站上找到在线AI免费credit的处理方式的。国内的基本没有全功能试用、或者即使收费也不好用。 国内的差距主要是&#xff1a;1、对图片分辨率和大小有更多限制&#xff0c;即使收费用户也是&#xff1b;2、需要安装app之类&#xff0c;然后连线…

android13 应用冷启动

1 概述 launcher 通过binder到systemserver中atms中发送startActivity请求 startProcess向zygote发送启动新进程请求 zygote收到请求&#xff0c;fork新进程并调用ActivityThread的main初始化 新进程启动&#xff0c;发送attachApplication给ams&#xff0c;告诉他新进程启动…

WordPress——Argon主题美化

文章目录 Argon主题美化插件类类别标签页面更新管理器文章头图URL查询监视器WordPress提供Markdown语法评论区头像设置发信设置隐藏登陆备份设置缓存插件 主题文件编辑器页脚显示在线人数备案信息(包含备案信息网站运行时间)banner下方小箭头滚动效果站点功能概览下方Links功能…