Customization
프로젝트의 기본 테마를 커스터마이징하는 방법.
tailwind.config.js
파일의 theme
섹션은 프로젝트의 색상 팔레트, 글꼴 크기, 폰트, 브레이크포인트, 테두리 반경 값 등을 정의하는 곳입니다.
/** @type {import('tailwindcss').Config} */
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',
}
}
}
}
Tailwind는 시작하기에 충분한 기본 테마를 제공하지만, 이를 변경하거나 확장하는 것을 두려워하지 마세요. 여러분의 디자인 목표에 맞게 필요한 만큼 커스터마이징하는 것을 권장합니다.
theme
객체는 screens
, colors
, spacing
키를 포함하며, 각각의 커스터마이징 가능한 코어 플러그인에 대한 키도 가지고 있습니다.
전체 테마 옵션 목록은 테마 설정 참조 또는 기본 테마를 확인하세요.
screens
키를 사용하면 프로젝트의 반응형 브레이크포인트를 커스터마이징할 수 있습니다.
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
screens: {
'sm': '640px',
'md': '768px',
'lg': '1024px',
'xl': '1280px',
'2xl': '1536px',
}
}
}
더 자세한 내용은 브레이크포인트 커스터마이징 문서를 참고하세요.
colors
키를 사용하면 프로젝트의 전역 색상 팔레트를 커스텀할 수 있습니다.
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
colors: {
transparent: 'transparent',
black: '#000',
white: '#fff',
gray: {
100: '#f7fafc',
// ...
900: '#1a202c',
},
// ...
}
}
}
기본적으로 이 색상들은 backgroundColor
, borderColor
, textColor
등 모든 색상 관련 코어 플러그인에 상속됩니다.
더 자세한 내용은 색상 커스터마이징 문서를 참고하세요.
spacing
키를 사용하면 프로젝트의 전역 간격 및 크기 스케일을 커스터마이징할 수 있습니다.
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
spacing: {
px: '1px',
0: '0',
0.5: '0.125rem',
1: '0.25rem',
1.5: '0.375rem',
2: '0.5rem',
2.5: '0.625rem',
3: '0.75rem',
3.5: '0.875rem',
4: '1rem',
5: '1.25rem',
6: '1.5rem',
7: '1.75rem',
8: '2rem',
9: '2.25rem',
10: '2.5rem',
11: '2.75rem',
12: '3rem',
14: '3.5rem',
16: '4rem',
20: '5rem',
24: '6rem',
28: '7rem',
32: '8rem',
36: '9rem',
40: '10rem',
44: '11rem',
48: '12rem',
52: '13rem',
56: '14rem',
60: '15rem',
64: '16rem',
72: '18rem',
80: '20rem',
96: '24rem',
},
}
}
기본적으로 이 값들은 padding
, margin
, width
, height
, maxHeight
, flex-basis
, gap
, inset
, space
, translate
, scrollMargin
, scrollPadding
, textIndent
와 같은 코어 플러그인에 상속됩니다.
더 자세한 내용은 간격 커스터마이징 문서를 참고하세요.
theme
섹션의 나머지 부분은 각각의 코어 플러그인에 대해 어떤 값들이 사용 가능한지 설정하는 데 사용됩니다.
예를 들어, borderRadius
키를 사용하면 어떤 border-radius 유틸리티가 생성될지 커스터마이징할 수 있습니다:
module.exports = {
theme: {
borderRadius: {
'none': '0',
'sm': '.125rem',
DEFAULT: '.25rem',
'lg': '.5rem',
'full': '9999px',
},
}
}
여기서 키는 생성될 클래스의 접미사를 결정하고, 값은 실제 CSS 선언의 값을 결정합니다.
위의 borderRadius
설정 예제는 다음과 같은 CSS 클래스를 생성합니다:
.rounded-none { border-radius: 0 }
.rounded-sm { border-radius: .125rem }
.rounded { border-radius: .25rem }
.rounded-lg { border-radius: .5rem }
.rounded-full { border-radius: 9999px }
DEFAULT
키를 사용하면 접미사 없이 rounded
클래스가 생성됩니다. 이는 Tailwind에서 흔히 사용되는 관례이며, 모든 코어 플러그인에서 지원됩니다.
특정 코어 플러그인을 커스터마이징하는 방법에 대해 더 알아보려면 해당 플러그인의 문서를 참고하세요.
사용 가능한 모든 theme 속성과 기본값에 대한 전체 참조는 기본 theme 설정을 확인하세요.
여러분의 프로젝트는 기본적으로 기본 테마 설정의 값을 자동으로 상속받습니다. 기본 테마를 커스터마이징하고 싶다면, 목표에 따라 몇 가지 다른 방법을 선택할 수 있습니다.
기본 테마 옵션의 값을 유지하면서 새로운 값을 추가하고 싶다면, 설정 파일에서 theme.extend
키 아래에 확장 내용을 추가하세요. 이 키 아래의 값은 기존 theme
값과 병합되며, 새로운 클래스로 자동으로 사용할 수 있게 됩니다.
예를 들어, 여기서는 fontFamily
속성을 확장하여 요소에 사용되는 폰트를 변경할 수 있는 font-display
클래스를 추가합니다:
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
extend: {
fontFamily: {
display: 'Oswald, ui-serif', // 새로운 `font-display` 클래스 추가
}
}
}
}
이를 테마에 추가한 후에는 다른 폰트 패밀리 유틸리티처럼 사용할 수 있습니다:
<h1 class="font-display">
이 텍스트는 Oswald 폰트를 사용합니다.
</h1>
일부 경우, 속성은 변형(variants)에 매핑되어 유틸리티 앞에 배치하여 조건부로 스타일을 적용할 수 있습니다. 예를 들어, 기존의 반응형 화면 크기와 동일하게 작동하는 3xl
화면 크기를 추가하려면 screens
키 아래에 속성을 추가하세요:
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
extend: {
screens: {
'3xl': '1600px', // 새로운 `3xl:` 화면 변형 추가
}
}
}
}
이 추가로, sm
, md
, lg
등과 같은 기존의 반응형 변형과 함께 새로운 3xl
화면 크기가 사용 가능해집니다. 이 새로운 변형을 유틸리티 클래스 앞에 배치하여 사용할 수 있습니다:
<blockquote class="text-base md:text-md 3xl:text-lg">
인터넷에 접속해야 해, 모든 일이 늦어지고 있어!
</blockquote>
기본 테마의 옵션을 재정의하려면 tailwind.config.js
파일의 theme
섹션 아래에 직접 재정의 내용을 추가하면 됩니다.
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
// 기본 `opacity` 값을 모두 대체
opacity: {
'0': '0',
'20': '0.2',
'40': '0.4',
'60': '0.6',
'80': '0.8',
'100': '1',
}
}
}
이렇게 하면 해당 키에 대한 Tailwind의 기본 설정이 완전히 대체됩니다. 위 예제에서는 기본 opacity 유틸리티가 생성되지 않습니다.
제공하지 않은 키는 기본 테마에서 상속되므로, 위 예제에서는 색상, 간격, 테두리 반경, 배경 위치 등에 대한 기본 테마 설정이 유지됩니다.
물론, 동일한 설정 파일에서 기본 테마의 일부를 재정의하고 다른 부분을 확장할 수도 있습니다.
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
opacity: {
'0': '0',
'20': '0.2',
'40': '0.4',
'60': '0.6',
'80': '0.8',
'100': '1',
},
extend: {
screens: {
'3xl': '1600px',
}
}
}
}
테마에서 다른 값을 참조해야 한다면, 정적 값 대신 클로저를 제공할 수 있습니다. 이 클로저는 theme()
함수를 포함하는 객체를 받습니다. 이 함수를 사용하면 점 표기법을 통해 테마의 다른 값을 조회할 수 있습니다.
예를 들어, background-size
유틸리티를 생성할 때 theme('spacing')
을 참조하여 간격 스케일의 모든 값을 사용할 수 있습니다. 이는 backgroundSize
설정에서 다음과 같이 구현할 수 있습니다:
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
spacing: {
// ...
},
backgroundSize: ({ theme }) => ({
auto: 'auto',
cover: 'cover',
contain: 'contain',
...theme('spacing')
})
}
}
theme()
함수는 완전히 병합된 테마 객체에서 찾고자 하는 값을 찾으려고 시도합니다. 따라서 여러분이 커스텀한 값뿐만 아니라 기본 테마 값도 참조할 수 있습니다. 또한 이 함수는 재귀적으로 동작하므로, 체인의 끝에 정적 값이 있다면 원하는 값을 해결할 수 있습니다.
단, 이와 같은 클로저는 각 섹션 내부의 키가 아닌 최상위 테마 키에서만 사용할 수 있습니다.
개별 값에는 함수를 사용할 수 없습니다
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
fill: {
gray: ({ theme }) => theme('colors.gray')
}
}
}
최상위 테마 키에는 함수를 사용하세요
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
fill: ({ theme }) => ({
gray: theme('colors.gray')
})
}
}
기본 테마의 값을 참조해야 할 경우, tailwindcss/defaultTheme
에서 가져올 수 있습니다.
이 기능이 유용한 경우 중 하나는 Tailwind의 기본 글꼴 스택에 새로운 글꼴을 추가하고 싶을 때입니다:
const defaultTheme = require('tailwindcss/defaultTheme')
module.exports = {
theme: {
extend: {
fontFamily: {
sans: [
'Lato',
...defaultTheme.fontFamily.sans,
]
}
}
}
}
특정 코어 플러그인에 대해 클래스를 생성하지 않으려면, theme
설정에서 해당 키에 빈 객체를 제공하는 것보다 corePlugins
설정에서 해당 플러그인을 false
로 설정하는 것이 더 좋습니다.
테마 설정에 빈 객체를 할당하지 마세요
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
opacity: {},
}
}
코어 플러그인 설정에서 플러그인을 비활성화하세요
/** @type {import('tailwindcss').Config} */
module.exports = {
corePlugins: {
opacity: false,
}
}
최종 결과는 동일하지만, 많은 코어 플러그인은 설정을 노출하지 않기 때문에 corePlugins
를 통해서만 비활성화할 수 있습니다. 따라서 일관성을 유지하는 것이 더 좋습니다.
screens
, colors
, spacing
을 제외한 theme
객체의 모든 키는 Tailwind의 코어 플러그인 중 하나에 매핑됩니다. 많은 플러그인이 정적 값 집합만 허용하는 CSS 속성(예: float
)을 담당하기 때문에, 모든 플러그인이 theme
객체에 해당 키를 가지고 있지는 않다는 점을 유의하세요.
이 모든 키는 기본 테마 확장을 활성화하기 위해 theme.extend
키 아래에서도 사용할 수 있습니다.
Key | Description |
---|---|
accentColor | Values for the accent-color property |
animation | Values for the animation property |
aria | Values for the aria property |
aspectRatio | Values for the aspect-ratio property |
backdropBlur | Values for the backdropBlur plugin |
backdropBrightness | Values for the backdropBrightness plugin |
backdropContrast | Values for the backdropContrast plugin |
backdropGrayscale | Values for the backdropGrayscale plugin |
backdropHueRotate | Values for the backdropHueRotate plugin |
backdropInvert | Values for the backdropInvert plugin |
backdropOpacity | Values for the backdropOpacity plugin |
backdropSaturate | Values for the backdropSaturate plugin |
backdropSepia | Values for the backdropSepia plugin |
backgroundColor | Values for the background-color property |
backgroundImage | Values for the background-image property |
backgroundOpacity | Values for the background-opacity property |
backgroundPosition | Values for the background-position property |
backgroundSize | Values for the background-size property |
blur | Values for the blur plugin |
borderColor | Values for the border-color property |
borderOpacity | Values for the borderOpacity plugin |
borderRadius | Values for the border-radius property |
borderSpacing | Values for the border-spacing property |
borderWidth | Values for the borderWidth plugin |
boxShadow | Values for the box-shadow property |
boxShadowColor | Values for the boxShadowColor plugin |
brightness | Values for the brightness plugin |
caretColor | Values for the caret-color property |
colors | Your project's color palette |
columns | Values for the columns property |
container | Configuration for the container plugin |
content | Values for the content property |
contrast | Values for the contrast plugin |
cursor | Values for the cursor property |
divideColor | Values for the divideColor plugin |
divideOpacity | Values for the divideOpacity plugin |
divideWidth | Values for the divideWidth plugin |
dropShadow | Values for the dropShadow plugin |
fill | Values for the fill plugin |
flex | Values for the flex property |
flexBasis | Values for the flex-basis property |
flexGrow | Values for the flex-grow property |
flexShrink | Values for the flex-shrink property |
fontFamily | Values for the font-family property |
fontSize | Values for the font-size property |
fontWeight | Values for the font-weight property |
gap | Values for the gap property |
gradientColorStops | Values for the gradientColorStops plugin |
gradientColorStopPositions | Values for the gradient-color-stop-positions property |
grayscale | Values for the grayscale plugin |
gridAutoColumns | Values for the grid-auto-columns property |
gridAutoRows | Values for the grid-auto-rows property |
gridColumn | Values for the grid-column property |
gridColumnEnd | Values for the grid-column-end property |
gridColumnStart | Values for the grid-column-start property |
gridRow | Values for the grid-row property |
gridRowEnd | Values for the grid-row-end property |
gridRowStart | Values for the grid-row-start property |
gridTemplateColumns | Values for the grid-template-columns property |
gridTemplateRows | Values for the grid-template-rows property |
height | Values for the height property |
hueRotate | Values for the hueRotate plugin |
inset | Values for the top , right , bottom , and left properties |
invert | Values for the invert plugin |
keyframes | Keyframe values used in the animation plugin |
letterSpacing | Values for the letter-spacing property |
lineHeight | Values for the line-height property |
listStyleType | Values for the list-style-type property |
listStyleImage | Values for the list-style-image property |
margin | Values for the margin property |
lineClamp | Values for the line-clamp property |
maxHeight | Values for the max-height property |
maxWidth | Values for the max-width property |
minHeight | Values for the min-height property |
minWidth | Values for the min-width property |
objectPosition | Values for the object-position property |
opacity | Values for the opacity property |
order | Values for the order property |
outlineColor | Values for the outline-color property |
outlineOffset | Values for the outline-offset property |
outlineWidth | Values for the outline-width property |
padding | Values for the padding property |
placeholderColor | Values for the placeholderColor plugin |
placeholderOpacity | Values for the placeholderOpacity plugin |
ringColor | Values for the ringColor plugin |
ringOffsetColor | Values for the ringOffsetColor plugin |
ringOffsetWidth | Values for the ringOffsetWidth plugin |
ringOpacity | Values for the ringOpacity plugin |
ringWidth | Values for the ringWidth plugin |
rotate | Values for the rotate plugin |
saturate | Values for the saturate plugin |
scale | Values for the scale plugin |
screens | Your project's responsive breakpoints |
scrollMargin | Values for the scroll-margin property |
scrollPadding | Values for the scroll-padding property |
sepia | Values for the sepia plugin |
skew | Values for the skew plugin |
space | Values for the space plugin |
spacing | Your project's spacing scale |
stroke | Values for the stroke property |
strokeWidth | Values for the stroke-width property |
supports | Values for the supports property |
data | Values for the data property |
textColor | Values for the color property |
textDecorationColor | Values for the text-decoration-color property |
textDecorationThickness | Values for the text-decoration-thickness property |
textIndent | Values for the text-indent property |
textOpacity | Values for the textOpacity plugin |
textUnderlineOffset | Values for the text-underline-offset property |
transformOrigin | Values for the transform-origin property |
transitionDelay | Values for the transition-delay property |
transitionDuration | Values for the transition-duration property |
transitionProperty | Values for the transition-property property |
transitionTimingFunction | Values for the transition-timing-function property |
translate | Values for the translate plugin |
size | Values for the size property |
width | Values for the width property |
willChange | Values for the will-change property |
zIndex | Values for the z-index property |