
부스트캠프에서의 마지막 6주! 팀 프로젝트가 시작되었습니다.
본격적으로 개발을 시작하기 앞서 CSS를 어떤 방식으로 사용할 지 고민하는 과정을 기록해 보았습니다.
지난 8주간 진행한 2개의 프로젝트에서는 각각 CSS와 SCSS를 사용하였는데
SCSS를 사용할 때 mixin으로 중복을 편하게 제거하고 계층구조 표현 방식으로 가독성이 개선되는 것을 경험했고 결과적으로는 스타일 코드를 작성하는 시간이 줄어들게 되었습니다.
CSS에서 SCSS로 넘어갔을 때 효과를 경험한 직후라 시간이 촉박한 프로젝트에서는 더 빠르고! 더 편하게!
스타일 코드를 작성해 보고 싶은 욕심이 생겼고 방법을 고민하게 되었습니다.
현재 사용하는 여러 가지 방법 중 CSS 모듈을 사용하는 방법은 SCSS에서 사용하였고 그보다 더 나은 방법을 경험하기 위한 것이므로 제거하고 CSS-in-JS 와 Atomic CSS 중 사용하는 것으로 결정하였고
CSS-in-JS의 emotion, styled-components와 Atomic CSS인 tailwind를 비교해 보았습니다.
https://npmtrends.com 을 통해 비교한 패키지의 다운로드 횟수 그래프입니다.
격차가 크진 않았지만 emotion > tailwindcss > styled-components 순으로 많이 사용되고 있음을 알 수 있습니다.
사용성을 비교해 보기 위해서 각각 공식 문서 페이지의 시작하기 부분을 참고해 간단한 박스를 구현해 보았습니다.
CSS-in-JS의 방법 중 Emotion과 Styled-components의 코드 작성 스타일이 비슷하고 현재로서는 큰 차이를 알 수 없었기 때문에 다운로드 횟수가 높은 Emotion으로 진행하였습니다.
Emotion은 사용할 환경과 방법에 따라 패키지가 구분되어 있었고 필요한 패키지만 가져와 사용할 수 있었습니다.
리액트 프로젝트
바닐라JS 프로젝트
텍스트 박스 그려보기

@emotion/react 사용 시
// css prop에 직접 작성하는 방법
/** @jsxImportSource @emotion/react */
import { css } from "@emotion/react";
export const A = () => {
return (
<div
css={css`
width: 100px;
height: 100px;
background-color: red;
margin: 50px;
color: white;
`}
>
Emotion React.
</div>
);
};
// css prop에 변수를 넣는 방법
/** @jsxImportSource @emotion/react */
import { css } from "@emotion/react";
export const A = () => {
return <div css={textBoxCss}>Emotion React.</div>;
};
const textBoxCss = css`
width: 100px;
height: 100px;
background-color: red;
margin: 50px;
color: white;
`;
const smalltextstyle = css`
font-size: 10
`
const smallbax = div`
${smalltextstyle}
/** @jsxImportSource @emotion/react */@emotion/styled 사용 시
import styled from "@emotion/styled";
export const B = () => {
return <TextBox>Emotion Styled.</TextBox>;
};
const TextBox = styled.div`
width: 100px;
height: 100px;
background-color: blue;
margin: 50px;
color: white;
`;
@emotion/react를 사용하는 것보다 깔끔하게 작성하는 방법이라고 생각되지만 변수명에 따라서 어떤 HTML 태그인지 파악하기 어려울 것 같다는 단점이 있습니다.export const C = () => {
return (
<div className='w-[100px] h-[100px] bg-emerald-400 m-[50px] text-white'>
Tailwind CSS.
</div>
);
};
장점
단점
@apply란?
//index.css
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.text-box {
@apply w-[100px] h-[100px] bg-emerald-400 m-[50px] text-white;
}
}
// C.js
export const C = () => {
return <div className='text-box'>Tailwind CSS.</div>;
};
결과적으로는 다음과 같은 이유로 tailwindCSS를 사용하기로 결정했습니다.
Emotion 공식문서
Tailwind CSS 공식문서
Why We're Breaking Up with CSS-in-JS
Emotion으로 React 컴포넌트 스타일하기