Front-End/CSS

CSS 아키텍쳐와 BEM

삼준 2025. 4. 27. 06:18
반응형

1. CSS 아키텍쳐

1.1. CSS 아키텍쳐란?

CSS를 더 체계적이고 유지보수하기 쉽게 짜는 방법을 의미함.

1.2. CSS 아키텍쳐의 종류

  • BEM (Block Element Modifier)
  • OOCSS (Object-Oriented CSS)
  • SMACSS (Scalable and Modular Architecture for CSS)
  • Atomic CSS
  • ITCSS (Inverted Triangle CSS)

실무에서는 BEM이 가장 많이 쓰이는데, 그 이유는

 

  • 단순하고 명확해서 (클래스 이름만 봐도 구조가 눈에 보임)
  • 협업에 강해서 (여러 명이 같은 코드 작업할 때 충돌이 적음)
  • CSS 유지보수에 좋아서 (나중에 스타일 고칠 때 어디에 영향 가는지 예측 가능)
  • 프레임워크랑 잘 어울려서 (React, Vue 같은 컴포넌트 개발할 때 BEM 스타일이 깔끔하게 어울림)

라고 함.

이름 핵심 아이디어 키워드
BEM 명확한 클래스 네이밍 __, --
OOCSS 구조(기능)과 디자인(모양) 분리. 재사용 가능 오브젝트처럼 작성. 재사용성
SMACSS 역할별 분리 (총 5가지 카테고리) 역할 (Base, Layout, Module, State, Theme)
Atomic CSS 스타일 조각화 (클래스 하나 = 스타일 하나) Tailwind
ITCSS 기본적인 것부터 점점 아래 계층으로 내려가면서 세밀하게 설계 계층적 설계 (Settings > Tools > Generic > Elements > Objects > Components > Utilities)

1.2.1. OOCSS 예시

.box { padding: 10px; border: 1px solid #ccc; }
.profile-pic { width: 100px; height: 100px; }

 

 

2. BEM

CSS 아키텍처 중 하나로 Block Element Modifier의 줄임말임.

  • Block: 독립적으로 의미를 가지는 큰 덩어리 (ex: card, menu)
  • Element: Block 안에 들어가는 부분들 (ex: card__title, menu__item)
  • Modifier: 상태나 버전을 표현하는 것 (ex: card--highlighted, menu__item--active)

2.1. BEM 기본 규칙

BEM에서는 꼭 다음과 같은 규칙을 따라야 함.

  • 언더바 두 개(__)는 Block과 Element를 연결할 때 씀.
  • 대쉬 두 개(--)는 Block이나 ElementModifier를 붙일 때 씀.

2.2. 사용 예시

다음과 같은 html 파일이 있을 때,

<div class="card card--highlighted">
  <h2 class="card__title">Title</h2>
  <p class="card__description">Description here</p>
</div>

다음과 같이 CSS를 작성하면

구조가 명확해지고 클래스 이름만 봐도 역할이 바로 보여서 나중에 유지보수가 쉬워짐.

.card {
  background: white;
  border: 1px solid gray;
}

.card--highlighted {
  background: yellow;
}

.card__title {
  font-size: 20px;
}

.card__description {
  font-size: 14px;
}

 

반응형