나는 기존에 안드로이드 앱을 만들었었다.
그러다보니, 자연스럽게 Material Design를 접하게 되었다.
디자인을 잘 모르는 개발자에게도 이해하기 쉽도록 문서가 작성되어있을 뿐더러, 안드로이드 개발자들에게는 기본적인 컴포넌트가 아예 Material Design의 Design System을 따르고 있기 때문에 적용하기 쉬웠다.
나는 이 체계를 웹에도 적용해보고자 한다.
머티리얼 디자인은 Google 디자이너와 개발자가 구축하고 지원하는 디자인 시스템입니다. Material.io에는 Android, Flutter 및 웹을 위한 심층적인 UX 지침과 UI 구성 요소 구현이 포함되어 있습니다.


색상명 : 세부 색상 구조color = {
gray: {
100: "#F9F9F9",
99: "#F3F3F3",
60: "#9C9C9C",
50: "#7E7E7E",
0: "#070707",
},
//...
};
색상명:색상값 구조color = {
white: "#FFFFFF",
};
ColorRole: 색상 구조const theme = {
colors: {
primary: c.red[50], //기본색
onPrimary: c.white, //기본색 글자색
},
};

export const ColorBox = styled.div<ColorBoxProps>`
//...
background-color: ${(props) => props.color};
&:after {
content: "${(props) => props.name}";
//...
color: ${
(props) =>
getLuminance(props.color) > 0.3
? color.black // 어두운 텍스트
: color.white // 밝은 텍스트
};
//...
}
`;
color prop으로 배경색 표시Polished 라이브러리로 색상 감지하여 글자 색 동적 적용{
Object.entries(theme.colors).map(([name, value]) => (
<ColorBox key={name} name={name} color={value} />
));
}
entries와 map 활용으로 선언적 표현Material Design의 색상 시스템을 웹 프로젝트에 도입한 이번 개발은 UI/UX 측면뿐만 아니라 개발 프로세스와 코드 품질 측면에서도 큰 의미가 있었다.
ColorRole을 도입하여 향후 다크 모드 등 테마 확장에 유연하게 대응할 수 있음ColorRole기반의 Component Style로 확장 가능
Theme에 대응하는 ColorRole 및 색상을 직관적으로 확인 가능