Tailwind CSS vs 现代CSS,Tailwind CSS 会像CSS-in-JS 一样亡?

news2025/2/25 11:43:08

本文是 关于Tailwind CSS 与 现代 CSS之间比较的文章。文章中作者详细比较了这两种CSS开发方法的优缺点。他指出,Tailwind CSS是一种基于类的CSS框架,提供了快速开发网站的便利性,但可能导致HTML代码的臃肿。另一方面,现代CSS方法更加模块化和可维护,但编写速度可能较慢。

下面是正文~~

Tailwind 是一个深受喜爱的 CSS 框架,它拥有许多受欢迎的功能,用于创建用户界面。在本文中,我们不会深入探讨 Tailwind,而是要探讨 Tailwind 中使用内联类的问题,以及触及一些改变我们处理这些问题的新的原生 CSS 功能。

内联类

内联类是 Tailwind 的一个备受赞誉的特性。在寻求关于 Tailwind 的反馈时,作者收到了各种各样的意见,但其中一个观点引起了作者的关注。这个问题并不是特指 Tailwind,而是更多地关于开发者修改代码的态度:

“我可以在一个视图中编辑所有内容”

有些开发者表示,他们喜欢 Tailwind,因为他们可以不切换屏幕就管理他们的 CSS 和 HTML。因此,作者对此持有坚定的立场:

作者强烈建议,管理多个文件或语法应该是工具,如 IDE、文本编辑器、终端或甚至多显示器的责任,而不应该在代码库中解决。

以上并不是特指 Tailwind,而是关于对软件开发有一个专业的认识。作者不希望这个立场受到反驳,作者相信这是一个成熟的看法。

内联类的优势

一个内联类定义了一个范围。Rohan 很好地描述了 Tailwind 的这个优势:

38977e4f60fddad4823b48cc60c2b89e.png

这可能是与传统 CSS 项目中的不可预测的做事方式相比,Tailwind 最引人注目的优势。

原生 CSS 中的作用域

幸运的是,现代 CSS 可以与传统的 CSS 不同地进行作用域化。原生 CSS 至少有两种方式可以定义范围。

经过两个月后:

在级联层中包裹你想要调整的新样式

5e3865b9810f28cdc95f03473b0f978c.png

在嵌套作用域中使用新类

f2e780a3a76f6cf4d6b3362e699faff2.png

这两种方法都使用原生 CSS,并可以达到与 Tailwind 相同的效果,尽管对于某些人来说,可能需要进行一些范式转变才能习惯。


内联类的问题

关于内联类,有一些问题。这些问题可能是微不足道的,也可能是严重的,这取决于你的项目或你如何解释它们。

  • 内联类有时会变得很重:在撰写本文时,tailwindcss.com 的着陆 HTML(只是一个方便的案例研究)使用了 tailwind 的内联类,其大小为 432.5KB。类属性及其值构成了 249KB 的数据,这意味着页面大小的 57.6% 来自内联类。而使用现代本地 CSS 时,这一比例约为 5%-15%。

  • 大量 HTML 会影响你的 PageSpeed Insights 分数:FE 开发人员喜欢说 "但它是经过 gzip 压缩的,兄弟",以此来为过大的有效负载辩解。但服务器的 gzip 大小有点误导。在这种情况下,更重要的问题是 DOM Attr 节点的数据大小对内存的影响,这是内联样式的结果。

  • 属性杂乱:在属性杂乱问题上,Tailwind 开发人员的立场各不相同。调试在生产和开发代码中都要进行。任何否认这一点的人,要么是在撒谎,要么就是从未参与过需求量大的大型项目。HTML 没有源映射,因此尽管进行了缩减,也不能太乱。

  • 高带宽:我们生活在一个免费云服务的世界里,因此这可能不会成为大多数项目的大问题,但对于超过免费带宽的高带宽网站来说,重型 HTML 可能会产生一些额外费用,具体取决于你的云提供商。CSS 样式表是专门为在 HTTP 概念中进行缓存而设计的。Tailwind的内联类是HTML文档的一部分,而HTML文档的变化通常更为频繁,一般不会像CSS样式表那样被缓存。

  • 重复的样式方言:Tailwind 将允许你定义内联类语法,这是一种类似 CSS 的简化方言。这些类链接到框架 CSS 规则。这本身并不是直接的重复,而是在框架代码的 CSS 中也体现了 CSS 的额外权重。

CSS 嵌套改变了一切

因为嵌套作用域是私有的:

  • 不必为每个元素都定义一个类,只需合理判断即可。

  • 不再需要遵循 BEM、OOCSS 或其他传统的 CSS 方法。所有这些都已经过时了。

与 CSS 框架相比,CSS 嵌套和相对选择器不仅意味着我们定义的内联类更少,而且与传统 CSS 项目相比,我们定义的内联类也更少。

总结

如果你还在使用老式的 CSS,那就停下来吧。想办法与时俱进吧。也许下面的内容能帮到你,但这已经超出了你的能力范围(没有双关的意思):

  • caniuse.com

  • PostCSS

  • Nesting 筑巢

在过去 15 年多的时间里,CSS 库和框架主要依赖于过多的内联类。Tailwind 也不例外。

在作者看来,嵌套 CSS 和 Tailwind 这样的 CSS 框架似乎并无必要。建议根据自己的需求选择其中一种方法。

Tailwind 非常庞大,作者相信从 CSS 到 Tailwind 的影响比从 JS/TS 到 React 还要大。所以不可避免地,会有很多思想领袖和开发者来淡化这篇文章中提到的许多问题。

这里没有什么新鲜事。当 CSS-in-JS 出现时,我们遇到了类似的情况,在一开始,开发者注意到它正在复制 CSS 足迹,并在某种程度上违背了缓存和失效的概念。

希望这篇文章能为你解答有关 CSS 在现实世界中的问题和解决方案。

欢迎长按图片加刷碗智为好友,定时分享 Vue React Ts 等。

3ff53709ddcbbe5e7e771f23911da81a.png

最后:

vue2与vue3技巧合集

VueUse源码解读

8ee0ca500e47dfd9802702dd03ee6747.jpeg

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

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

相关文章

[双指针] (四) LeetCode 18.四数之和

[双指针] (四) LeetCode 18.四数之和 文章目录 [双指针] (四) LeetCode 18.四数之和题目解析解题思路代码实现总结 18. 四数之和 题目解析 (1) 从一个数组中找一个目标值target (2) target nums[a] nums[b] nums[c] nums[d] 解题思路 和上一道题三数之和一样, 我们把四…

刷到这篇文章的老师,就是老天在帮你

作为一名奋斗在教育战线的老师,是否曾在成绩查询这个环节中倍感头大? 统计是个繁琐又重要的工作,但有了正确的工具,一切都变得无所谓! 什么是成绩查询? 成绩查询,顾名思义,就是学生…

uni-app 应对微信小程序最新隐私协议接口要求的处理方法

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一,问题起因 最新在开发小程序的时候,调用微信小程序来获取用户信息的时候经常报错一个问题 fail api scope is not declared in the privacy agreement,api更具公告…

Linux | 文件系统

目录 前言 一、预备知识 二、文件相关的系统调用 1、C语言的文件操作 2、系统调用接口 (1)open函数 (2)close函数 (3)write函数 (4)read函数 3、代码实操 三、深入理解文…

k8s:endpoint

在 Kubernetes 中,Endpoint 是一种 API 对象,它用于表示集群内某个 Service 的具体网络地址。换句话说,它连接到一组由 Service 选择的 Pod,从而使它们能够提供服务。每个 Endpoint 对象都与相应的 Service 对象具有相同的名称&am…

python判断图片主颜色

一 、 问题:python判断图片主颜色 python判断图片主颜色(HSV) 二 、 项目背景: app选项是否能被点击,判断执行逻辑。做自动化测试的朋友肯定遇到好多次,按钮属性无法判别时,就需要自己将app选…

shell script中的数值运算declare和$((运算式 ))

linux中变量定义默认是字符串类型,如要进行数值运算,需要先声明变量类型,或者通过固定格式来计算 看案例 如果不通过固定格式,直接 echo 55 如图,结果显示的55本身 可以写成 declare -i var#声明变量integrate类型&…

网络架构学习之FCNVMB(基于U-Net架构)

目录 一、U-Net介绍 1.1 网络简单介绍 1.2 网络特点 二、FCNVMB介绍 2.1 文章简介 2.2 网络简单介绍 2.3 代码介绍 2.4 跳跃连接 2.5 训练过程 2.6 FCNVMB与InversionNet的比较 一、U-Net介绍 1.1 网络简单介绍 U-Net是基于全卷积网络下一个语义分割应用于生物医学的深…

PC端视频编辑处理的全方位解决方案

视频已经成为企业传播信息、展示品牌形象的重要工具。然而,制作高质量的视频并非易事,需要专业的技术和设备。这就是美摄科技发挥作用的地方。我们为企业提供一站式的PC端视频编辑处理解决方案,帮助企业轻松制作出专业级别的视频。 美摄科技…

Kubernetes 架构

Kubernetes 架构 Kubernetes 最初源于谷歌内部的 Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理 / 虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提…

2021~2023年度长垣起重机博览会最佳产品彩页(修订中)

1.河南恒达 比较完善的起重量限制器产品线分类,提供了监控参数一览表。 2.沪源电机 详细的电机参数,这基本上可以作为电机发展的历史资料来搜集。 包含效率,功率因数,堵转电流等其他厂商很少给出的参数,可以做手册用…

【Redis】安装(Linuxwindow)及Redis的常用命令

Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复…

2024年天津中德应用技术大学专升本招生专业限制目录

2024年天津中德应用技术大学专升本招生专业限制 专科可允许报考的专业目录范围 机械电子工程: 机电一体化技术、数控技术、数控设备应用与维护、模具设计与制造、精密机械技术、材料工程技术、机械设计与制造、计算机辅助设计与制造、焊接技术与自动化、电气自动化…

Yolov8目标识别与实例分割——版本比对与原理解析

前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统,最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出,并随后进行了多次改进和迭代,产生了一系列不同版本的YOLO模型,如YOLOv2、YOLOv3、YOLOv4&a…

Java学习_day07_类的构造器代码块继承封装多态

文章目录 构造器格式注意点使用 代码块格式注意 继承格式注意点 封装包声明包导包注意点 访问修饰符 多态格式注意点代码演示 构造器 Java中每个类都至少有一个构造器,当程序员没有明确编写构造器时,Java编译器会自动为类添加一个无参的构造器。构造器通…

vue封装独立组件:实现分格密码输入框/验证码输入框

目录 第一章 实现效果 第二章 核心实现思路 第三章 封装组件代码实现 第一章 实现效果 为了方便小编的父组件随便找了个页面演示的通过点击按钮,展示子组件密码输入的输入框通过点击子组件输入框获取焦点,然后输入验证码数字即可子组件的确定按钮是验…

nodejs+vue+python+php智能停车系统-计算机毕业设计-微信小程序-安卓

随着网络技术的不断发展,多媒体技术应用渐渐的出现在教育领域中,智能停车算法研究管理已经成为社会的一个热门话题。 智能停车算法研究系统主要是借助计算机,通过对智能停车算法研究系统所需的信息管理,增加用户的选择&#xff0c…

【MyBatis Plus】使用 MyBatis Plus 完成分页功能,以及通用分页实体的实现

文章目录 一、MyBatis Plus 分页插件1.1 了解 MyBatis Plus 的插件功能1.2 配置分页插件1.3 测试分页功能 二、实现通用分页实体2.1 分页查询需求2.2 分页实体类2.3 分页查询接口2.4 通用实体的转换2.4.1 PageQuery 转换为 MP Page2.4.2 分页结果 PO 转换 VO 一、MyBatis Plus …

canvas实现环形进度条

与setTimeout和setInterval不同&#xff0c;requestAnimationFrame不需要设置时间间隔。 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Canvas progress</title> </head&g…

GCC 编译器 详细总结

前言&#xff1a; 源文件需要经过编译才能生成可执行文件。 在 Windows 下进行开发时&#xff0c;只需要点几个按钮即可编译&#xff0c;集成开发环境(比如 Visual studio)已经将各种编译 工具的使用封装好了。 Linux 下也有很优秀的集成开发工具&#xff0c;但是更多的时候…