2023-12-06
如何讓使用 CDN 的 Tailwind CSS 也能在 VS Code 啟用 Tailwind CSS Intellisense 套件
HTML/CSS
TailwindCSS 有自己的顏色主題,Element Plus 也有自己的顏色主題,如果今天是分開使用這兩個工具,那沒啥大問題。
但假設今天,我想要用 TailwindCSS 幫我快速撰寫 CSS,同時公司的設計使用的又是 Element Plus 的主題樣式,那該怎麼快速的整合在一起,方便我開發呢?
我們可以使用 TailwindCSS 的擴充設定,幫我們把 Element Plus 的變數全部加到 TailwindCSS 裡。
先用開發者工具看一下 Element Plus 用到的 CSS 變數,我目前用的是 dark 主題,所以會多一個 dark
的變數,如果你用的不是 dark 主題,可以自行修改迴圈的函式,移除產生 dark CSS 變數的語法。
需求是:希望可以把 Element Plus 的變數整合至 TailwindCSS 裡
▼ 打開 tailwind.config.js
,跑個迴圈把變數設好:
const palettes = { base: ['primary', 'success', 'warning', 'danger', 'error', 'info'] } const baseColor = (group) => { const colors = {} group.forEach(name => { colors[`el-${name}`] = `var(--el-color-${name})` colors[`el-${name}-light-3`] = `var(--el-color-${name}-light-3)` colors[`el-${name}-light-5`] = `var(--el-color-${name}-light-5)` colors[`el-${name}-light-7`] = `var(--el-color-${name}-light-7)` colors[`el-${name}-light-8`] = `var(--el-color-${name}-light-8)` colors[`el-${name}-light-9`] = `var(--el-color-${name}-light-9)` colors[`el-${name}-dark-2`] = `var(--el-color-${name}-dark-2)` }) return colors } const getColors = (palettes) => { const colors = {} for (const key in palettes) { const group = palettes[key] if (key === 'base') { Object.assign(colors, baseColor(group)) } } console.log('colors', colors) return colors }
▼ 接著同個檔案,在 TailwindCSS 的 extend
呼叫該函式:
module.exports = { theme: { extend: { colors: getColors(palettes) // 這一行 } } }
▼ 可以透過編譯時輸出的 console.log
查看資料
接著就像平常使用 TailwindCSS 一樣,在 HTML 裡面使用這個 class。
▼ 舉例來說,假設我想用 Element Plus 的變數 var(--el-color-primary-light-5)
當作文字顏色,在 HTML 可以這樣寫
<div class="text-el-primary-light-5">文字顏色</div>
前面的 text-
一樣是 TailwindCSS 的寫法,而後段的 el-primary-light-5
,就會對應 Element Plus 的變數 var(--el-color-primary-light-5)
,顯示對應的顏色
如果你的編輯器 (以 VS Code 為例) 有安裝 Tailwind CSS IntelliSense 擴充套件,在輸入 class 時,應該會跳出對應的 CSS 語法,可以透過這方法查詢有哪些可用的 class
▼ 如果想要用 var(--el-color-primary-light-3)
當作背景顏色,可以這樣寫:
<div class="bg-el-primary-light-3">背景顏色</div>
除了 Element Plus 的基本六種顏色樣式外,還有一些灰階的元件設定,因為我暫時找不到共通邏輯,沒辦法用迴圈去產資料,所以只好一個一個補上 😂
如果有需要的朋友,可以直接複製我的程式碼拿去用,假設有方便更簡潔的產出方法,也歡迎告訴我唷!
▼ 這些 CSS 變數,我也想丟到 TailwindCSS 處理
▼ 更新 tailwind.config.js
// 1. 新增 componentColor function const componentColor = () => { const colors = {} colors['--el-box-shadow'] = 'var(--el-box-shadow)' colors['--el-box-shadow-light'] = 'var(--el-box-shadow-light)' colors['--el-box-shadow-lighter'] = 'var(--el-box-shadow-lighter)' colors['--el-box-shadow-dark'] = 'var(--el-box-shadow-dark)' colors['--el-bg-color-page'] = 'var(--el-bg-color-page)' colors['--el-bg-color'] = 'var(--el-bg-color)' colors['--el-bg-color-overlay'] = 'var(--el-bg-color-overlay)' colors['--el-text-color-primary'] = 'var(--el-text-color-primary)' colors['--el-text-color-regular'] = 'var(--el-text-color-regular)' colors['--el-text-color-secondary'] = 'var(--el-text-color-secondary)' colors['--el-text-color-placeholder'] = 'var(--el-text-color-placeholder)' colors['--el-text-color-disabled'] = 'var(--el-text-color-disabled)' colors['--el-border-color-darker'] = 'var(--el-border-color-darker)' colors['--el-border-color-dark'] = 'var(--el-border-color-dark)' colors['--el-border-color'] = 'var(--el-border-color)' colors['--el-border-color-light'] = 'var(--el-border-color-light)' colors['--el-border-color-lighter'] = 'var(--el-border-color-lighter)' colors['--el-border-color-extra-light'] = 'var(--el-border-color-extra-light)' colors['--el-fill-color-darker'] = 'var(--el-fill-color-darker)' colors['--el-fill-color-dark'] = 'var(--el-fill-color-dark)' colors['--el-fill-color'] = 'var(--el-fill-color)' colors['--el-fill-color-light'] = 'var(--el-fill-color-light)' colors['--el-fill-color-lighter'] = 'var(--el-fill-color-lighter)' colors['--el-fill-color-extra-light'] = 'var(--el-fill-color-extra-light)' colors['--el-fill-color-blank'] = 'var(--el-fill-color-blank)' colors['--el-mask-color'] = 'var(--el-mask-color)' colors['--el-mask-color-extra-light'] = 'var(--el-mask-color-extra-light)' return colors } const getColors = (palettes) => { const colors = {} for (const key in palettes) { const group = palettes[key] if (key === 'base') { Object.assign(colors, baseColor(group)) } } Object.assign(colors, componentColor()) // 2. 在 getColors() 增加這行 console.log('colors', colors) return colors }
以上,就把 Element Plus 的所有 CSS 變數放到 TailwindCSS 裡了