Study/css(scss)

[CSS] CSS 방법론 - BEM이란?

33e 2025. 10. 21. 22:58

회사에서 BEM을 사용한다고 말씀해주셨는데, 어렴풋이 알지만
정확히 설명할 수 없어 제대로 공부하고 정리해보았다!

 

🔎 CSS 방법론?


CSS 방법론은 간단히 얘기하면 CSS를 사용하기 위해 어떤 방식으로 클래스 네임을 사용할 지에 대한 이야기이다.
대표적으로 3가지 방법론이 있는데

  1. BEM(Block Element Modifier)
  2. OOCSS(Object Oriented CSS)
  3. SMA CSS(Scalable and Modular Architecture for CSS)

이 중 현재 사용하고 있는 BEM에 대해 공부해보았다.


1. BEM이란?

BEM은 CSS 방법론 중 하나로, Block, Element, Modifier의 약자이다.

🔎 BEM의 특징

  1. 작명을 할 때, 의미가 있는 네이밍을 지향한다.
  2. ID, 태그 이름 등 클래스 선택자 이외의 선택자 사용을 제한한다.
//좋은 예시
.header{width:100%}
.header .header__logo{background-color: black}
.header .header__logo--dark{background-color:white}

//나쁜 예시
h2{width:100%}//다른 선택자 사용
h2 .header_lg{background-color: black}//약어 사용으로 네이밍이 직관적이지 않음
h2 #lg-bl{background-color:white}

 

👍 BEM의 장점

  1. 목표 또는 기능을 직관적으로 파악 할 수 있다. 
  2. CSS만으로 구조를 파악할 수 있다.
  3. SASS,SCSS와 사용하기 편하다.
  4. 재사용이 편리하다.

→ 이러한 장점들 때문에 대형 프로젝트에서 많이 채택되는 거 같다.


2. BEM의 구성 요소

BEM은 Block, Element, Modifier로 구성되어있다.

.header__item--active{color: blue;}


위 코드에서 headerBlock, itemElement, activeModifier이다.

 

BEM의 계층구조

 



2-1. Block

UI적으로 의미있는 부분으로, 재사용이 가능한 페이지 내에 독립적인 개체를 뜻한다. 

Block은 서로 상호작용하거나 중첩은 될 수 있지만, Block간에 우선순위나 계층구조는 없다.

 

🔖 네이밍 규칙

.block

소문자 영단어, 숫자,-(대시) 로 구성된다.

클래스이름에 두 단어가 붙을 경우 -로 구분하거나 뒷단어의 첫글자를 대문자로 써 구분한다.

 

 🖥️ 특징

  • 모든 DOM 노드에 사용할 수 있다.
  • CSS에서 사용시, 태그 이름이나 ID는 사용하지 않는다


2-2. Element

Block과 연결되어있는 개체어떤 역할을 하는 지 의미을 가지고 있다.

 

🔖 네이밍 규칙

.block__element

소문자 영단어, 숫자,-(대시), _ _(언더바 2개) 로 구성된다.

블록이름에 언더바 2개로 요소이름을 붙여 block__element로 만든다

 

 🖥️ 특징

  • 모든 DOM 노드에 사용할 수 있다.
  • block과 연결된 개체이기 때문에 단독으로 사용할 수 없다.

2-3. Modifier

block이나 element에 변경된 모양, 동작, 상태를 나타낸다.

 

🔖 네이밍 규칙

.block__element--modifier

소문자 영단어, 숫자,-(대시), --(대시 2개) 로 구성된다.

block 혹은 element 뒤에 대시 2개로 요소이름을 붙여 block--mod, block__element--mod로 만든다

 

 🖥️ 특징

  • Block,Element에 추가하는 클래스 이름으로 단독으로 사용할 수 없다
  • 상태가 변경되는 요소에만 추가해야 한다.

 

출처
BEM — Block Element Modifier - https://getbem.com/