我错误地使用了 Tailwind,所以你不必这样做

三年前,我开始使用tailwind css,一个出色的前端开发库(本文不再赘述其优点,网上资源丰富)。我想分享一下我早期使用tailwind时不断犯的错误,希望能帮助大家避免重蹈覆辙。

Tailwind颠覆了传统CSS的级联样式表概念,通过“实用程序类”将CSS规则直接应用于DOM元素。起初感觉陌生,但很快便上手了。我仅用一天时间就适应了它,现在除非不得已,否则不会再写纯CSS了。Tailwind与我的首选框架Nuxt集成无缝,构建美观、响应式网站非常便捷。

然而,问题出现了:选项越多,包含的样式越多,HTML代码就越混乱。另一个问题是代码冗余。作为一名DRY原则的忠实拥护者,看到模板中重复的类序列让我非常难受。

我尝试优化它。

最初的想法是将Tailwind类序列提取为字符串变量。在Vue.js(Nuxt基于Vue)中,大致如下:

  
const tailwindBtn = "m-2 p-2 rounded border border-2 border-yellow-500 bg-blue-500 text-black text-lg font-bold";

登录后复制

虽然维护和修改更容易了,但代码可读性却值得商榷,尤其是在应用中有多个相同元素,需要将定义提升到全局常量时。

我继续寻找更好的解决方案,这时我发现了Tailwind的@apply指令。这似乎与之前的做法背道而驰:你可以创建自己的“类样式表”,用自定义类和元素填充它,而不是直接将定义放在具体元素上。不同的是,你可以用Tailwind实用程序类构建解决方案,而不是简单的CSS规则。

虽然Vue School的导师和Tailwind文档都警告我不要使用@apply,但我还是尝试了。

我错误地使用了 Tailwind,所以你不必这样做

我用这种方法创建了几个网站,它确实有效。问题解决了,或者说…暂时解决了?

到了2024年末,我为一个网站添加新功能时,完全忘记了一年前用@apply做的“恶作剧”。突然,我发现无法组合布局。

模板中没有明显的样式,但

元素却渲染错误。我打开浏览器开发者工具检查渲染的HTML,发现它们应用了CSS样式。

我错误地使用了 Tailwind,所以你不必这样做

经过一番排查,我找到了罪魁祸首:

div {  @apply m-auto text-center text-white;}

登录后复制

在tailwind.css文件中,这在2023年看起来或许是个好主意,但现在却成了问题。

谁会想到我有一天需要其他样式呢?

教训一:永远不要在元素选择器上全局使用@apply。

虽然在创建新项目时它看起来很方便,但从长远来看,它会带来麻烦。不仅容易忘记,它还会降低代码灵活性。将来,你可能会想移除它,但一旦删除全局样式,依赖它的网站功能就会崩溃。

我个人建议根本不要在tailwind.css中使用@apply(如果我有时间和精力的话,会从所有项目中移除它)。

如果你仍然坚持使用它(正如Tailwind文档所说,例如“覆盖第三方库中的样式”),至少创建

使用.my-cool-css-class是可以接受的,因为你必须将其附加到要设置样式的元素上。这样,每个人(包括未来的你)都能看到它,并在需要时找到它的定义。

但是…

锚元素是打破这条规则的诱人例外,因为为每个元素添加类属性很繁琐。

一种替代方案是创建一个围绕锚点(或Nuxt中的)的自定义链接组件,但这可能不是你想要的。

事实上,使用@apply指令仍然是解决这个问题最常见的方案。

如果你100%确定需要全局元素样式,可以使用@apply,但这应该始终是有充分理由的决定。

教训二:Tailwind类定义过长/重复的根本原因是代码设计不当。

使用Vue等现代JavaScript框架,可以创建小型可重用组件,并将其组合构建复杂的解决方案。

上面的按钮示例可以改写成:

  import { defineProps, computed } from 'vue';export default {  name: 'MyButton',  props: {    caption: {      type: String,      required: true    }  },  setup(props) {    const btnClass = computed(() => 'm-2 p-2 rounded border border-2 border-yellow-500 bg-blue-500 text-black text-lg font-bold');    return { btnClass };  }};

登录后复制

这样,重复的代码就消失了。

看到很长的类链,总是让我觉得元素承担了过多的职责。最好的方法是退一步,重新思考导致这个问题的代码设计。

我的经验是,只需少量Tailwind类即可创建美观的设计。如果需要更多样式,通常不应该全部堆积在一个元素上。这与创建一个大型组件(或类)来做所有事情类似,最终需要停止添加更多行并开始分解事物。

在最坏的情况下,应该能够将视觉要求高的CSS元素封装到单独的组件中,以最大限度地减少所需的交互量。或者,可以使用现成的Tailwind组件库。

以上就是我错误地使用了 Tailwind,所以你不必这样做的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2643507.html

(0)
上一篇 2025年3月7日 07:03:34
下一篇 2025年3月6日 07:28:08

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 从优秀到卓越:掌握前端开发

    成为顶尖前端工程师,并非仅仅停留在HTML、CSS和JavaScript的编写层面。真正的卓越,需要掌握一系列关键技术、核心概念和最佳实践。本文将带您深入探索每个优秀前端开发者都应精通的领域,助您在职业道路上更上一层楼。 网络基础知识 缓存…

    2025年3月7日
    200
  • 如何在NestJS中轻松发送电子邮件?

    高效发送电子邮件:使用@nestixis/nestjs-mailer简化流程 在许多应用中,发送电子邮件至关重要,无论是用户通知、事务更新还是营销活动。然而,传统的电子邮件解决方案往往复杂且繁琐,需要整合邮件程序、模板语言,并处理各种依赖关…

    2025年3月7日
    200
  • 以 semver ‘0’ 开头

    您正准备发布一个新软件包,犹豫是否应该从版本 0.x 开始。本文将探讨为何直接从 v1.0.0 开始可能更合理。 许多开发者倾向于从 v0.x 开始,理由是:不确定性、时间压力以及对 SemVer 的理解不足。然而,SemVer 中的 0.…

    2025年3月7日
    200
  • 通过技术 SEO 最佳实践增强 SaaS 产品开发

    确保您的SaaS平台易于目标用户发现和访问至关重要。技术SEO(搜索引擎优化)在此发挥着关键作用。将技术SEO最佳实践融入SaaS产品开发,能够显著提升平台的搜索可见性、用户体验和整体性能。 了解SaaS中的技术SEO 技术SEO专注于优化…

    2025年3月7日
    200
  • 释放有效 AWS 云迁移策略的潜力

    在当今快节奏的数字经济中,企业纷纷转向云计算以提升敏捷性、可扩展性和效率。然而,云迁移并非易事。成功的关键在于制定周全的AWS云迁移策略,确保平稳过渡并充分利用云计算的优势。 云迁移的驱动力 企业选择云迁移,主要为了适应数字化转型需求。云计…

    2025年3月7日
    200
  • JavaScript 执行上下文 – JS 代码如何在幕后运行

    理解javascript执行上下文前,需先了解javascript代码运行环境:浏览器和node.js。 JavaScript代码运行时,会先被浏览器或Node.js内置的JavaScript引擎(如Chrome的V8引擎、Firefox的…

    2025年3月7日
    200
  • 5 大战略技术趋势

    洞悉2025年五大战略技术趋势,助力CIO及IT领导者以负责任的创新引领未来。 Gartner分析师将今年的十大战略技术趋势归纳为三大主题:人工智能的机遇与挑战、新型计算范式以及人机协同。 主题一:人工智能:机遇与风险并存,企业需未雨绸缪 …

    2025年3月7日
    200
  • 掌握 AWS 事件管理:使用 Systems Manager 事件管理器自动响应

    处理 aws lambda 持续增长的错误率需要对错误进行分类并定义升级路径。本指南介绍如何利用 aws systems manager 事件管理器有效地自动化事件处理和升级。此工作流程包含使用 runbook 收集错误详细信息,并通过 a…

    2025年3月7日 编程技术
    200
  • 开发面试问题

    这份文档包含一系列编程面试问题,并附带解答和示例。 1. SQL事务的用途是什么? 答案: 保证数据库数据完整性。 说明: SQL事务确保对数据库的操作一致且安全,遵循ACID原则(原子性、一致性、隔离性、持久性)。所有操作要么全部执行,要…

    2025年3月7日
    200
  • 为 React 开发者深入探讨 Web 可访问性 (a)

    构建包容性 React 应用:深入探讨 Web 可访问性最佳实践 Web 可访问性 (a11y) 旨在确保所有用户,包括残障人士,都能平等地访问和使用网站及应用。为你的 React 应用添加可访问性功能,不仅能扩大用户群体,还能提升整体用户…

    2025年3月7日
    200

发表回复

登录后才能评论