최근 페이스북과 트위터의 프로덕션 배포물들을 보면, atmoic CSS-in-JS라는 새로운 트랜드가 천천히 성장하고 있다고 생각한다.
이 포스트에선, atomic CSS가 무엇인지 확인하고, TailwindwCSS 같은 기능적/유용성-우선 CSS(functinal/utility-first)를 살펴본 다음,
With recent production deployments from Facebook and Twitter, I think a new trend is slowly growing: atomic CSS-in-JS. 리액트의 큰손들의 코드베이스에서 어떻게 채택하고 있는지 알아볼 것이다.
난 이 주제에 전문가는 아니라서, 장단점에 대한 너무 깊은 지식은 기대하지 말아달라. atomic-css-in-js에 대한 생각을 너에게 알려주고 싶을 뿐이다.
주의 : Atmoic CSS는 Atmoic Design과 전혀 관련없음
BEM, OOCSS... 등등 여러 방법론들이 있다.
<button class="button button--state-danger">
Danger button
</button>
요즘 유틸우선 콘셉인 Tailwindw CSS가 있고, Functinal css인 Tachyon이 있다.
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
Button
</button>
유틸리티 클래스들의 스타일시트의 뭉치들이 있다면, 너무 길어진다.
아토믹 css는 유틸 우선 css의 극단과 같다, 모든 css 클래스는 하나의 고유한 css 규칙을 가지고 있다.
처음에 아토믹 css는 야후의 Thierry Koblentz에 의해서 사용되었다.
/* Atomic CSS */
.bw-2x {
border-width: 2px;
}
.bss {
border-style: solid;
}
.sans {
font-style: sans-serif;
}
.p-1x {
padding: 10px;
}
/* Not atomic, because the class contains 2 rules */
.p-1x-sans {
padding: 10px;
font-style: sans-serif;
}
템플릿을 수정할 때는, css가 아닌 html을 수정한다. 처음부터 css를 분리하는 것이 "관점의 분리"에 적합하지 않다고 깨달았던 것 같다.
변경된 마크업 방식
html을 조금 더 커져서 서버 렌더링일 경우 문제가 된다. 하지만 css 파일은 더 이상 중복되지 않는다.
몇 가지 문제가 있다.
모든 웹 사이트에 고유한 유틸리티 css 파일을 제공하지 않고, 공유 범위와 명명 규칙만 제공
https://tailwindcss.com/docs/configuration/
하지만 여전이 아토믹 스타일에 대한 문제를 가지고 있다.
Christopher Chedeau는 리액트 생태계에 css-in-js의 아이디어를 널리 퍼뜨림, 그가 말한 css 문제는 아래와 같다.
1. 전역 네임스페이스
2. 의존성
3. 죽은 코드 제거
4. 최소화
5. 공유하는 상수
6. 비결정적 해결 링크
7. 독립성
페북의 이전 버전은 413kb의 css, 현재는 다크모드를 포함해도 74kb임