Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Tailwind CSS 真有那么好吗?讨厌它的前六大原因

Tailwind CSS 真有那么好吗?讨厌它的前六大原因

作者头像
前端小智@大迁世界
发布于 2024-02-12 00:29:36
发布于 2024-02-12 00:29:36
2.9K00
代码可运行
举报
文章被收录于专栏:终身学习者终身学习者
运行总次数:0
代码可运行

免费体验 Gpt4 plus 与 AI作图神器,我们出的钱 体验地址:体验

Tailwind CSS 是一个受欢迎的“实用优先”的 CSS 框架,声称可以帮助你更快、更轻松地创建自定义设计。然而,并不是每个人都对 Tailwind CSS 感到满意。事实上,有很多原因让你应该避免使用它,而坚持使用纯 CSS 或其他框架。以下是你应该讨厌 Tailwind CSS 的主要原因:

  1. 它失去了 HTML 和 CSS 的语义
  2. 它在你的 HTML 中大量添加类
  3. 它不具有可扩展性和可重用性
  4. 它生成的 CSS 文件庞大,影响性能
  5. 它只适合那些不想理解和学习 CSS 的人
  6. 它有一个庞大的库,学习普通的 CSS 更容易

1.它失去了 HTML 和 CSS 的语义

Web 开发的主要原则之一是将你的网站的结构、表现和行为分开。HTML 旨在为你的内容提供结构和含义,CSS 旨在为你的元素提供表现和外观,而 JavaScript 旨在为你的网站提供行为和交互性。

Used Link Reader 以下是文章的翻译和润色:

😡 为什么讨厌 Tailwind CSS 的前六大原因

Tailwind CSS 是一个受欢迎的“实用优先”的 CSS 框架,声称可以帮助你更快、更轻松地创建自定义设计。然而,并不是每个人都对 Tailwind CSS 感到满意。事实上,有很多原因让你应该避免使用它,而坚持使用纯 CSS 或其他框架。以下是你应该讨厌 Tailwind CSS 的主要原因:

它失去了 HTML 和 CSS 的语义 它在你的 HTML 中大量添加类 它不具有可扩展性和可重用性 它生成的 CSS 文件庞大,影响性能 它只适合那些不想理解和学习 CSS 的人 它有一个庞大的库,学习普通的 CSS 更容易

  1. 它失去了 HTML 和 CSS 的语义

Web 开发的主要原则之一是将你的网站的结构、表现和行为分开。HTML 旨在为你的内容提供结构和含义,CSS 旨在为你的元素提供表现和外观,而 JavaScript 旨在为你的网站提供行为和交互性。

然而,Tailwind CSS 违反了这一原则,将表现与结构混合在一起。而不是使用反映你的元素的目的和功能的有意义和描述性的类名,Tailwind CSS 使用的是描述它们外观的通用和难懂的类名。例如,以下是 Tailwind CSS 中的一个简单卡片组件的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="max-w-sm rounded overflow-hidden shadow-lg">
  <img class="w-full" src="some-image.jpg" alt="Some image">
  <div class="px-6 py-4">
    <div class="font-bold text-xl mb-2">Some title</div>
    <p class="text-gray-700 text-base">Some text</p>
  </div>
</div>

这些类名并不能告诉你关于元素的意义或功能的任何信息。它们只告诉你它们是什么样子。这使得理解和维护你的代码变得困难,因为你必须记住每个类的作用以及它如何影响你的组件的布局和设计。

与此相比,使用纯 CSS,你可以使用语义化和描述性的类名,这些类名反映了你的元素的含义和功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="card">
  <img class="card-image" src="some-image.jpg" alt="Some image">
  <div class="card-content">
    <div class="card-title">某标题</div>
    <p class="card-text">某文本</p>
  </div>
</div>

仅通过查看其类名,你就可以轻松地知道每个元素的功能,并通过编辑 CSS 文件来更改其外观。

2. 它使你的 HTML 充斥着大量的类

Tailwind CSS 的主要批评之一是它迫使你编写充斥着数十个实用程序类的 HTML,使其难以阅读和维护。例如,这是 Tailwind CSS 中的一个简单按钮的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
  点击我
</button>

与此相比,在纯 CSS 中,你可以使用单个类名并在单独的文件中定义样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button class="btn-blue">
  点击我
</button>

纯 CSS 比 Tailwind CSS 更简洁和语义化。你可以轻松地通过查看其类名来知道按钮的功能,并通过编辑 CSS 文件来更改其外观。使用 Tailwind CSS,你必须记住很多类名及其含义,并且每次想要调整设计时都必须修改 HTML。

Tailwind CSS 主张将所有样式放在你的 HTML 中,而不是将它们分离到不同的文件或层中。这违反了 Web 开发的核心原则之一:关注点分离。通过将表现与内容混合,你违反了代码的模块性和可维护性。你还使在不同的上下文或设备中重用或覆盖样式变得更加困难。

3. 它不具有可扩展性和可重用性

Tailwind CSS 的另一个问题是它不具有可扩展性和可重用性。Tailwind CSS 鼓励你通过对其应用多个实用程序类来单独设置每个元素的样式。然而,这导致你的代码中出现重复和不一致,因为你必须为类似的元素重复相同的类或为不同的变体稍作更改。

例如,假设你有两个看起来相似但颜色不同的按钮:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
  蓝色按钮
</button>

<button class="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded">
  红色按钮
</button>

两个按钮除背景颜色外都有相同的类。这意味着你必须为每个按钮重复相同的类,使你的代码冗长和多余。此外,如果你想更改按钮的某些内容,例如字体大小或边框半径,你必须在多个地方进行更改,这使得你的代码容易出错和不一致。

与此相比,在纯 CSS 中,你可以为两个按钮使用单个类名,并使用修饰符或变量进行不同的变体:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button class="btn btn-blue">
  蓝色按钮
</button>

<button class="btn btn-red">
  红色按钮
</button>

你可以为两个按钮使用单个类名,并使用修饰符或变量进行不同的变体。这使得你的代码简洁且一致,你可以在一个地方更改按钮的某些内容。

4. 它生成的 CSS 文件庞大,影响性能

Tailwind CSS 的另一个缺点是它生成的 CSS 文件庞大,可能会对你的网站性能产生负面影响。Tailwind CSS 附带了数千个实用程序类,涵盖了几乎所有可能的样式变体。然而,这些类中的大多数在你的项目中从未使用过,它们只是为你的 CSS 文件增加了不必要的膨胀。

根据官方文档,默认的 Tailwind CSS 文件大小超过 2.4 MB,对于生产网站来说太大了。即使在压缩文件后,它仍然保持在约 46 kB,这仍然比大多数其他 CSS 框架大。

为了减小文件大小,Tailwind CSS 推荐使用一个名为 PurgeCSS 的工具,该工具扫描你的 HTML 文件并从你的 CSS 文件中删除任何未使用的类。然而,这为你的构建过程增加了额外的步骤,如果 PurgeCSS 未能检测到在你的代码中动态或有条件地使用的某些类,它也可能引入错误。

  1. 它只适合那些不想理解和学习 CSS 的人

Tailwind CSS 也对你学习和理解 CSS 产生了负面影响。使用 Tailwind CSS,你实际上是依赖于一个声称是 CSS 样式替代品的框架,但实际上仍然需要你知道 CSS 样式来使用它。例如,你仍然需要知道如何使用 flexbox、grid 或 position 属性来布局你的元素,但是你不是直接在你的 CSS 文件中使用它们,而是使用模仿它们的 Tailwind CSS 类。

以下是文章的翻译:

5. 它只适合那些不想理解和学习 CSS 的人

Tailwind CSS 也对你学习和理解 CSS 产生了负面影响。使用 Tailwind CSS,你实际上是依赖于一个声称是 CSS 样式替代品的框架,但实际上仍然需要你知道 CSS 样式来使用它。例如,你仍然需要知道如何使用 flexbox、grid 或 position 属性来布局你的元素,但是你不是直接在你的 CSS 文件中使用它们,而是使用模仿它们的 Tailwind CSS 类。

这不仅令人困惑,而且容易误导。你并没有学习实际的 CSS 属性和值,而是学习 Tailwind CSS 类及其含义。这可能会让你认为你知道 CSS,但实际上,你只熟悉 Tailwind CSS。如果你遇到 Tailwind CSS 未提供你需要的类的情况,或者你想切换到另一个框架或工具,你将很难理解或编写实际的 CSS 代码。

6. 它有一个庞大的库,学习普通的 CSS 更容易

Tailwind CSS 为每种可能的场景提供了数千个实用程序类,但这也意味着你必须记住或查找所有这些类及其含义。这可能会令人不知所措,尤其是对于 Web 开发的新手来说。

此外,Tailwind CSS 并不遵循 CSS 的标准命名约定或语法。例如,它不使用破折号或驼峰命名来分隔类名中的单词,而是使用冒号或括号。它不使用百分比或像素来指定值,而是使用任意的数字或字母。这可能会使你的代码看起来不一致和不熟悉。

相比之下,学习普通的 CSS 要简单得多,也更直观。你只需要学习标准化的、得到浏览器广泛支持的基本属性和值。你还可以使用自定义属性或变量来创建符合你需求的自己的命名约定和值。你还可以使用在线资源或工具来交互式和直观地学习和练习 CSS。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RestTemplate exchange GET POST请求传参数DEMO
link: Illegal character ((CTRL-CHAR, code 31))问题排查 gzip接口返回 RestTemplate GET POST请求 https://www.cnblogs.com/oktokeep/p/16769602.html
oktokeep
2024/11/28
1450
Gzip压缩文件和压缩字符串,web接口应用
打印输出: testPost发送内容:{"id":"10","name":"zhangliao"} 接口调用返回结果:"json串返回成功"
oktokeep
2024/11/21
1270
Java映射 转换post response T data
接上篇 Java泛型对象在http请求和响应对象中的封装 https://www.cnblogs.com/oktokeep/p/17688322.html
oktokeep
2024/10/09
1100
RestTemplate用法
RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都
鱼找水需要时间
2023/02/16
4420
http请求方式-RestTemplate
oktokeep
2024/10/09
1240
RestTemplate.exchange各种用法(包括泛型等 --全)
在我们日常开发中,无论是内部服务之间的调用,还是调用第三方服务,都免不了发起Http请求,在Java中发起Http请求常见的方式大致有原生HttpURLConnection、Apache的HttpClient、Spring的RestTemplate等,如果您基于Spring框架,那么强烈推荐使用RestTemplate,理由很简单:非常符合我们发起http请求的习惯,就像使用postman,只需要关心具体的url、header、body等即可,对于繁琐的细节RestTemplate都帮我们安排(封装)的明明白白,无关的细节我们统统不用操心! 尤其是RestTemplate.exchange方法,可以称的上是单靠一招就可以吊打其它方式。。。 所以本文就来详细介绍一下RestTemplate.exchange各种用法,力求覆盖日常开发中的各种场景,Let’s start~~
天罡gg
2022/12/02
6.7K1
RestTemplate.exchange各种用法(包括泛型等 --全)
Springboot 整合 RestTemplate 调用第三方接口
导入依赖 springboot 已经加入了该依赖 import org.springframework.web.client.RestTemplate; 创建工具类 @Component @Slf4j public class RestTemplateUtil { @Resource private RestTemplate restTemplate; /** * 配置请求超时时间 */ public final HttpComponentsC
用户10125653
2022/11/10
1.2K0
总结:使用 RestTemplate 发送HTTP请求
一般发送HTTP请求是使用 Apache的HttpClient,它比较灵活。在 spring cloud 中往往提供的 REST 风格的服务。RestTemplate 提供了一种简单便捷的模板类来进行HTTP操作的方式。
张云飞Vir
2021/05/18
3.1K0
ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)
Spring Data是spring提供的一套连接各种第三方数据源的框架集,它支持连接很多第三方数据源,例如:
鱼找水需要时间
2023/02/16
2.6K0
ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)
Restful 介绍及SpringMVC+restful 实例讲解
restful不是一个框架,称为一种编码更烦更贴切吧,其核心类位于spring-web.jar中,即RestTemplate.class
肖哥哥
2019/02/22
5110
Restful 介绍及SpringMVC+restful 实例讲解
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
Java_老男孩
2019/12/02
11.6K1
异步回调方法 调用返回Cannot render error page for request [xxxxx] as the response has already been commited. A
异步回调方法 调用返回Cannot render error page for request [xxxxx] as the response has already been commited. As a result, 解决方案
oktokeep
2025/03/25
1790
RestTemplate的使用和原理你都烂熟于胸了吗?【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/09/18
2.3K0
RestTemplate的使用和原理你都烂熟于胸了吗?【享学Spring MVC】
聊聊RestTemplate对HttpClient的适配
org/springframework/http/client/ClientHttpRequestFactory.java
code4it
2023/10/08
3160
给RestTemplate添加拦截器记录请求响应
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
JQ实验室
2022/09/02
1.5K0
聊聊RestTemplate对HttpClient的适配
org/springframework/http/client/ClientHttpRequestFactory.java
code4it
2023/10/09
4670
聊聊RestTemplate对HttpClient的适配
springboot实战之常用http客户端整合
本文主要介绍一下三种http客户端,httpcomponents项目下的httpclient(后边简化描述为httpcomponents-client)、restTemplate、webclient的基本用法
lyb-geek
2019/11/12
8.1K0
springboot实战之常用http客户端整合
SpringBoot系列之RestTemplate调https接口
业务:本系统接口都是http的,调用第三方接口,因为做了安全性校验,所以不能通过RestTemplate调用
烂猪皮
2020/12/15
2.4K0
Spring Boot(三):RestTemplate提交表单数据的三种方法
在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法,但在使用过程中,由于其方法参数众多,很多同学又混淆了表单提交与Payload提交方式的差别,而且接口设计与传统的浏览器使用的提交方式又有差异,经常出现各种各样的错误,如405错误,或者根本就得不到提交的数据,错误样例如下:
业余草
2019/01/21
2.4K0
万字长文讲解调用第三方接口,RestTemplate,urlConnection使用详解,java代码模拟postman发送请求
在日常开发中,经常需要调用第三方接口,例如调用物流接口,此时需要利用urlConnection或者restTemplate模拟postman发送请求,请求支持加header ,设置content-type支持传递json;请求方式get,post,也可以需要传递文件,或者传递文件流;
javaNice
2023/11/20
9740
推荐阅读
相关推荐
RestTemplate exchange GET POST请求传参数DEMO
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验