# [Tailwind] Configuration 配置 ###### tags: `Tailwind` * 預設會在專案的根目錄使用 `tailwind.config.js` 做為配置檔 * 初始化:`npx tailwindcss init` * TypeScript:`npx tailwindcss init --ts` * 改名: * 初時化時透過指令自訂檔名。例:`npx tailwindcss init custom-name.js` * 指定自訂檔案路徑 * 使用 Tailwind CLI 時:`npx tailwindcss -c ./custom-name.js -i input.css -o output.css` * 作為 PostCSS plugin 時: ```javascript // postcss.config.js module.exports = { plugins: { tailwindcss: { config: './custom-name.js' }, }, }; ``` * 透過 `@config` 指定 ```css @config "./custom-name.js"; @tailwind base; @tailwind components; @tailwind utilities; ``` * 只需設定要變更的內容即可,其餘會使用預設配置(官方建議盡可能減少設定內容) * 可設定項目 * [content](#content):配置所有 HTML templates、JS components 以及有使用到 Tailwind class 的任何檔案的路徑 * theme:定義與網站視覺設計相關的內容,例:顏色、字體、框線、圓角、斷點等 * 寫在第一層的內容會直接覆寫預設值,[可設定的 key 詳見官網](https://tailwindcss.com/docs/theme#configuration-reference) * 若想保留預設值,但又要添加新的值時,將新值寫在 `theme.extend` * colors:設定顏色 * 預設有 22 種色系: * 灰黑色系:Slate、Gray、Zinc、Neutral、Stone * 橘黃色系:Orange、Amber、Yellow * 綠色系:Lime、Green、Emerald、Teal * 藍紫色系:Cyan、Sky、Blue、Indigo、Violet、Purple、Fuchsia * 紅色系:Red、Pink、Rose * 每種色系的後綴由淺至深有:50、100、200、300、400、500、600、700、800、900、950 * [screens](#screens):設定響應式斷點 * [spacing](#spacing):設定間距和尺寸 * plugins:註冊外掛程式 * presets:使用指定的預設配置,而不是使用 Tailwind 的預設配置 * prefix:使用時 class 名稱都需加上指定的前綴,不包含自訂的 class * 例:設定 `prefix: 'tw-'` 後,需寫 `class="tw-text-lg md:tw-text-xl -tw-mt-8"` * important:是否要將 Tailwind 的 utilities 都加上 `!important`,包含透過 `@layer utilities` 自訂的 utilities * 若只想針對特定 utility,可以在名稱前加上 `!` * 例:`<p class="!text-blue-500 text-red-500">文字顏色為藍色</p>` * separator:設定使用哪個字元來分隔修飾符,預設是 `:` * 使用情境:使用的模板語言(例如 Pug)不支援 class 名稱中有 `:` 時 * [corePlugins](#corePlugins):禁止 Tailwind 預設生成指定的 class 或只生成指定的 class * safelist:確保 Tailwind 生成未出現在原始碼內的 class 清單 * blocklist:忽略出現在原始碼內的 class 清單 ## content * 配置所有 HTML templates、JS components 以及有使用到 Tailwind class 的任何檔案的路徑 * 路徑是相對於專案根目錄,不是 Tailwind 配置檔 * 若要相對於配置檔,在 `content` 內設定 `relative` 和 `files` ```javascript module.exports = { content: { relative: true, files: [ './pages/**/*.{html,js}', './components/**/*.{html,js}', ], }, }; ``` * `**` 匹配零個或多個資料夾 * `*` 匹配除了斜線和隱藏檔外的任何內容 * 在 `{}` 內使用 `,` 分隔選項 * 不要包含 CSS 檔 * 不要動態建立 class 名稱 * 例:`<div class="text-{{ error ? 'red' : 'green' }}-600"></div>`,如有需要,應使用完整的名稱 `<div class="{{ error ? 'text-red-600' : 'text-green-600' }}"></div>` ```javascript export default { content: [ './index.html', './src/**/*.{vue,js,ts,jsx,tsx}', ], }; ``` ## screens * 設定響應式斷點 ### 預設值 | Modifier | CSS | | -- | ------------------------- | | sm | @media (min-width: 640px) | | md | @media (min-width: 768px) | | lg | @media (min-width: 1024px) | | xl | @media (min-width: 1280px) | | 2xl | @media (min-width: 1536px) | | min-[…] | @media (min-width: …) | | max-sm | @media not all and (min-width: 640px) | | max-md | @media not all and (min-width: 768px) | | max-lg | @media not all and (min-width: 1024px) | | max-xl | @media not all and (min-width: 1280px) | | max-2xl | @media not all and (min-width: 1536px) | | max-[…] | @media (max-width: …) | ### 範例:改成 Bootstrap 5 的斷點 ```javascript module.exports = { theme: { // 設定後只能用 sm、md、lg、xl、xxl,原本預設的 2xl 會被刪除無法使用 screens: { 'sm': '576px', 'md': '768px', 'lg': '1024px', 'xl': '1200px', 'xxl': '1400px', }, }, }; ``` ## spacing * 預設會被 `padding`、`margin`、`width`、`minWidth`、`maxWidth`、`height`、`minHeight`、`maxHeight`、`gap`、`inset`、`space`、`translate`、`scrollMargin`、`scrollPadding`、`flex-basis`、`textIndent` core plugins 繼承 | Name | Size | Pixels | | ---- | ---- | ------ | | 0 | 0px | 0px | | px | 1px | 1px | | 0.5 | 0.125rem | 2px | | 1 | 0.25rem | 4px | | 1.5 | 0.375rem | 6px | | 2 | 0.5rem | 8px | | 2.5 | 0.625rem | 10px | | 3 | 0.75rem | 12px | | 3.5 | 0.875rem | 14px | | 4 | 1rem | 16px | | 5 | 1.25rem | 20px | | 6 | 1.5rem | 24px | | 7 | 1.75rem | 28px | | 8 | 2rem | 32px | | 9 | 2.25rem | 36px | | 10 | 2.5rem | 40px | | 11 | 2.75rem | 44px | | 12 | 3rem | 48px | | 14 | 3.5rem | 56px | | 16 | 4rem | 64px | | 20 | 5rem | 80px | | 24 | 6rem | 96px | | 28 | 7rem | 112px | | 32 | 8rem | 128px | | 36 | 9rem | 144px | | 40 | 10rem | 160px | | 44 | 11rem | 176px | | 48 | 12rem | 192px | | 52 | 13rem | 208px | | 56 | 14rem | 224px | | 60 | 15rem | 240px | | 64 | 16rem | 256px | | 72 | 18rem | 288px | | 80 | 20rem | 320px | | 96 | 24rem | 384px | ## corePlugins * 禁止 Tailwind 預設生成指定的 class 或只生成指定的 class * [可選清單詳見官網](https://tailwindcss.com/docs/configuration#core-plugins) ### 禁用指定的 class ```javascript module.exports = { corePlugins: { float: false, objectFit: false, objectPosition: false, }, }; ``` ### 禁用所有 class ```javascript module.exports = { corePlugins: [], }; ``` ### 只生成指定的 class ```javascript module.exports = { corePlugins: [ 'margin', 'padding', 'backgroundColor', ], }; ``` ## 參考資料 * [Tailwind CSS v3 官方文件:Configuration](https://tailwindcss.com/docs/configuration "Configuration - Tailwind CSS") * [Tailwind CSS v3 官方文件:Content](https://tailwindcss.com/docs/content-configuration "Content Configuration - Tailwind CSS") * [Tailwind CSS v3 官方文件:Theme](https://tailwindcss.com/docs/theme "Theme Configuration - Tailwind CSS") * [Tailwind CSS v3 官方文件:Screens](https://tailwindcss.com/docs/screens "Customizing Screens - Tailwind CSS") * [Tailwind CSS v3 官方文件:Colors](https://tailwindcss.com/docs/customizing-colors "Customizing Colors - Tailwind CSS") * [Tailwind CSS v3 官方文件:Spacing](https://tailwindcss.com/docs/customizing-spacing "Customizing Spacing - Tailwind CSS") * [Tailwind CSS v3 官方文件:Plugins](https://tailwindcss.com/docs/plugins "Plugins - Tailwind CSS") * [Tailwind CSS v3 官方文件:Presets](https://tailwindcss.com/docs/presets "Presets - Tailwind CSS") --- :::info 建立日期:2024-03-16 更新日期:2024-03-21 :::