유틸리티 커스터마이징
유틸리티 커스터마이징
유틸리티 API는 나만의 CSS 속성을 만들거나, 기존 속성들을 특정 값 혹은 토큰 집합에 매핑하는 방법이에요. 유틸리티를 정의하거나 커스터마이징할 때 필요한 속성들은 다음과 같아요.
출처: 문서
본문
shorthand: 속성의 축약형(별칭) 버전이에요.values: 속성이 가질 수 있는 값들이에요. 토큰 카테고리나 값들의 enum(문자열, 숫자, boolean)이 될 수 있어요.transform: 값을 유효한 css 객체로 변환해 주는 함수예요.
커스텀 유틸리티 만들기
요소에 border radius를 적용하는 br 속성을 새로 만든다고 해 볼게요.
import { createSystem, defaultConfig, defineConfig } from "@chakra-ui/react"
const customConfig = defineConfig({
utilities: {
extend: {
br: {
values: "radii",
transform(value) {
return { borderRadius: value }
},
},
},
},
})
const system = createSystem(defaultConfig, customConfig)
이제 컴포넌트에서 br 속성을 사용할 수 있어요.
import { Box } from "@chakra-ui/react"
function App() {
return <Box br="sm" />
}
enum 값 사용하기
요소에 제한된 set의 인라인 border를 적용하고, border 색상을 자동으로 적용하는 borderX 속성을 만들어 볼게요.
import { createSystem, defaultConfig, defineConfig } from "@chakra-ui/react"
const customConfig = defineConfig({
utilities: {
extend: {
borderX: {
values: ["1px", "2px", "4px"],
shorthand: "bx",
transform(value, { token }) {
return {
borderInlineWidth: value,
borderColor: token("colors.red.200"),
}
},
},
},
},
})
const system = createSystem(defaultConfig, customConfig)
이제 컴포넌트에서 borderX 또는 bx 속성을 사용할 수 있어요.
import { Box } from "@chakra-ui/react"
function App() {
return <Box borderX="sm" />
}
매핑된 값 사용하기
import { createSystem, defaultConfig, defineConfig } from "@chakra-ui/react"
const customConfig = defineConfig({
utilities: {
extend: {
borderX: {
values: { small: "2px", medium: "5px" },
shorthand: "bx",
transform(value, { token }) {
return {
borderTopWidth: value,
borderTopColor: token("colors.gray.400"),
}
},
},
},
},
})
const system = createSystem(defaultConfig, customConfig)
이제 컴포넌트에서 borderX 또는 bx 속성을 사용할 수 있어요.
import { Box } from "@chakra-ui/react"
function App() {
return <Box borderX="sm" />
}
더 알아보기 (Learn more)
- 테마 개요에서 Chakra UI 테마 시스템 전반을 알아보세요.