Tailwind CSS自定義用法

文章目錄

  • 前言
    • ? 一、集成 Tailwind CSS 到 React 項目
      • 1. 安裝依賴
      • 2. 配置 `tailwind.config.js`
      • 3. 創建全局樣式文件(如 `src/index.css`)
        • @tailwind base;
        • @tailwind components;
        • @tailwind utilities;
      • 4. 在 `main.tsx` 或 `main.jsx` 中引入樣式
    • ? 二、自定義樣式方式匯總
      • 1. `theme.extend` 自定義主題(推薦)
      • 2. 添加自定義組件類(@layer)
      • 3. 插件方式自定義(如 `typography`、`forms`)
        • 擴展:
    • ? 一、什么是 Tailwind CSS 插件?
    • ? 二、創建自定義插件的步驟
      • 🧱 插件結構示意:
    • ? 三、React 項目中使用該插件
    • ? 四、高階用法:插件封裝為 NPM 包(組件庫開發)
    • ? 五、自定義插件使用場景總結
    • ? 是否支持 TypeScript?
      • 4. 創建響應式自定義類
      • 5. 使用 `cva`(class-variance-authority)封裝組件樣式(推薦大項目)
    • ? 三、Tailwind CSS 常見優化建議


前言

在 React 項目中使用 Tailwind CSS 并進行自定義樣式配置,主要包括以下幾種方式和步驟:


? 一、集成 Tailwind CSS 到 React 項目

以 Vite 項目為例,集成步驟如下:

1. 安裝依賴

npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

這會生成:

  • tailwind.config.js
  • postcss.config.js

2. 配置 tailwind.config.js

添加你的源碼路徑以啟用 JIT 模式下的 tree-shaking

/** @type {import('tailwindcss').Config} */
export default {content: ["./index.html","./src/**/*.{js,ts,jsx,tsx}",],theme: {extend: {}, // 用于擴展自定義樣式},plugins: [],
}

3. 創建全局樣式文件(如 src/index.css

@tailwind base;
@tailwind components;
@tailwind utilities;

這是 Tailwind CSS 的核心指令,用于在你的 CSS 文件中引入 Tailwind 的三大層級樣式:

@tailwind base;

引入 Tailwind 的基礎樣式(reset/normalize、全局樣式、字體、表單等)。
作用類似于 CSS Reset,保證不同瀏覽器下的樣式一致性,并設置一些全局的基礎樣式。

@tailwind components;

引入 Tailwind 的組件類(如 container、按鈕等可復用的組件樣式)。
你也可以在這里通過 @layer components { … } 自定義自己的組件樣式。

@tailwind utilities;

引入 Tailwind 的工具類(如 p-4、text-center、bg-blue-500 等)。
這些是你在 JSX/HTML 里最常用的 Tailwind 類名。

4. 在 main.tsxmain.jsx 中引入樣式

import './index.css'

? 二、自定義樣式方式匯總

1. theme.extend 自定義主題(推薦)

位置tailwind.config.js

theme: {extend: {colors: {primary: '#1e40af',danger: '#e11d48',},spacing: {'72': '18rem','84': '21rem',},fontFamily: {inter: ['Inter', 'sans-serif'],}},
}

然后你可以在組件中使用:

<div className="bg-primary text-white p-4">Hello</div>

2. 添加自定義組件類(@layer)

位置index.cssglobal.css

@layer components {.btn-primary {@apply bg-blue-600 text-white px-4 py-2 rounded;}.card {@apply shadow-md rounded-lg p-6 bg-white;}
}

使用方式:

<button className="btn-primary">Click</button>

3. 插件方式自定義(如 typographyforms

npm install @tailwindcss/forms @tailwindcss/typography
plugins: [require('@tailwindcss/forms'),require('@tailwindcss/typography'),
],
擴展:

Tailwind CSS 支持通過自定義插件(Plugin)來擴展樣式系統,這是構建 組件庫設計系統復用工具類 的關鍵手段之一。下面將從 原理、語法、示例和在 React 項目中的集成步驟,手把手講清楚 Tailwind CSS 自定義插件的用法。


? 一、什么是 Tailwind CSS 插件?

Tailwind 插件允許你通過 API 注冊新的:

  • 工具類(utilities)
  • 組件類(components)
  • 自定義變體(variants)
  • 基礎樣式(base)

? 二、創建自定義插件的步驟

🧱 插件結構示意:

// tailwind.config.js
const plugin = require('tailwindcss/plugin')module.exports = {content: [...],theme: {extend: {},},plugins: [plugin(function({ addUtilities, addComponents, addBase, matchUtilities, theme }) {// 1. 添加基礎樣式addBase({'h1': { fontSize: theme('fontSize.2xl') },'h2': { fontSize: theme('fontSize.xl') },})// 2. 添加組件類addComponents({'.btn': {padding: '0.5rem 1rem',borderRadius: '0.25rem',fontWeight: '600',},'.btn-primary': {backgroundColor: theme('colors.blue.500'),color: theme('colors.white'),},})// 3. 添加工具類addUtilities({'.text-shadow': {textShadow: '2px 2px #000000',},'.text-shadow-md': {textShadow: '4px 4px #000000',},})// 4. 響應式匹配工具類matchUtilities({'rotate-y': (value) => ({transform: `rotateY(${value})`,}),},{ values: theme('rotate') })})],
}

? 三、React 項目中使用該插件

只需將上面的 tailwind.config.js 插件注冊完成后,像平常一樣使用樣式類:

<button className="btn btn-primary text-shadow-md">Click Me</button>

無需其他導入!Tailwind 會自動根據你 content 中匹配到的類,生成 CSS。


? 四、高階用法:插件封裝為 NPM 包(組件庫開發)

你可以將插件封裝成獨立模塊:

// my-button-plugin.js
const plugin = require('tailwindcss/plugin')module.exports = plugin(({ addComponents, theme }) => {addComponents({'.btn-danger': {backgroundColor: theme('colors.red.500'),color: '#fff',padding: '0.5rem 1rem',borderRadius: '9999px',},})
})

然后在主配置中使用:

const myButtonPlugin = require('./my-button-plugin')module.exports = {plugins: [myButtonPlugin],
}

? 五、自定義插件使用場景總結

場景使用方式
提供通用按鈕/卡片/警告樣式addComponents
增強工具類(如旋轉、投影)addUtilities
改變基礎標簽默認樣式addBase
動態類支持(如 .rotate-y-45matchUtilities

? 是否支持 TypeScript?

Tailwind 插件本質是 JS 函數,也可以使用 .ts 文件編寫,只要你在 tailwind.config.ts 中用 defineConfig() 包裹即可:

import plugin from 'tailwindcss/plugin'
import { defineConfig } from 'tailwindcss/helpers'export default defineConfig({plugins: [plugin(({ addUtilities }) => {addUtilities({'.skew-10deg': {transform: 'skewY(-10deg)'}})})]
})

4. 創建響應式自定義類

extend: {screens: {'xs': '480px',},maxWidth: {'8xl': '90rem',},
}

5. 使用 cva(class-variance-authority)封裝組件樣式(推薦大項目)

import { cva } from 'class-variance-authority'const button = cva('px-4 py-2 rounded', {variants: {intent: {primary: 'bg-blue-600 text-white',secondary: 'bg-gray-600 text-white',},size: {sm: 'text-sm',lg: 'text-lg',},},defaultVariants: {intent: 'primary',size: 'sm',},
})

? 三、Tailwind CSS 常見優化建議

  • ? 啟用 JIT 模式(默認)
  • ? 用 @apply 抽離公共類
  • ? 使用 cva 管理組件變體
  • ? 移除未使用的類:purge(舊)→ content(新)
  • ? 使用 Tailwind plugin 編寫通用組件或設計系統

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

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

相關文章

linux面試常考

常用指令 常見題

Spring Boot 2.2.6調用DeepSeek API并通過SSE將流式響應推送給前端的完整實現

1. 添加依賴 (pom.xml) <dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- SSE 支持 --><depe…

LM1117-ADJ 簡單介紹

LM1117-ADJ是一款可調輸出電壓的低壓差線性穩壓器&#xff08;LDO&#xff09;&#xff0c;具有以下關鍵特性和應用要點&#xff1a; 核心特性 可調輸出電壓 通過外部分壓電阻&#xff08;R1和R2&#xff09;調節輸出電壓&#xff0c;范圍為1.25V至13.8V。輸出電壓公式&#…

知名流體控制解決方案供應商“永盛科技”與商派ShopeX達成B2B商城項目合作

2025年6月&#xff0c;全球知名的工業流體控制解決方案服務商——永盛科技&#xff08;股票&#xff1a;874497&#xff09;&#xff0c;與商派ShopeX正式達成B2B商城項目合作。 此次合作將共同推動永盛科技B2B業務的數字化變革&#xff0c;提高B2B業務運營效率&#xff0c;同…

jvm簡單八股

1、jvm中內存分為那幾個區域&#xff0c;1.7和1.8 jvm 中主要有 程序計數器、虛擬機棧、本地方法棧、堆、方法區、直接內存。 線程私有的有&#xff1a;程序計數器、虛擬機棧、本地方法棧 線程共有的有&#xff1a;堆、方法區、直接內存 堆空間又可以分為&#xff1a;新時代、…

contOS7安裝docker命令及yum源更換為國內源

docker介紹 Docker是一個開源的容器化平臺,通過將應用程序及其依賴打包成輕量級、可移植的容器,確保開發、測試和部署環境的一致性。Docker的核心概念包括容器、鏡像、Dockerfile和鏡像倉庫。容器是輕量級的虛擬化技術,共享宿主機內核但保持獨立運行環境,啟動快且資源占用少…

SpringBoot集成Redis-6.x版本流程

SpringBoot集成Redis是我們常見的功能&#xff0c;今天我們分享一下&#xff1a; 前言&#xff1a; 1、pom包引用 <!-- Redis Starter (默認使用 Lettuce) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo…

zookeeper Curator(3):Watch事件監聽

文章目錄 Curator API 常用操作 Watch事件監聽NodeCachePathChildrenCacheTreeCache 本章代碼已分享至Gitee: https://gitee.com/lengcz/curator01 Curator API 常用操作 Watch事件監聽 zookeeper 允許用戶在指定節點上注冊一些Watcher &#xff0c;并且在一些特定事件觸發的時…

多模態融合相機L3CAM

多模態融合相機L3CAM L3CAM是Beamagine公司推出的多模態傳感器融合技術&#xff0c;結合了激光雷達&#xff08;LiDAR&#xff09;和可見光攝像頭&#xff0c;旨在為自動駕駛、工業機器人和其他需要精確環境感知的應用場景提供高效、安全的解決方案。 L3CAM技術參數 L3CAM結合…

結構化思維

前言 洞悉分析方法論 系統解決管理問題 1 構建問題分析框架 1.1 摘要 &#xff08;1&#xff09;何謂問題分析和解決&#xff1f; &#xff08;2&#xff09;問題分析和解決的基本原則 1.2 什么是問題分析與決策&#xff1f; 1.3 問題解決者需要具備的四種能力 &#xf…

什么是數字簽名(ECDSA)?

數字簽名是區塊鏈、數字身份認證和安全通信的核心技術之一&#xff0c;ECDSA&#xff08;橢圓曲線數字簽名算法&#xff09;是目前最常見、最主流的數字簽名算法之一&#xff0c;尤其在區塊鏈系統&#xff08;如比特幣、以太坊、EOS&#xff09;中廣泛應用。 一、什么是數字簽名…

深入剖析AI大模型:Dify的介紹

今天介紹的內容&#xff0c;跟大模型開發還是息息相關的。俗話說&#xff1a;有人的地方就是江湖&#xff01;對于我們技術其實也一樣&#xff0c;一個新技術的出現&#xff0c;自然會衍生出相應的生態圈。今天的文字只是介紹&#xff0c;以后會有專門的實操篇&#xff0c;主要…

Open VSX Registry關鍵漏洞使攻擊者可完全控制Visual Studio Code擴展市場

網絡安全研究人員近日披露了 Open VSX Registry&#xff08;"open-vsx[.]org"&#xff09;中存在的一個關鍵漏洞。若被成功利用&#xff0c;攻擊者可能完全控制整個 Visual Studio Code 擴展市場&#xff0c;造成嚴重的供應鏈風險。 漏洞詳情與潛在影響 Koi Securi…

Python從入門到高手9.1節-Python中的字典類型

目錄 9.1.1 理解字典類型 9.1.2 字典的類型名 9.1.3 字典的定義 9.1.4 字典的主要性質 9.1.5 好好學習&#xff0c;天天向上 9.1.1 理解字典類型 在日常生活中&#xff0c;我們常常會接觸到“字典”這種數據類型&#xff0c;例如一本書籍的目錄結構&#xff0c;在目錄結構…

封禁UDP端口提高防御能力分析

封禁不必要的 UDP 端口 確實可以在一定程度上提高系統的防御力&#xff0c;但這并不是一個絕對的“好”或“壞”的問題&#xff0c;需要根據具體情況來判斷。以下是詳細分析&#xff1a; ? 封禁 UDP 端口能提高防御力的原因 (優點) 減少攻擊面&#xff1a; 服務暴露&#xff…

阿里云-arms監控

監控java應用 若是容器集群環境&#xff0c;則選擇容器服務環境 手動安裝方式&#xff0c;是手動把 agent的jar包放到 ecs服務器&#xff0c;然后運行個人的spring boot服務時&#xff0c;加上一些參數&#xff0c;將agent也啟動運行 手動集成-添加agent 監控的是ecs中的java應…

c語言 char *str = ““ 和 char *str = NULL 以及 char str[] = {} 區別

目錄 前言char *str "" 和 char *str NULL 區別char *str NULL 和 char str[] {} 區別char *str "" 和 char str[] {} 區別char *str "" 和 const char *str "" 區別 前言 C語言指針的使用非常常見且易出錯&#xff0c;這里對…

小程序入門: tab bar 實現多頁面快速切換效果

在小程序開發中&#xff0c;tab bar 是實現多頁面快速切換的關鍵組件&#xff0c;能極大提升用戶體驗。上一篇我們完成了基礎配置&#xff0c;今天深入探索&#xff0c;打造更豐富實用的 tab bar 效果。 實現目標 這次要在小程序底部創建包含 “首頁”“消息”“聯系我們” 三…

Python 數據分析:numpy,抽提,多維切片索引

目錄 1 示例代碼2 歡迎糾錯3 免費爬蟲------以下關于 Markdown 編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants 創建一個…

【向上教育】結構化面試概述.pdf

目 錄 第一章 面試須知—面試形式 .......................................................................................................... 1 一、結構化面試 .................................................................................................…