BEM(Block, Element, Modifier)은 CSS 클래스 명명 규칙으로, 코드를 읽기 쉽게 하고, 재사용성과 유지보수를 쉽게 하기 위해 고안되었습니다. BEM은 웹 개발 시 CSS 구조를 체계적으로 관리하고, 명확한 규칙을 적용할 수 있는 방법론입니다.
BEM의 세 가지 주요 개념인 Block, Element, Modifier에 대해 자세히 설명드릴게요.
예시: header, menu, button, card 등.
<div class="menu">...</div>
예시: menu__item, menu__link, button__icon 등.
<div class="menu">
<ul class="menu__list">
<li class="menu__item">Home</li>
<li class="menu__item">About</li>
</ul>
</div>
menu__list, menu__item은 블록 menu의 하위 요소입니다.예시: button--large, menu__item--active 등.
<div class="menu">
<ul class="menu__list">
<li class="menu__item menu__item--active">Home</li>
<li class="menu__item">About</li>
</ul>
</div>
menu__item--active는 menu__item의 모디파이어로, 활성화된 메뉴 아이템을 나타냅니다.BEM에서는 클래스 이름을 세 가지 주요 형식에 맞게 작성합니다:
1. 블록 이름: 독립적인 UI 구성 요소 (예: menu).
2. 엘리먼트 이름: 블록 안의 구성 요소를 나타내며, 블록 이름 뒤에 두 개의 밑줄(__)을 사용하여 구분 (예: menu__item).
3. 모디파이어 이름: 블록이나 엘리먼트의 변형이나 상태를 나타내며, 이름 뒤에 두 개의 대시(--)를 사용하여 구분 (예: menu__item--active).
.block.block__element.block--modifier 또는 .block__element--modifier<!-- HTML 구조 -->
<div class="card card--highlight">
<h2 class="card__title">Card Title</h2>
<p class="card__description">Card description text</p>
<a href="#" class="card__link">Read more</a>
</div>
/* CSS 스타일 */
.card {
background-color: #fff;
padding: 20px;
}
.card--highlight {
background-color: #f0f0f0;
}
.card__title {
font-size: 24px;
}
.card__description {
font-size: 16px;
}
.card__link {
color: blue;
}
menu, card).menu__item, card__title).menu--active, card--highlight).BEM은 복잡한 CSS 구조를 체계적이고 예측 가능하게 만들어, 대규모 프로젝트나 협업 시 매우 유용합니다.