Skip to content

客製化 Tailwind CSS

Tailwind 支援使用著去擴充或是客製化,可以去 tailwind.config.js 或是專案中引入 tailwind 指令的入口檔案中設定

@layer

使用 @layer 語法分別去對 basecomponentsutilities 新增自訂樣式

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

@layer base {
  /*擴充專案的全站樣式*/
}

@layer components {
  /*自組元件*/
}

@layer utilities{
  /*自組樣式*/
}

Theme

如果想更改預設調色盤、間距比例、排版比例或斷點等內容,可以在 tailwind.config.js 檔案裡設定,例如:

js
module.exports = {
  theme: {
    screens: {
      sm: '480px',
      md: '768px',
      lg: '976px',
      xl: '1440px',
    },
    colors: { // 直接覆蓋掉原有主題,預設調色盤將失效
      'blue': '#1fb6ff',
      'purple': '#7e5bef',
      'pink': '#ff49db',
      'orange': '#ff7849',
      'green': '#13ce66',
      'yellow': '#ffc82c',
      'gray-dark': '#273444',
      'gray': '#8492a6',
      'gray-light': '#d3dce6',
    },
    fontFamily: {
      sans: ['Graphik', 'sans-serif'],
      serif: ['Merriweather', 'serif'],
    },
    extend: { // 在原有的主題下進行擴充
      spacing: {
        '128': '32rem',
        '144': '36rem',
      },
      borderRadius: {
        '4xl': '2rem',
      }
    }
  }
}

直接設定的話,它會是直接覆蓋掉預設的主題,如果想要在既有的主題下進行擴充,需要在 extend 下進行設置

colors

js
module.exports = {
  theme: {
    extend: {
      colors: {
        // 使用抽象名稱命名自定義顏色
        primary: '#5c6ac4',
        secondary: '#ecc94b',
        // 物件寫法
        brown: {
          50: '#fdf8f6',
          100: '#f2e8e5',
          200: '#eaddd7',
          300: '#e0cec7',
          400: '#d2bab0',
          500: '#bfa094',
          600: '#a18072',
          700: '#977669',
          800: '#846358',
          900: '#43302b',
        },
      }
    }
  }
}

container

Tailwind 提供了預設的 container 樣式,但每個專案的設計稿 container 的寬度都不太一樣,因此 Tailwind 也支持我們去自訂 container 樣式:

js
module.exports = {
  theme: {
    container: {
      center: true, // 水平置中 (預設的 container 不是置中的要自己寫 mx-auto)
      padding: '2rem', // 水平間距
      padding: { // 水平間距物件寫法
        DEFAULT: '1rem',
        sm: '2rem',
        lg: '4rem',
        xl: '5rem',
        '2xl': '6rem',
      },
    },
  },
}

screens

theme.screens 自訂 breakpoints

js
module.exports = {
  theme: {
    screens: {
      'sm': '640px',
      // => @media (min-width: 640px) { ... }

      'md': '768px',
      // => @media (min-width: 768px) { ... }

      'lg': '1024px',
      // => @media (min-width: 1024px) { ... }

      'xl': '1280px',
      // => @media (min-width: 1280px) { ... }

      '2xl': '1536px',
      // => @media (min-width: 1536px) { ... }
    }
  }
}

除了可以去擴充和修改斷點之外,也可以自訂斷點的名稱:

js
module.exports = {
  theme: {
    screens: {
      'tablet': '640px',
      // => @media (min-width: 640px) { ... }

      'laptop': '1024px',
      // => @media (min-width: 1024px) { ... }

      'desktop': '1280px',
      // => @media (min-width: 1280px) { ... }
    },
  }
}

使用範例:tablet:grid-cols-2 laptop:grid-cols-3 desktop:grid-cols-4

也可以改成 Max-width breakpoints

js
module.exports = {
  theme: {
    screens: {
      '2xl': {'max': '1535px'},
      // => @media (max-width: 1535px) { ... }

      'xl': {'max': '1279px'},
      // => @media (max-width: 1279px) { ... }

      'lg': {'max': '1023px'},
      // => @media (max-width: 1023px) { ... }

      'md': {'max': '767px'},
      // => @media (max-width: 767px) { ... }

      'sm': {'max': '639px'},
      // => @media (max-width: 639px) { ... }
    }
  }
}

font family

theme.fontFamily 自訂專案中會用到的字體

  • 使用自定義名稱的外部字體
js
theme: {
  fontFamily: {
    'display': ['"Fredoka One"', 'cursive'],
  }
}
  • 使用 extend 擴充自定義名稱的外部字體
js
theme: {
  extend: {
    fontFamily: {
  	'display': ['"Fredoka One"', 'cursive'],
    }
  }
}
  • 全域設定
css
@layer base {
  html {
    font-family: 'Fredoka One', 'cursive', system-ui, sans-serif;
  }
}