
프로젝트 시작에 앞서 폴더 구조와 기본 파일들을 정리하며 디자인 시스템도 미리 정의해두고자 했다.
이 과정에서 디자인 시스템을 정리할 때 .css뿐만 아니라 .js로도 관리하는 방법이 있다는 것을 알게 되어 두 방식의 차이를 정리하고 어떤 상황에서 적합한지 비교해보고자 한다.
우선 디자인 시스템이 무엇인지 짚고 넘어가자
프로젝트 전반에서 일관성을 유지하기 위해 미리 정의해두는 값과 규칙들의 집합
즉,
가장 일반적인 방법으로 CSS 변수를 사용해서 관리하는 것이다.
:root {
--color-primary: #99C08E;
--color-gray-01: #f5f5f5;
--font-size-base: 16px;
}
사용 시
.button {
background-color: var(--color-primary);
font-size: var(--font-size-base);
}
장점
단점
디자인 값을 JavaScript 객체로 관리하는 방법도 있다.
export const colors = {
primary: "#99C08E",
gray01: "#f5f5f5",
};
export const fontSize = {
base: "16px",
};
사용 시
<div style={{ color: colors.primary, fontSize: fontSize.base }} />
장점
| 기준 | .css | .js |
|---|---|---|
| 역할 | 스타일 정의 | 값(데이터) 관리 |
| 사용 방식 | class / var | import |
| 동적 처리 | 제한적 | 자유로움 |
| 협업 | 유리 | 상대적으로 제한 |
👉 정적인 디자인 정의
👉 동적인 로직이 필요한 경우
정적인 디자인 처리는 .css, 동적인 처리는 .js가 어울린다고 정리할 수 있다.
상황에 따라 다르지만 .js를 컴포넌트처럼 import해서 사용하는 점에 있어 더 쉽고 다양하게 사용할 줄 알았는데 디자인 시스템을 구성하는 관점에서 .css가 프로젝트에 용이할 것 같다는 점이 의외였다.
저는 기본적인 스타일은 CSS 파일에 모아 일관성을 유지하고, 조건에 따라 UI가 달라지는 경우에는 JavaScript에서 값을 관리해 동적으로 처리하는 방식으로 나누어 사용하고 있습니다.
프로젝트 시작 전에 이러한 기준도 컨벤션으로 정해두면 더 효율적일 것 같다는 생각이 들었습니다!