Chakra UI의 시맨틱 토큰 ⚛
18578 단어 chakrauitutorialreactjavascript
시맨틱 토큰을 사용하면 일반 디자인 토큰에 매핑되는 Chakra 소품에서 특정 이름을 가진 토큰을 사용할 수 있습니다. 예를 들어 "green.500"색상에 매핑되는 "성공"이라는 색상 시맨틱 토큰을 만들 수 있습니다.
const theme = extendTheme({
semanticTokens: {
colors: {
success: "green.500"
}
}
});
이제 "성공"토큰을 Chakra 구성 요소에서 "green.500"에 대한 "별칭"으로 사용할 수 있습니다.
<Button bg="success">Accept</Button>
이는 우리에게 다음과 같은 결과를 줄 것입니다.
<Button bg="green.500">Accept</Button>
시맨틱 값
또 다른 멋진 기능은 현재 테마를 기반으로 다른 값으로 매핑하는 것입니다. 예를 들어 시맨틱 토큰 "error"를 밝은 테마에서는 "red.600"으로, 어두운 테마에서는 "red.300"으로 매핑할 수 있습니다.
const theme = extendTheme({
semanticTokens: {
colors: {
error: {
default: "red.600",
_dark: "red.300"
}
}
}
});
이것은 정말 유용하며 현재와 같이 useColorModeValue의 사용을 줄일 수 있습니다.
<Button bg={useColorModeValue('red.600', 'red.300')}>Retry</Button>
"오류"시맨틱 토큰을 간단히 사용할 수 있습니다.
<Button bg="error">Retry</Button>
가능한 시맨틱 토큰 필드
색상에 대한 시맨틱 토큰을 생성할 뿐만 아니라 Chakra UI의 모든 스케일(글꼴 크기, 테두리, 반지름, 크기 등)에 대한 시맨틱 토큰을 생성할 수도 있습니다. 전체 목록here 및 here을 참조하십시오.
다음 예에서는 그림자 및 반지름에 대한 시맨틱 토큰을 만듭니다.
const theme = extendTheme({
semanticTokens: {
shadows: {
card: {
default: "md",
_dark: "none"
}
},
radii: {
card: "lg"
}
}
});
이제 새 토큰을 다음과 같이 사용할 수 있습니다.
<Box boxShadow="card" borderRadius="card">Card Content</Box>
다음은 이러한 시맨틱 토큰을 시연하는 Lazar Nikolov(Chakra UI 핵심 팀원)의 codesandbox 데모입니다.
다음 단계로 나아가기
위에서 배운 모든 것을 사용하여 차크라의 기본 색상과 유사한 변형(50-900)이 있는 시맨틱 토큰 기반 디자인 시스템을 만들 수 있습니다.
사용 가능한 색조(50-900)에 대한 배열을 만드는 것으로 시작합니다.
const availableColorTints = [
'50',
'100',
'200',
'300',
'400',
'500',
'600',
'700',
'800',
'900',
];
이제 시맨틱 토큰 -> 차크라 테마 색상의 맵을 생성해 보겠습니다.
const tokenToColorMap = {
primary: 'blue',
accent: 'teal',
success: 'green',
warning: 'orange',
error: 'red',
neutral: 'gray',
};
이제 tints 배열과 토큰 맵을 사용하여 테마의 색상 개체를 빌드하고 useColorModeValue 호출을 방지하는 데 도움이 되는 어둡고 밝은 테마에 대한 간단한 색상 반전 논리를 포함할 것입니다.
(primary.300은 어두운 테마의 경우 blue.300이 되고 밝은 테마의 경우 blue.600이 됩니다. 내 경험상 동일한 색상으로 두는 것보다 더 나은 결과를 제공합니다.)
const colors = Object.entries(tokenToColorMap).reduce((acc, [token, color]) => {
availableColorTints.forEach((tint, index) => {
acc[`${token}.${tint}`] = {
default: `${color}.${availableColorTints[availableColorTints.length - 1 - index]}`,
_dark: `${color}.${tint}`,
};
});
return acc;
}, {});
이렇게 하면 런타임에 다음 색상 개체가 생성됩니다.
{
primary.50: {
default: "blue.900",
_dark: "blue.50"
},
primary.100: {
default: "blue.800",
_dark: "blue.100"
},
primary.200: {
default: "blue.700",
_dark: "blue.200"
},
primary.300: {
default: "blue.600",
_dark: "blue.300"
},
primary.400: {
default: "blue.500",
_dark: "blue.400"
},
primary.500: {
default: "blue.400",
_dark: "blue.500"
},
primary.600: {
default: "blue.300",
_dark: "blue.600"
},
primary.700: {
default: "blue.200",
_dark: "blue.700"
},
primary.800: {
default: "blue.100",
_dark: "blue.800"
},
primary.900: {
default: "blue.50",
_dark: "blue.900"
},
accent.50: {
default: "teal.900",
_dark: "teal.50"
},
// etc.
}
이제 우리는 구성 요소에서 멋진 새 시맨틱 토큰을 사용할 수 있습니다.
<Button bg="primary.300" color="neutral.300">Ok</Button>
<Button bg="accent.400" color="neutral.400">Cancel</Button>
<Box bg="error.300" borderColor="error.400">Something went wrong</Box>
테마 파일 및 사용법의 전체 예는 my personal website's github page 에서 볼 수 있습니다.
요약
시맨틱 토큰이 무엇인지, 이점은 무엇인지, Chakra UI의 내장 토큰을 기반으로 하는 디자인 시스템을 구축할 때 이를 어떻게 활용할 수 있는지에 대해 논의했습니다.
읽어 주셔서 감사합니다! 🚀
시맨틱 토큰에 대한 자세한 내용은 Chakra UI's docs을 참조하십시오.
Reference
이 문제에 관하여(Chakra UI의 시맨틱 토큰 ⚛), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paripsky/semantic-tokens-in-chakra-ui-4k1b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)