프로젝트를 진행할 때 자주 사용하게 되는 색들이 있다. 그것들을 항상 헥사코드를 찾아서 작성하기에는 너무 힘들다. 따라서 tailwind css에서는 기본으로 주어진 색상처럼 사용할 수 있도록 커스터마이징할 수 있는 기능을 지원한다.
먼저 `tailwind.config.ts` 파일에 들어가보자. 그러면 얼추 아래와 같은 세팅이 작성되어 있다. (나는 create-next-app을 통해 Next.js의 App router를 사용하고 tailwind를 사용한다고 설정했으므로 자동으로 content를 작성해주었다.)
import type { Config } from "tailwindcss";
const config: Config = {
darkMode: ["class"],
content: [
"./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
"./src/app/**/*.{js,ts,jsx,tsx,mdx}"
],
theme: {
extend: {
colors: {
background: "var(--background)",
foreground: "var(--foreground)",
}
}
},
plugins: [require("tailwindcss-animate")]
};
export default config;
여기서 `content`는 해당 root에서부터 해당 경로에, 해당 확장자로 작성된 파일에 tailwindcss를 적용한다는 것이다. 만약 `./src/myComponents`라는 폴더를 만들고 하위 컴포넌트에 tailwind css를 사용해도 제대로 적용되지 않는 것을 확인할 수있을 것이다.
색상 커스터마이징에서 접근해야하는 부분은 `theme` 부분이다. 위 파일을 보면 `theme` 내부에 `extend`가 있고, 그 내부에 `colors`가 있는데, `colors`가 `extend` 외부에 병렬로 존재할 수도 있다.
1. 컬러 팔레트 만들기
`theme` 내부에 `colors`가 있다면 기본 테마 위에 재정의할 수 있다. Tailwindcss에서 기본적으로 제공하는 컬러 팔레트가 있는데, 이 링크에 들어가보면 확인할 수 있다. 우리가 `text-gray-500`으로 아무 세팅 없이 사용하면 tailwindcss에서 제공하는 gray-500 색상이 적용된다. 그런데, 똑같이 gray-500을 사용하면서 다른 색상을 사용하고 싶은 경우에는 어떻게 하면 될까? 아래와 같이 작성하면 된다.
import type { Config } from "tailwindcss";
const config: Config = {
darkMode: ["class"],
content: [
"./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
"./src/app/**/*.{js,ts,jsx,tsx,mdx}"
],
theme: {
colors: {
gray: {
30: "#F2F2F2",
50: "#E3E3E3",
100: "#D9D9D9",
200: "#C9C9C9",
300: "#B0B0B0",
400: "#969696",
500: "#7D7D7D",
600: "#636363",
700: "#4A4A4A",
800: "#303030",
900: "#171717"
}
},
extend: {
colors: {
background: "var(--background)",
foreground: "var(--foreground)"
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)"
}
}
},
plugins: [require("tailwindcss-animate")]
};
export default config;
직접 확인해보면 좀 더 푸른색 기운이 덜해진 회색으로 바뀐 것을 알 수 있다. 위에 작성한 `gray: {...}`를 `extend` 내부의 `colors`에 추가해도 된다. 이 둘의 차이점은 `extend`내부에서는 default 값에 접근할 수 있다는 것이다. `colors.gray`를 사용하면 기본 gray 색상에 접근할 수 있다. gray 대신에 pink, blue, mycolor 등 본인이 사용하고 싶은 이름으로 대신해서 마찬가지 방법으로 사용할 수 있다.
2. 커스텀 색상 만들기
이번엔 경고, 확인과 같은 특정한 이름으로 색상을 지정하는 방법에 대해 알아보려고 한다. 위와 비슷한데, 객체가 들어가는 것이 아니라 헥사코드만 입력하면 된다.
import type { Config } from "tailwindcss";
const config: Config = {
darkMode: ["class"],
content: [
"./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
"./src/app/**/*.{js,ts,jsx,tsx,mdx}"
],
theme: {
extend: {
colors: {
background: "var(--background)",
foreground: "var(--foreground)",
negative: "#FF4737",
notice: "#FF961E",
positive: "#008F5D",
informative: "#248DFF"
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)"
}
}
},
plugins: [require("tailwindcss-animate")]
};
export default config;
이번엔 `extend` 내부 `colors`에 작성했다. 사용 방법은 똑같다. `bg-negative`라고 하면 다홍색 바탕이 적용된다. `extend` 내부에 작성하는 경우, 기본값과 중복되면 안되므로 이름을 정할 때 주의해야 한다.
하지만 굳이 꼭 gray와 같은 기본값과 중복된 이름을 `extend` 내부에 사용해야한다면 tailwindcss에서 알아서 새로운 값으로 잘 대체해준다. 하지만 `extend` 외부에 정의한 것과 달리 재정의가 아닌 확장한 것으로 인식하므로 잘못 사용하면 뜻대로 적용되지 않을 수 있다.
'Frontend > Today I Learned' 카테고리의 다른 글
[Next.js] Zustand 사용하기 (2) | 2024.11.28 |
---|---|
[React] TanStack Query로 custom hook 만들기 (0) | 2024.10.31 |
[Next.js] 버튼 클릭 시 query param 추가하기 (0) | 2024.10.24 |
[React, TS] Input 이미지 파일 미리보기 (0) | 2024.10.14 |
[Next.js] Link 태그에 버튼을 넣었을 때 페이지 이동 막기 (1) | 2024.10.13 |