Tailwind 是一款 CSS 框架與學習 Astro 並無絕對關係,但基於它的社群熱門程度與可以快速靈活導入樣式的特性,何不來嘗試運用看看呢?嘗試導入 Tailwind 並且運用在建構元件樣式上吧。
在 Astro 中安裝整合非常的簡單,只需要在專案終端中輸入 npx astro add tailwind
安裝便會執行,都完成之後便可以開始在整個專案中使用 Tailwind:
Astro 將會執行以下指令:
如果你跳過這個步驟隨時可以回來
╭─────────────────────────────────────────────────╮
│ yarn add @astrojs/tailwind tailwindcss@^3.0.24 │
╰─────────────────────────────────────────────────╯
繼續? » (Y/n)
Astro 將會創建最基礎的 ./tailwind.config.cjs 檔案.
繼續? » (Y/n)
Astro 將會對設定檔作以下的更動:
╭ astro.config.mjs ─────────────────────────────╮
│ import { defineConfig } from 'astro/config'; │
│ │
│ import tailwind from "@astrojs/tailwind"; │
│ │
│ // https://astro.build/config │
│ export default defineConfig({ │
│ integrations: [tailwind()] │
│ }); │
╰───────────────────────────────────────────────╯
繼續? » (Y/n)
安裝完成後可以透過專案根部自動建立的 tailwind.config.cjs
來添加設定或新增套件,以下是我通常會更動的設定:
base.css
檔案@tailwind base;
@tailwind components;
@tailwind utilities;
預設 Tailwind 會自動將以上內容的 CSS 檔案給注入到整個專案之中,自行創建一個 base.css
放在 src/style
資料夾中,這樣要添加額外的全域 CSS 或使用 @layer 指令,或是在某些頁面不想預設引入這隻檔案的問題都能解決。具體會需要把 astro.config.mjs
中 applyBaseStyles
屬性改為 false
,再從元件中增添自己的 base.css
。
integrations: [
tailwind({
applyBaseStyles: false,
}),
],
頭痛的是,有時候要寫非常客製化的元件使用 Scoped CSS,但又要使用到 Tailwind 中定義的變數怎麼辦?沒關係,它們兩個依舊可以相處得很好!只需要將網站樣式的 CSS 變數定義在 :root
上,這樣不管何處的元件都能存取到該變數而非只局限於 Tailwind 上,Tailwind 設定檔也可以設定引用 CSS 變數。
最後我們再用 Tailwind 的方式重構上次寫的按鈕,更換一下寫法也能得到同樣的結果,以下是我的方式:
interface Props {
href?: string;
theme?: keyof typeof themeClassList;
size?: keyof typeof sizeClassList;
}
const { href, theme, size, ...rest } = Astro.props;
const Element = href ? 'a' : 'button';
// 定義主題種類
const themeClassList = {
solid: '',
outline: '',
secondary: '',
link: '',
};
// 定義尺寸種類
const sizeClassList = {
md: '',
lg: '',
block: '',
};
// 決定當前主題與尺寸
const themeClass = theme ? themeClassList[theme] : themeClassList['solid'];
const sizeClass = size ? sizeClassList[size] : sizeClassList['md'];
// 預設主題與尺寸
const defaultButtonStyle = '';
---
<Element href={href} class:list={[defaultButtonStyle, themeClass, sizeClass]} {...rest}>
<slot />
</Element>
<button>Click Me</button>
<a href="/" size="block" theme="outline">Click Me</button>
這個章節更偏向我在 Astro 中使用 Tailwind 的歷程心得,如果你沒有打算導入 Tailwind 可以直接前往下一章節即可。透過兩個章節都在練習寫按鈕,現在推薦你嘗試撰寫各式各樣的元件熟悉使用 Astro,對你來說都不會是問題了。
(目前 iT 邦不支援 Astro 語法的高光😅,因此歡迎到我的部落格閱讀本系列相關文章,正同步更新中!)