ET네 만물상 - GitHub Repository / 배포 링크
가장 친숙하기 때문이다.
이 프로젝트에서 우리 목표는 높은 완성도였기에 스타일에 대한 학습 시간을 절약하기로 했다.
또한 아직 styled-components를 완벽히 다룬다고 말 할 수도 없었기 때문에 시간 절약 / 숙련도 증가 정도의 이유라고 보면 되겠다.
어플리케이션에 일관된 스타일을 적용하기 위해 사용한다.
폰트, 사이즈, 컬러, 간격, border-radius 등을 정해두고 사용함으로써 일관된 UI를 구현할 수 있다.
const customMediaQuery = (maxWidth: number): string =>
`@media (max-width: ${maxWidth}px)`;
export const media = {
custom: customMediaQuery,
1440: customMediaQuery(1440),
768: customMediaQuery(768),
tablet: customMediaQuery(1100),
mobile: customMediaQuery(500),
};
const sample = styled.div`
${media.tablet} {
width: 10rem;
}
${media.mobile} {
width: 5rem;
}
`;
반응형을 위한 유틸이다. styled 안에 위처럼 사용한다.
커스텀도 가능한 아주 유용한 유틸!
const calculateMargin = (
gap: string,
direction: "row" | "column" | "column-reverse"
) => {
if (direction === "row") return `margin-left: ${gap}`;
if (direction === "column") return `margin-top: ${gap}`;
if (direction === "column-reverse") return `margin-bottom: ${gap}`;
return "";
};
export const gap = (
gapLength: string,
direction: "row" | "column" | "column-reverse" = "row"
) => {
return css`
& > * + * {
${calculateMargin(gapLength, direction)}
}
`;
};