【CSS】Tailwind CSS 與傳統 CSS:設計理念與使用場景對比

1. 開發方式

1.1 傳統 CSS

  • 手寫 CSS:你需要手動編寫 CSS 規則,定義類名、ID 或元素選擇器,并為每個元素編寫樣式。

  • 分離式開發HTMLCSS 通常是分離的,HTML 中通過類名或 ID 引用 CSS 文件中的樣式。

  • 示例

    • <div class="card">Hello World</div>
      
    • .card {padding: 1rem;background-color: white;border-radius: 0.5rem;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
      }
      

1.2 Tailwind CSS

  • 實用類優先Tailwind 提供了大量的實用類(utility classes),你直接在 HTML 中使用這些類來構建樣式,而不需要手寫 CSS

  • 原子化 CSS:每個實用類只負責一個小的樣式功能(如 p-4 表示 padding: 1rem),通過組合這些類來實現復雜的設計。

  • 示例

    • <div class="p-4 bg-white rounded-lg shadow-sm">Hello World</div>
      

2. 設計理念

2.1 傳統 CSS
  • 語義化:傳統 CSS 強調語義化的類名(如 .card.button),類名通常與組件的功能或內容相關。
  • 可復用性:通過定義通用的類名,可以在多個地方復用樣式。
  • 靈活性:你可以完全控制樣式的細節,但需要手動管理樣式的組織和維護。
2.2 Tailwind CSS
  • 功能優先Tailwind 的類名直接描述樣式功能(如 text-centerbg-blue-500),而不是語義。
  • 原子化設計:通過組合多個實用類來實現樣式,避免了重復定義樣式規則。
  • 約束性設計Tailwind 提供了一套設計系統(如顏色、間距、字體大小等),幫助你保持設計的一致性。

3. 代碼量

3.1 傳統 CSS
  • CSS 文件較大:你需要為每個組件或頁面編寫獨立的 CSS 規則,可能會導致 CSS 文件體積較大。
  • 重復代碼:如果多個組件有相似的樣式,可能會導致代碼重復。
3.2 Tailwind CSS
  • HTML 文件較大:由于直接在 HTML 中使用實用類,HTML 文件可能會顯得臃腫。
  • CSS 文件較小Tailwind 通過 PurgeCSS 移除未使用的樣式,最終生成的 CSS 文件通常較小。

4. 維護性

4.1 傳統 CSS

  • 維護成本較高:隨著項目規模的增長,CSS 文件可能會變得難以維護,尤其是當多個開發者共同維護時。
  • 命名沖突:需要小心管理類名,避免全局樣式沖突。

4.2 Tailwind CSS

  • 維護成本較低:由于樣式是通過實用類直接應用的,減少了全局樣式的沖突問題。
  • 一致性:Tailwind 的設計系統確保了樣式的一致性,減少了樣式不一致的問題。

5. 學習曲線

5.1 傳統 CSS

  • 學習曲線較低:傳統 CSS 是 Web 開發的基礎,幾乎所有開發者都熟悉。
  • 靈活性高:你可以完全控制樣式的細節,但需要掌握 CSS 的各種特性(如 Flexbox、Grid、動畫等)。

5.2 Tailwind CSS

  • 學習曲線較高:需要熟悉 Tailwind 的實用類命名規則和設計系統。
  • 快速開發:一旦熟悉 Tailwind,可以快速構建復雜的界面,減少上下文切換(不需要在 HTMLCSS 文件之間來回切換)。

6. 適用場景

6.1 傳統 CSS

  • 適合小型項目:對于小型項目或簡單的頁面,傳統 CSS 可能更直接。
  • 高度定制化:如果你需要完全自定義樣式,傳統 CSS 提供了更大的靈活性。

6.2 Tailwind CSS

  • 適合中大型項目:Tailwind 的設計系統和實用類非常適合需要快速迭代和保持一致性的項目。
  • 組件化開發:與 React、Vue 等框架結合使用時,Tailwind 可以很好地支持組件化開發。

7. 性能

7.1 傳統 CSS

  • 性能依賴優化:如果 CSS 文件未經優化,可能會導致性能問題(如未使用的樣式)。
  • 全局樣式:全局樣式可能會導致不必要的樣式覆蓋和沖突。

7.2 Tailwind CSS

  • 性能優化:通過 PurgeCSS 移除未使用的樣式,生成的 CSS 文件通常較小。
  • 局部樣式:樣式直接應用于 HTML 元素,減少了全局樣式的影響。

8. 生態系統

8.1傳統 CSS
  • 生態系統豐富:有許多 CSS 預處理器(如 Sass、Less)和框架(如 Bootstrap、Foundation)可供選擇。
  • 工具鏈復雜:可能需要配置 PostCSSAutoprefixer 等工具。
8.2 Tailwind CSS
  • 生態系統完善:Tailwind 有豐富的插件(如 @tailwindcss/forms@tailwindcss/typography)和社區支持。
  • 工具鏈簡單:Tailwind 提供了開箱即用的工具鏈(如 CLI、PostCSS 插件)。

9. 總結對比表

特性傳統 CSSTailwind CSS
開發方式手寫 CSS,分離式開發實用類優先,原子化 CSS
設計理念語義化,強調可復用性功能優先,強調一致性
代碼量CSS 文件較大,HTML 文件較小HTML 文件較大,CSS 文件較小
維護性維護成本較高,容易沖突維護成本較低,減少沖突
學習曲線較低較高
適用場景小型項目,高度定制化中大型項目,快速迭代
性能依賴優化通過 PurgeCSS 優化
生態系統豐富,但工具鏈復雜完善,工具鏈簡單

10. 選擇建議

  • 如果你需要快速構建一致性的界面,并且喜歡在 HTML 中直接編寫樣式,Tailwind CSS 是一個很好的選擇。
  • 如果你需要完全控制樣式細節,或者項目規模較小,傳統 CSS 可能更適合。
  • 兩者并不是互斥的,你可以在同一個項目中結合使用 Tailwind CSS 和傳統 CSS,根據具體需求選擇最合適的工具。

11. 擴展

  1. 如果你要在項目中使用 Tailwind CSS, 可以結合 (shadcn/uiHeadless UI ) 這些無頭用戶界面,無 UI 組件, 來定制 構建你的業務組件。
  2. 換句話說,無頭組件庫,就是提供了一種方式來構建只包含邏輯和功能的組件,而內部不實現具體的 UI。它們包含了一些交互邏輯狀態管理,但沒有任何與視覺樣式相關的代碼。
  3. 傳統的 UI 組件、通常被拆分為兩大部分: 外觀樣式邏輯部分, 當你要為業務,修改某個組件的樣式就要通過 CSS 破壞的方式來實現, 而這些無頭組件庫的出現,恰恰解決了這一痛點。 可以讓你更快,更好解決:樣式難以定制、耦合性高、創意受限、依賴過多等問題 。

Headless UI 初探

  • 完全自定義:開發者需要從頭開始設計組件的外觀。
  • 靈活性高:適合需要獨特設計風格的項目。

shadcn/ui 初探

  • 基于 Tailwind CSS:可以通過修改 Tailwind 配置文件或直接覆蓋類名來自定義樣式。

  • 開箱即用:默認樣式已經足夠美觀,適合快速開發。

  • 它不是 一個組件庫,它是可重用組件的集合,您可以將其復制并粘貼到應用中。

  • 不是組件庫意味著什么 ?

    • 無需將其安裝為依賴項。它無法通過 npm 分發。
    • 選擇您需要的組件,將代碼復制并粘貼到項目中,并根據需要進行自定義。
    • 以此作為構建自己的組件庫的參考。
  • FAQ : 為什么要復制/粘貼而不是打包成依賴項?

    • 這背后的想法是賦予您對代碼的所有權和控制權,允許你決定如何構建組件和設置樣式。

    • 從一些合理的默認值開始,然后根據你的需要自定義組件。

    • 將組件打包到 npm 包中的缺點之一是樣式與實現耦合。組件的設計應與其實現分開。

使用 shadcn/uiHeadless UI 的注意點:

  • 對開發者能力要求高,需要較強的組件抽象設計能力。

  • 對使用者:UI 層完全自定義,存在一定開發成本。

  • 對使用者:新的編碼風格需要一定的學習成本。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897238.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897238.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897238.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025華為OD機試真題E卷 - 螺旋數字矩陣【Java】

題目描述 疫情期間,小明隔離在家,百無聊賴,在紙上寫數字玩。他發明了一種寫法:給出數字個數 n (0 < n ≤ 999)和行數 m(0 < m ≤ 999),從左上角的 1 開始,按照順時針螺旋向內寫方式,依次寫出2,3,…,n,最終形成一個 m 行矩陣。小明對這個矩陣有些要求: 1、…

地下井室可燃氣體監測裝置:守護地下安全,防患于未“燃”!

在城市的地下&#xff0c;隱藏著無數的燃氣管道和井室&#xff0c;它們是城市基礎設施建設的重要部分&#xff0c;燃氣的使用&#xff0c;給大家的生活提供了極大的便利。在便利生活的背后&#xff0c;也存在潛在的城市安全隱患。 近年來&#xff0c;地下井室可燃氣體泄漏事故…

【使用hexo模板創建個人博客網站】

使用hexo模板創建個人博客網站 環境準備node安裝hexo安裝ssh配置 使用hexo命令搭建個人博客網站hexo命令 部署到github創建倉庫修改_config.yml文件 編寫博客主題擴展 環境準備 node安裝 進入node官網安裝node.js 使用node -v檢查是否安裝成功 安裝成功后應該出現如上界面 …

C# OPC DA獲取DCS數據(提前配置DCOM)

OPC DA配置操作手冊 配置完成后&#xff0c;訪問遠程ip&#xff0c;就能獲取到服務 C#使用Interop.OPCAutomation采集OPC DA數據&#xff0c;支持訂閱&#xff08;數據變化&#xff09;、單個讀取、單個寫入、斷線重連

發行思考:全球熱銷榜的頻繁變動

幾點雜感&#xff1a; 1、單機游戲銷量與在線人數的衰退是劇烈的&#xff0c;有明顯的周期性&#xff0c;而在線游戲則穩定很多。 如去年的某明星游戲&#xff0c;最高200多萬在線&#xff0c;如今在線人數是48名&#xff0c;3萬多。 而近期熱門的是MH&#xff0c;在線人數8…

Unity自定義區域UI滑動事件

自定義區域UI滑動事件 介紹制作1.創建一個Image2.創建腳本 總結 介紹 一提到滑動事件聯想到有太多的插件了比如EastTouchBundle&#xff0c;今天想單純通過UI去做一個滑動事件而不是基于Box2d或者Box去做滑動事件。 制作 1.創建一個Image 2.創建腳本 using UnityEngine; us…

taosd 寫入與查詢場景下壓縮解壓及加密解密的 CPU 占用分析

在當今大數據時代&#xff0c;時序數據庫的應用越來越廣泛&#xff0c;尤其是在物聯網、工業監控、金融分析等領域。TDengine 作為一款高性能的時序數據庫&#xff0c;憑借獨特的存儲架構和高效的壓縮算法&#xff0c;在存儲和查詢效率上表現出色。然而&#xff0c;隨著數據規模…

《UE5_C++多人TPS完整教程》學習筆記34 ——《P35 網絡角色(Network Role)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P35 網絡角色&#xff08;Network Role&#xff09;》 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephe…

K8s 1.27.1 實戰系列(七)Deployment

一、Deployment介紹 Deployment負責創建和更新應用程序的實例,使Pod擁有多副本,自愈,擴縮容等能力。創建Deployment后,Kubernetes Master 將應用程序實例調度到集群中的各個節點上。如果托管實例的節點關閉或被刪除,Deployment控制器會將該實例替換為群集中另一個節點上的…

Linux(Centos 7.6)命令詳解:vim

1.命令作用 vi/vim 是Linux 系統內置不可或缺的文本編輯命令&#xff0c;vim 是vi 的加強版本&#xff0c;兼容vi 的所有指令&#xff0c;不僅能編輯文本&#xff0c;而且還具有shell 程序編輯的功能&#xff0c;可以不同顏色的字體來辨別語法的正確性。 2.命令語法 usage: …

微信小程序引入vant-weapp組件教程

本章教程,介紹如何在微信小程序中引入vant-weapp。 vant-weapp文檔:https://vant-ui.github.io/vant-weapp/#/button 一、新建一個小程序 二、npm初始化 npm init三、安裝 Vant Weapp‘ npm i @vant/weapp -

C++ 作業 DAY5

作業 代碼 Widtget.h class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private:Ui::Widget *ui;/************************ 起始終止坐標 ************************/QPoint end;QPoint start;QVector<QPoint> per_start_lis…

Selenium 中 ActionChains 支持的鼠標和鍵盤操作設置及最佳實踐

Selenium 中 ActionChains 支持的鼠標和鍵盤操作設置及最佳實踐 一、引言 在使用 Selenium 進行自動化測試時&#xff0c;ActionChains 類提供了強大的功能&#xff0c;用于模擬鼠標和鍵盤的各種操作。通過 ActionChains&#xff0c;可以實現復雜的用戶交互&#xff0c;如鼠標…

前端面試技術性場景題

87.場景面試之大數運算&#xff1a;超過js中number最大值的數怎么處理 在 JavaScript 中&#xff0c;Number.MAX_SAFE_INTEGER&#xff08;即 2^53 - 1&#xff0c;即 9007199254740991&#xff09;是能被安全表示的最大整數。超過此值時&#xff0c;普通的 Number 類型會出現…

【js逆向】iwencai國內某金融網站實戰

地址&#xff1a;aHR0cHM6Ly93d3cuaXdlbmNhaS5jb20vdW5pZmllZHdhcC9ob21lL2luZGV4 在搜索框中隨便輸入關鍵詞 查看請求標頭&#xff0c;請求頭中有一個特殊的 Hexin-V,它是加密過的&#xff1b;響應數據包中全是明文。搞清楚Hexin-V的值是怎么生成的&#xff0c;這個值和cooki…

ES Module 的 import 導入和 import () 動態導入

ES Module 的 import 導入和 import () 動態導入介紹 一、ES Module 簡介 ES Module 是 JavaScript 官方提供的標準化模塊系統&#xff0c;它的出現解決了長期以來 JavaScript 在模塊管理方面的混亂局面。通過 ES Module&#xff0c;開發者可以更加方便地組織和復用代碼&…

使用Node.js從零搭建DeepSeek本地部署(Express框架、Ollama)

目錄 1.安裝Node.js和npm2.初始化項目3.安裝Ollama4.下載DeepSeek模型5.創建Node.js服務器6.運行服務器7.Web UI對話-Chrome插件-Page Assist 1.安裝Node.js和npm 首先確保我們機器上已經安裝了Node.js和npm。如果未安裝&#xff0c;可以通過以下鏈接下載并安裝適合我們操作系…

BUUCTF——[GYCTF2020]FlaskApp1 SSTI模板注入/PIN學習

目錄 一、網頁功能探索 二、SSTI注入 三、方法一 四、方法二 使用PIN碼 &#xff08;1&#xff09;服務器運行flask登錄所需的用戶名 &#xff08;2&#xff09;modename &#xff08;3&#xff09;flask庫下app.py的絕對路徑 &#xff08;4&#xff09;當前網絡的mac地…

Java基礎關鍵_018_集合(二)

目 錄 一、泛型 ※ 1.說明 2.實例 3.擦除與補償 4.泛型的定義 &#xff08;1&#xff09;類定義 &#xff08;2&#xff09;靜態方法定義 &#xff08;3&#xff09;接口定義 5.通配符 &#xff08;1&#xff09;無限定 &#xff08;2&#xff09;上限 &#xff…

FPGA學習篇——Verilog學習3(關鍵字+注釋方法+程序基本框架)

1 Verilog常用關鍵字 大概知道以下哪些是關鍵字就好&#xff0c;如何使用還是得在編寫代碼中來學習。 2 Verilog注釋方法 Verilog有兩種注釋方式&#xff1a; 2.1 “ // ” 單行。 2.2 “ /* ... */ ” 可擴展多行。 3 Verilog程序基本框架 Verilog 的基本設計單元是“…