0Pricing
Tailwind CSS Academy · 강의

테마 확장과 재정의 비교

기본값과 함께 새 값을 추가할 때는 theme.extend를 사용하고, 기본값을 완전히 교체할 때는 theme을 사용하는 방법을 실제 예제로 배웁니다.

테마 확장과 재정의 비교은(는) CoddyKit의 무료 Tailwind CSS Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Tailwind CSS Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Tailwind CSS Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

Two Ways to Customize the Theme

When you want to add custom values to Tailwind's design system, you have two choices: extend the defaults or override them. Extending adds your values alongside Tailwind's built-in values. Overriding replaces Tailwind's built-in values with only what you provide. The wrong choice can silently remove utilities you depend on, so understanding the distinction is critical before modifying tailwind.config.js.

What Extending Means

When you place values inside theme.extend, Tailwind merges them with the corresponding default values. The result is the full default set plus your additions. For example, adding a custom color inside theme.extend.colors gives you all of Tailwind's built-in colors (red, blue, green, etc.) AND your custom color. Nothing is lost.

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        // ADDED alongside default colors like red, blue, gray...
        brand: {
          light: '#818cf8',
          DEFAULT: '#6366f1',
          dark: '#4f46e5',
        },
      },
    },
  },
};

// Now you can use BOTH:
// bg-brand-DEFAULT, bg-brand-light, bg-brand-dark (custom)
// bg-blue-500, bg-red-400, bg-gray-100 (still available!)

What Overriding Means

When you place values directly inside theme (outside extend), Tailwind replaces the entire default set with your values. This means all of Tailwind's built-in colors, spacings, font sizes, or whatever category you overrode are gone — only your values remain. This is intentional in some cases but destructive if done accidentally.

// tailwind.config.js
module.exports = {
  theme: {
    colors: {
      // REPLACES all default colors! bg-blue-500 and bg-red-400 no longer exist.
      brand: '#6366f1',
      danger: '#ef4444',
      success: '#22c55e',
    },
  },
};

// Only these work now:
// bg-brand, text-danger, border-success
// bg-blue-500 is GONE!

When to Use Override

Override is appropriate when you want a minimal, fully custom design system with no Tailwind defaults leaking through. Design agencies building brand-specific sites sometimes override the entire color palette to ensure only brand colors are usable. Override is also useful for font families, where you might want only your chosen fonts available, not the built-in font stacks.

// Intentional override: only use brand fonts
module.exports = {
  theme: {
    fontFamily: {
      sans: ['Inter', 'system-ui', 'sans-serif'],
      mono: ['Fira Code', 'monospace'],
    },
    // No extend: we intentionally remove 'serif' font family
  },
};

Extending Colors with Custom Shades

The most common use of theme.extend is adding custom colors with a full shade scale. Define your brand color as an object with shade numbers from 50 to 950, just like Tailwind's built-in palette. This makes your custom color usable with all Tailwind color utilities — text-brand-500, bg-brand-100, border-brand-800 — and plays nicely with the opacity modifier syntax.

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        brand: {
          50:  '#eef2ff',
          100: '#e0e7ff',
          200: '#c7d2fe',
          300: '#a5b4fc',
          400: '#818cf8',
          500: '#6366f1',
          600: '#4f46e5',
          700: '#4338ca',
          800: '#3730a3',
          900: '#312e81',
          950: '#1e1b4b',
        },
      },
    },
  },
};

Extending Spacing

Tailwind's default spacing scale goes up to 96 (24rem). If your designs use larger values, add them in theme.extend.spacing. These new spacing values automatically become available across all spacing-related utilities: m-*, p-*, w-*, h-*, gap-*, inset-*, and more — without any extra configuration.

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      spacing: {
        '128': '32rem',   // w-128, h-128, m-128, p-128...
        '144': '36rem',
        '160': '40rem',
        '4.5': '1.125rem', // fine-grained values
      },
    },
  },
};

Extending Font Sizes

Font size utilities in Tailwind are defined as tuples — a font size AND a corresponding line height. When you add a custom font size in theme.extend.fontSize, you can provide just the size (and Tailwind assigns a default line height) or an array with both size and line height explicitly. This keeps your custom text sizes as predictable as Tailwind's built-ins.

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      fontSize: {
        '2xs': ['0.625rem', { lineHeight: '1rem' }],  // text-2xs
        '3xs': ['0.5rem', { lineHeight: '0.875rem' }], // text-3xs
        'hero': ['4.5rem', { lineHeight: '1', letterSpacing: '-0.02em' }],
      },
    },
  },
};

Extending Breakpoints

Tailwind's five default breakpoints cover most use cases, but some projects need additional screen sizes. Add custom breakpoints in theme.extend.screens to get new responsive prefixes. You can add smaller breakpoints below sm or larger ones above 2xl. All responsive utilities automatically gain your new prefix without any additional configuration.

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      screens: {
        'xs': '475px',     // xs:flex, xs:text-lg...
        '3xl': '1920px',   // 3xl:grid-cols-6...
        'tall': { 'raw': '(min-height: 800px)' }, // height-based
      },
    },
  },
};

Referencing Theme Values Inside Config

Sometimes you want to reference another theme value when defining a new value — for example, deriving a shadow color from your brand color. Tailwind provides a theme() helper function that you can use inside the config to reference any theme value by path. Use it as a function that receives the theme resolver as its argument.

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      boxShadow: {
        // Reference brand color in a shadow definition
        'brand': (theme) => '0 4px 14px 0 ' + theme('colors.brand.500') + '40',
      },
      // Or use the CSS theme() function syntax
      colors: {
        'card-bg': 'rgb(var(--color-card-bg) / <alpha-value>)',
      },
    },
  },
};

Override the Default Color Palette Safely

If you want to use only your custom colors but still want Tailwind's utility-generating machinery, override theme.colors while explicitly re-importing the categories you still want. Use Tailwind's colors export to bring back specific color groups while discarding others. This gives you a tailored palette without manually redefining every shade.

const colors = require('tailwindcss/colors');

module.exports = {
  theme: {
    colors: {
      // Keep these from the default palette
      transparent: 'transparent',
      current: 'currentColor',
      white: colors.white,
      black: colors.black,
      gray: colors.slate,  // rename slate to gray
      // Add your own
      brand: {
        500: '#6366f1',
        600: '#4f46e5',
      },
    },
  },
};

Spotting Accidental Overrides

Accidental overrides are easy to introduce and hard to debug — you add a value and suddenly other utilities stop working. The symptom is classes that used to work returning no styles in the browser. Inspect your built CSS to see if the expected utilities are present. If bg-blue-500 is missing from the output, check whether you inadvertently placed your colors inside theme.colors instead of theme.extend.colors.

// BUG: This accidentally overrides ALL colors
module.exports = {
  theme: {
    colors: { brand: '#6366f1' },  // bg-blue-500 gone!
  },
};

// FIX: Use extend
module.exports = {
  theme: {
    extend: {
      colors: { brand: '#6366f1' },  // bg-blue-500 still works!
    },
  },
};

Quick Check

Test your understanding of extending vs overriding the Tailwind theme.

Lesson Recap

In this lesson you learned: theme.extend merges new values with Tailwind's defaults — nothing is lost, direct theme overrides replace the entire default category and should be used intentionally, and you can reference existing theme values using the theme() function inside your config. Next up we add official Tailwind plugins to enhance our project.

자주 묻는 질문

“테마 확장과 재정의 비교” 강의는 무료인가요?

네 — “테마 확장과 재정의 비교” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Tailwind CSS Academy 강의 전체를 잠금 해제할 수 있습니다. Tailwind CSS Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“테마 확장과 재정의 비교”에서 뭘 배우나요?

기본값과 함께 새 값을 추가할 때는 theme.extend를 사용하고, 기본값을 완전히 교체할 때는 theme을 사용하는 방법을 실제 예제로 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 Tailwind CSS Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Tailwind CSS Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Tailwind CSS Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“테마 확장과 재정의 비교” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Tailwind CSS Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Tailwind CSS Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. tailwind.config.js의 구조
  2. 콘텐츠 경로와 불필요한 코드 제거
  3. 테마 확장과 재정의 비교
  4. 플러그인 추가 및 구성
← Tailwind CSS Academy(으)로 돌아가기