나름대로 공부한답시고 유튜브나 인터넷 강의 이것저것 보다가 BEM에 대해서 접한 적이 있다. 그때는 그냥 아 이런 거구나 하고 넘어갔었는데, 멘토/멘티 직무캠프를 하면서 BEM 구조에 대해 배우고 활용할 기회가 생겼다.
BEM 구조가 뭐냐? 먼저 BEM은 Block, Element, Modifier의 약자다. 즉, 이 세가지로 구성된 이름을 짓는 것이다. 작성할 때는 Block__Element--Modifier
이런 식으로 작성하면 된다. __ 와 --로 구분을 해주는 것이다.
Block : block은 그 자체로 의미가 있는 독립적인 엔티티이다. 예를 들면 'header', 'container', 'menu' 이런 것들. 독립적인 엔티티이기 때문에 block 그 자체로 단독적으로 사용이 가능하다.
Element : element는 독립적인 의미가 있는 건 아니지만 의미상 해당 block에 연결된 일부다. 예를 들면 'menu item', 'list item', 'header title' 이런 것들이다. 작성할 때는
.menu__item { ... }
이렇게 쓰면 된다. menu는 block이고 item은 element다.
Modifier : modifier는 block이나 element의 속성을 담당하며, 모양이나 행동을 변경할 때 사용한다. button을 예로 들어보자.
.button {
display: inline-block;
border-radius: 3px;
padding: 7px 12px;
border: 1px solid #d5d5d5;
background-image: linear-gradient(#eee, #ddd);
font: 700 13px/18px Helvetica, arial;
}
.button--state-success {
color: #fff;
background: #569e3d linear-gradient(#79d858, #569e3d) repeat-x;
border-color: #4a993e;
}
.button--state-danger {
color: #900;
}
BEM을 사용하여 button이라는 block에 일반 버튼과 두가지 상태의 버튼의 스타일을 지정해줬다. block--modifier-value
구문을 사용했다.
나도 BEM 구조를 제대로 잘 사용하는 건 아니지만 여기까지만 이해해도 반은 이해했다고 생각한다.
BEM이 뭔지는 이제 알겠는데 그럼 왜 굳이 BEM을 사용해서 CLASS를 명명하는 것일까? 단점도 있겠지만 우선 장점부터 살펴보자면,
&__list, &__title
이런 식으로 작성을 할 수 있어 어떤 block의 요소인지 바로 알 수가 있다.BEM구조에 대해서 공부하면서 참고했던 링크들이다.
클래스 네임을 생각하는 데 도움을 줄 수 있는 링크 1
클래스 네임을 생각하는 데 도움을 줄 수 있는 링크 2
예시를 통한 BEM
진작 한번 정리를 해볼걸!
BEM구조가 뭔지 이해하고 클론코딩할 때 사용했는데도 제대로 사용하지 못했다. 쓰다보니 헷갈리기도 하고 이게 맞나? 하는 생각이 들기도 하고 그랬던 기억이 난다. 지금 생각해보면 와 진짜 반만 이해했구나 싶은 생각도 들고..
다음에 또 내가 뭔가를 하게 된다면 그땐 제대로 활용하고 싶다.