Tailwind CSS快速上手 Tailwind CSS的安裝、配置、使用

📚前言

在Web前端開發的歷史長河中,CSS的編寫方式經歷了多次演進,從早期的原生CSSCSS預處理(Less/Sass/Stylus)CSS-in-JS(Styled-Components/Emotion) 再到 Utility-First 原子化CSS。每一種演進方案其本質都是圍繞“開發效率”、“運行性能”、”可維護性“ 這三個核心點之間尋找最佳平衡而衍生出各類CSS庫/框架/引擎。

在這里插入圖片描述

🍀原生CSS&CSS預處理(Less / Sass / Stylus)

開發人員手動編寫.css文件.less文件等,然后通過<link>標簽@import引入使用

  • 存在問題: 當隨著項目變大,很快就會面臨命名沖突、代碼冗余、缺乏邏輯組織、難以維護等
  • 解決方案:
    • CSS命名規范(BEM):CSS-BEM 命名規范通過嚴格的命名約定來約束作用域,增強代碼的可讀性和可維護性,是一種用于CSS模塊化開發的命名約定規范,但它依賴于開發人員的自覺性,且class類名很長。
    • CSS預處理(Less / Sass / Stylus): 引入了變量、嵌套、混入、繼承等編程概念,雖然增強了CSS的組織性和可復用性,但是并未從根本上解決命名他全局污染的問題。

🍀CSS-in-JS(Styled-Components / Emotion))

CSS-IN-JS這種解決方案,它提倡我們把CSS代碼寫在JavaScript代碼當中,在React JSX/TSX等類似的組件化框架興起后,也將CSS樣式視為組件的一部分。

  • 核心: styled-components、Emotion 將CSS樣式直接寫在JavaScript文件中,為每個組件生成唯一的、帶哈希值的類名,從而實現“作用域化樣式”,徹底避免了全局污染的問題。
  • 優勢:
    • 組件化: 樣式與邏輯類聚,方便復用和維護。
    • 動態樣式: 可以方便的基于組件的stateprops來動態改變樣式。
  • 問題:
    • 心智負擔: 要在JavaScript 和 CSS 之間來回的切換語法,而且需要一定的學習成本去學習特定庫的API。
    • 運行開銷: CSS樣式不是提前生成的,而是在運行時解析JavaScript并動態生成CSS,所帶來一定的性能損耗。

🍀Utility-First CSS(Tailwind CSS / UnoCSS)

Utility-First(功能優先)原子化CSS 是一種與傳統“語義化CSS”截然不同的思路,它提供了一系列高度可組合的、功能單一的“原子類”(Atomic CSS / Utility Classes)。

  • 核心: 開發人員無需再為組件編寫專門的CSS類,而是直接在HTML中組合這些原則來構建樣式。

    <!-- 傳統寫法:-->
    <style>.btn-primary{padding: 8px 16px;color: white;border-radius: 4px;background-color: blue;}
    </style>
    <button class="btn-primary">提交</button><!-- 原子化CSS:-->
    <button class="py-2 px-4 text-white rounded bg-blue-500">提交</button>
    
  • 優勢:

    • 無需思考命名:從根本上消除了為class命名的煩惱。
    • 無需切換文件:樣式和結構在一起,開發人員心流不被打斷。
    • 約束與一致性:所有樣式都來自預設的design tokens(在tailwind.config.js文件中定義),保證了整個項目在視覺上的一致性。
    • 性能佳體積小:通過類似PurgeCSS等工具,在構建項目時自動分析掃描,首先它將 CSS 文件中使用的選擇器與內容文件中的選擇器進行匹配,然后它會從 CSS 中刪除未使用的選擇器,從而生成更小的 CSS 文件。

🏡Tailwind CSS簡介

Tailwind CSS 官網 https://tailwindcss.com

在這里插入圖片描述

Tailwind CSS 是一個實用優先的 CSS 框架,與傳統的框架(如 Bootstrap、Foundation)不同,它沒有預定義的組件,而是提供了一系列原子化的 CSS 類,允許你直接在 HTML 中應用樣式。

Tailwind CSS 是一個工具優先的框架,意味著它提供了大量的預定義類,而不是預設的組件,這使得開發者可以構建幾乎任何設計,而不需要編寫 CSS。

簡而言之,只需要知道類名以及對應的屬性和值范圍就OK了!

📊Vue3 項目實例

為了便于項目演示,這里就以常用的 Vite + Vue3 + TypeScript + Tailwind CSS 4 為項目實例,從項目的安裝、初始化配置等流程逐一說明。

1、創建項目

# 構建Vue項目
bun create vue@latest# 輸入項目名,這里以tailwind-css-demo為例
tailwind-css-demo# 進入tailwind-css-demo項目根目錄
cd tailwind-css-demo

2、安裝依賴

# 安裝vite項目依賴
bun install# 安裝Tailwind CSS引擎依賴 和@tailwindcss/vite插件
bun add -D tailwindcss @tailwindcss/vite

3、配置 vite.config.ts

Tailwind CSS 4.x最大的變化就是 “零配置” 優先,無需再配置tailwind.config.js 和 postcss.config.js 文件,所有配置都可以直接在vite.config.ts中完成。

import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools'// 引入@tailwindcss/vite插件,在編譯時自動將class類名對應的樣式提取出來添加到style標簽中
import tailwindcss from '@tailwindcss/vite'// https://vite.dev/config/
export default defineConfig({plugins: [vue(),vueJsx(),vueDevTools(),tailwindcss(),  // 注入tailwindcss插件],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))},},server: {// host: '0.0.0.0',// port: 8080,open: true,cors: true,},
})

4、Tailwind CSS IntelliSense 擴展

在代碼編輯器中,例如:常見的 Visual Studio Code 、Cursor AI Code Editor 、Trae - IDE 等編輯器,在擴展管理中搜索 :Tailwind CSS IntelliSense 關鍵字,直接安裝即可,Tailwind CSS IntelliSense - Visual Studio Marketplace,安裝成功后,在HTML中編寫class原子類時就會自動輔助提示,以便高效的開發。

Tailwind CSS IntelliSense

具體了解更多擴展配置說明https://tailwindcss.com/docs/editor-setup

5、引入tailwindcss

在前端項目工程src目錄中的全局的style.cssmain.css 樣式文件中引入 tailwindcss 核心庫

<!-- https://tailwindcss.com/docs/preflight -->
@import "tailwindcss";

6、使用Tailwind CSS

完成以上步驟以后,就可以在項目任意HTML標簽中的class屬性中添加原子類了,同時還支持響應試設計:smmdlgxsxl等,例如w-lg表示在中等屏幕,以及懸停 偽類、偽元素 、焦點和其他狀態Hover, focus, and other states等等,都可以通過不同的修飾符,快速得到對應狀態樣式。

使用實用程序類(Utility Classes)進行樣式設置

這是Tailwind的基石,每一個類名都代表一個 單一不可再分的CSS樣式屬性,例如,以下是常用的Tailwind CSS 原子類 與 原生CSS樣式屬性 對照情況。

🚀查看更多Tailwind CSS 原子類、🛠?線在嘗試體驗 Tailwind Play

Tailwind CSS 原子類原生CSS樣式屬性
flexgriddisplay: flex;display: grid;
justify-centeritems-centerjustify-content: center;align-items: center;
box-borderbox-sizing: border-box;
float-leftfloat: left;
absoluterelativeposition: absolute;position: relative;
w-pxw-[50px]w-fullwidth: 1px;width: 50px;width: 100%;
text-xsfont-size: 0.75rem(12px) ;
text-<size>/<number>font-size: <size>;
text-centertext-align: center;
text-whitecolor: #fff;
font-boldfont-weight: 700;
bg-whitebackground-color: #000;
bg-red-500background-color: #fb2c36;
shadow-2xsbox-shadow: 0 1px rgb(0 0 0 / 0.05);
text-shadow-xstext-shadow: 0px 1px 1px rgb(0 0 0 / 0.2);
rounded-xsborder-radius: 0.125rem (2px);
cursor-pointercursor: pointer;

顏色(Colors)

Tailwind CSS 定義了一系列符合大眾UI的色階,可根據自己需要選擇使用,當然如果在不滿足你的需求時可以在方括號中,如text-[#000] 來自定義任意色值。

🚀Tailwind CSS 色值體系

<body><div class="text-red-500 bg-blue-500">紅色文字, 藍色背景</div><div class="text-[#000] bg-[#fff]">自定義:黑色文字,白色背景</div>
</body>

在這里插入圖片描述

7、自定義Tailwind CSS原子類

  • @layer 自定義原子類, 如果在Tailwind CSS中,原有的原子類不能滿足需求時,可在全局style.cssmain.css 樣式文件中通過使用@layer{...}來添加自定義的原子類。

    @import "tailwindcss";:root {--color-primary: #409eff;--color-primary-hover: #155dfc;--color-success: #67c23a;--color-success-hover: #4c8b2f;
    }@layer {.item {position: relative;&::after {content: '';display: inline-block;position: relative;top: 1px;width: 18px;height: 12px;background: url('@/assets/img/not.webp') no-repeat center center;background-size: contain !important;}}.item_active {b::after {background: url('@/assets/img/yes.webp') no-repeat center center;}}.type_primary {border: 2px solid var(--color-primary);background-color: var(--color-primary-hover);}.type_success {color: var(--color-success);background-color: var(--color-success-hover);}
    }
    
    <body><ul class="m-5 p-2"><li class="mb-10 item"><span class="p-2 type_primary">primary</span><span class="p-2 type_success">success</span></li></ul>
    </body>
    
  • @theme 主題、變量定義, 在自定義CSS中,自定義設計令牌,如:顏色值,寬高、間距等,可通過@theme{...}來定義(類似原生CSS中的:root{...}),以保證項目整體樣式的一致性。

    @import "tailwindcss";@theme {--mu-primary: #409eff;--mu-primary-hover: #155dfc;--mu-success: #67c23a;--mu-success-hover: #4c8b2f;--mu-warning: #e6a23c;--mu-warning-hover: #c88b2f;--mu-danger: #f56c6c;--mu-danger-hover: #d33f3f;--mu-info: #909399;--mu-info-hover: #7c7c7c;
    }
    
  • @apply 組合現有工具類, 如果有一些原子類經常被反復的使用時,就可以通過@apply{...}將它們組合成一個新的原子類,在使用時,只需使用那個新的原子類名即可!

    @import "tailwindcss";.btn-primary {@apply px-5 py-2 rounded-md text-white bg-blue-500 hover:bg-blue-600 hover:cursor-pointer;
    }
    
    <body><button class="px-5 py-2 rounded-md text-white bg-blue-500 hover:bg-blue-600 hover:cursor-pointer">反復使用時</button><!-- 調用新的組合原子類名 --><button class="btn-primary">組合使用后</button>
    </body>
    
  • @utility 創建動態工具類,這是Tailwind CSS 4 新增的強大功能,它可以創建全新的、可被修飾的、組合式工具類,通過@utility 類名-*{...} 來動態匹配對應的樣式類,其中 * 表示動態變化的樣式類。

    @import "tailwindcss";@theme {--mu-primary: #409eff;--mu-primary-hover: #155dfc;--mu-primary-dark: #fff;--mu-primary-hover-dark: #409eff;--mu-success: #67c23a;--mu-success-hover: #4c8b2f;--mu-success-dark: #fff;--mu-success-hover-dark: #67c23a;--mu-warning: #e6a23c;--mu-warning-hover: #c88b2f;--mu-danger: #f56c6c;--mu-danger-hover: #d33f3f;--mu-info: #909399;--mu-info-hover: #7c7c7c;
    }@utility btn-* {@apply px-5 py-2 rounded-md text-white hover:cursor-pointer;background-color: --value(--mu-*);&:hover {background-color: --value(--mu-*-hover);}<!-- 暗色主題時的顏色 -->@variant dark {@apply text-black;background-color: --value(--mu-*-dark);&:hover {background-color: --value(--mu-*-hover-dark);}}
    }
    
    <body><button class="btn-primary">主要樣式顏色</button><button class="btn-success">成功樣式顏色</button><button class="btn-warning">警告樣式顏色</button>
    </body>
    

8、擴展

除了 Tailwind CSS 功能優先的原子化 CSS 框架原子類以外,其他還有類似的原子化 CSS引擎,如:Uno CSS 即時按需的原子化 CSS 引擎,它不會預先生成任何 CSS,而是根據你在代碼中實際使用的類名,動態地、即時地生成對應的 CSS 規則。

Tailwind CSS:目前依然是一個功能強大、可靠且值得信賴的選擇,它定義了 Utility-First 的最佳實踐。

Uno CSS 將是CSS工具未來的演進方向。它以更智能、更高效的方式解決了同樣的問題,進一步提升了性能和靈活性。

最后、無論是原子化CSS框架,還是原子化CSS引擎,都會給你帶來不樣的開發體驗,都可以去嘗試用一下。

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

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

相關文章

單例模式的智慧:從UVM看控制的藝術

有時候&#xff0c;生活中的很多東西其實只需要一個就夠了&#xff0c;就像一個公司只需要一個CEO&#xff0c;一個王朝只需要一個皇帝。在UVM驗證環境中&#xff0c;也有很多這樣的需求——有些對象&#xff0c;我們希望它在整個仿真過程中只存在一個實例。這就是我們今天要聊…

Hexo - 免費搭建個人博客01 - 安裝軟件工具

導言我的博客&#xff1a;https://q164129345.github.io/ Hexo 作為一個 Node.js 框架&#xff0c;它依賴于 Node.js 運行時環境來執行。 一、安裝Node.js官方網址&#xff1a;https://nodejs.org/zh-cn追求系統穩定性、可靠性以及希望減少維護頻率的用戶來說&#xff0c;LTS版…

【Kubernetes】集群啟動nginx,觀察端口映射,work節點使用kubectl配置

參考b站叩丁狼總結&#xff1a;完整版Kubernetes&#xff08;K8S&#xff09;全套入門微服務實戰項目&#xff0c;帶你一站式深入掌握K8S核心能力 在master節點執行 kubectl create deployment nginx --imagenginxkubectl expose deployment nginx --port80 --typeNodePort1. …

20250704-基于強化學習在云計算環境中的虛擬機資源調度研究

基于強化學習在云計算環境中的虛擬機資源調度研究 隨著云計算規模的持續擴大&#xff0c;數據中心虛擬機資源調度面臨動態負載、異構資源適配及多目標優化等挑戰。傳統啟發式算法在復雜場景下易陷入局部最優&#xff0c;而深度強化學習&#xff08;DRL&#xff09;憑借序貫決策…

day 33打卡

day 21 常見的降維算法 # 先運行之前預處理好的代碼 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings(ignore)# 設置中文字體 plt.rcParams[font.sans-serif] [SimHei] plt.rcParam…

sec(x)積分推導

在MATLAB中繪制 sec?(x)、cos(x) 和 ln?∣sec?(x)tan?(x)∣的函數圖像&#xff0c;需要特別注意 sec?(x) 在 cos?(x)0&#xff08;即 xπ/2kπ&#xff09;處的奇點。&#xff08;deepseek生成代碼&#xff09;% 定義x范圍&#xff08;-2π到2π&#xff09;&#xff0c;…

gpt面試題

vue面試題 &#x1f4a1; 一、響應式系統相關 ?1. Vue 3 的響應式系統是如何實現的&#xff1f;和 Vue 2 有何本質區別&#xff1f; 答案&#xff1a; Vue 3 使用 Proxy 實現響應式&#xff08;位于 vue/reactivity 模塊&#xff09;&#xff0c;替代 Vue 2 的 Object.defineP…

【基于OpenCV的圖像處理】圖像預處理之圖像色彩空間轉換以及圖像灰度化處理

目錄 零、寫在前面的話 一、圖像色彩空間轉換 1.1 RGB顏色空間 1.1.1 RGB顏色空間概念 1.1.2 RGB顏色模型?編輯 1.1.3 關于顏色加法 1.1.4 顏色加權加法 1.2 HSV顏色空間 1.2.1 HSV顏色空間概念 1.2.2 HSV顏色模型 1.2.3 應用意義 1.3 顏色轉換 1.3.1 轉換方法 …

Java TCP 通信詳解:從基礎到實戰,徹底掌握面向連接的網絡編程

作為一名 Java 開發工程師&#xff0c;你一定在實際開發中遇到過需要建立穩定連接、可靠傳輸、有序通信等場景。這時&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09; 通信就成為你必須掌握的重要技能之一。TCP 是一種面向連接、可靠、基于字節流的傳輸協…

HTML5 網頁游戲設計開發——1、HTML基礎

前言 互聯網上的應用程序被稱為Web程序&#xff0c;Web引用用程序是用Web文檔&#xff08;網頁&#xff09;累表現用戶界面&#xff0c;而Web文檔都遵守HTML格式。HTML5是最新的HTML標準。之前的版本HTML4.01于1999年發布&#xff0c;小20年過去了&#xff0c;互聯網已經發聲了…

opencv圖片標注

功能使用python opencv, 將文字信息標注在圖片中同一張圖片中涉及多次標注文字大小為標注框的0.3倍使用多綫程運行import cv2 import threading import numpy as npdef draw_annotations(item, annotations):"""在圖片上繪制標注框和文本annotations: 標注列表…

矩陣SVD分解計算

對于有數學庫的時候,進行矩陣相關計算還是不復雜,但是沒有數學庫就很麻煩,利用算法實現了矩陣奇異值分解。 void decompose(const std::vector<std::vector<double>>& A, std::vector<std::vector<double>>& U, std::vector<dou…

Flutter基礎(前端教程①⑦-Column豎直-Row水平-Warp包裹-Stack堆疊)

MainAxisAlignment 是一個枚舉類&#xff0c;用于控制主軸&#xff08;Main Axis&#xff09; 方向上子組件的排列和對齊方式。MainAxisAlignment 的常用取值及效果&#xff1a;MainAxisAlignment.start子組件沿主軸的起點對齊&#xff08;Row 左對齊&#xff0c;Column 頂部對…

構建智能視頻中樞--多路RTSP轉RTMP推送模塊在軌道交通與工業應用中的技術方案探究

1?? 行業背景與技術需求&#x1f688; 軌道交通行業對視頻監控的深度依賴在現代城市軌道交通系統中&#xff0c;視頻監控已不僅僅是安防的一部分&#xff0c;更是貫穿于運營管理、車輛調度、應急指揮和安全保障的核心技術手段。列車車載監控 ——列車上普遍部署多路高清攝像頭…

【Android Studio 2025 漢化教程】

廢話不多說&#xff0c;直接上干貨。 前提&#xff1a;JeBrains系列2025版已經集成中文插件&#xff0c;用戶不需下載&#xff0c;只要設置下即可&#xff0c;但Android Studio并不內置也不提供漢化插件。需要工具&#xff1a; 1.IDEA&#xff08;其他JeBrains系列也可以&#…

網絡安全初級(前端頁面的編寫分析)

源代碼index.html<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>登錄頁面</title><!--…

RAG項目實戰:LangChain 0.3集成 Milvus 2.5向量數據庫,構建大模型智能應用

項目背景 最近&#xff0c;有時間&#xff0c;想著動手實戰一下&#xff0c;從0到1搭建一個 RAG 系統&#xff0c;也是想通過實戰的方式來更進一步學習 RAG。因此&#xff0c;就定下了以項目實戰為主&#xff0c;書籍為輔的執行方式。&#xff08;書籍是黃佳老師著的《RAG 實戰…

docker build 和compose 學習筆記

目錄 docker build 筆記 1. 路徑解析 2. 關鍵注意事項 2. docker compose up -d 核心區別對比 常見工作流 補充說明 1. 功能區別 2. 協作關系 場景 1&#xff1a;Compose 自動調用 Build 場景 2&#xff1a;先 Build 后 Compose 3. 關鍵區別 4. 為什么需要協作&…

Java學習第六十六部分——分布式系統架構

目錄 一、前言提要 二、核心目標 三、核心組件與技術 1. 服務拆分與通信 2. 服務注冊與發現 3. 配置中心 4. 負載均衡 5. 熔斷、降級與限流 6. API 網關 7. 分布式數據管理 8. 分布式追蹤與監控 9. 容器化與編排 四、典型Java分布式技術棧組合 五、關鍵…

Pycharm的Terminal打開后默認是python環境

Pycharm的Terminal打開后默認是python環境解決方案Pycharm的Terminal打開后默認是python環境&#xff0c;無法執行pip等命令&#xff0c;也沒辦法退出 解決方案 點擊Settings -> Tools -> Terminal 可以看到當前默認打開的是torch19py38環境中的python.exe&#xff08;…