37signals의 CSS 아키텍처는 app/assets/stylesheets/ 아래에 각 개념별로 파일을 두는 평면적인 구조를 채택하여 제로 설정, 제로 빌드 시간을 실현합니다.
주요 특징 및 진화는 다음과 같습니다:
1. 기반 아키텍처 및 색상/간격 시스템
-
단순한 파일 구조: 서브디렉토리 없이 개념별 단일 파일 구성으로 높은 가독성과 유지보수성을 제공합니다.
-
OKLCH 색상: 지각적으로 균일한 OKLCH 색상 공간을
:root변수로 정의하고,@media쿼리로 다크 모드를,color-mix()로 동적 색상 팔레트를 구현합니다. -
ch단위 간격: 수평 간격에 문자 너비(ch) 단위를 사용하여 콘텐츠와 비례하는 자연스러운 간격을 제공하며, 이를 반응형 브레이크포인트에도 활용합니다.
2. 현대 CSS 기능의 적극적인 활용
-
유틸리티 클래스: 핵심 스타일은 의미론적 컴포넌트 클래스에 정의하고, 유틸리티 클래스는 보조적으로 사용하여 HTML 가독성과 유지보수성을 높입니다.
-
:has()선택자: JavaScript 없이 부모 요소를 자식 요소의 상태에 따라 스타일링하여 복잡한 상호작용(예: 사이드바 토글, 칸반 레이아웃)을 순수 CSS로 구현합니다. -
점진적 진화: Campfire에서 기반을 다지고, Writebook에서 컨테이너 쿼리와
@starting-style을 도입했으며, Fizzy에서는@layer를 통한 명시도 관리,color-mix(), 복잡한:has()체인을 활용하여 현대 CSS 기능을 총체적으로 적용했습니다. -
순수 CSS 애니메이션: 이미지 없이 CSS 마스크로 로딩 스피너를, 비대칭
border-radius로 손으로 그린 듯한mark하이라이트를 구현합니다. 또한,@starting-style과allow-discrete를 사용하여 HTML<dialog>요소의 부드러운 애니메이션을 순수 CSS로 처리합니다.