Block, Element, Modifier의 약자
사용자 인터페이스를 독립된 블록으로 분리하여,
복잡한 페이지도 간단하고 신속하게 개발하는 것이 목적
클래스 셀렉터 사용 (id 사용X)
상세도는 균일하게 유지한다. (요소형 X, 더블 클래스 명시 X)
이름 규칙
어떤 목적으로 사용하는지를 의미하는 이름 (이 Element는 menu의 item이다, 에러발생 등)
형태나 위치, 모양을 나타내는 이름 X
ex) red-text, menu__bold
(X), error
(O)
__
)_
)리액트 스타일 이름 규칙
TIP!!
논리적이고 기능적으로 독립한 페이지 모듈
특정 콘텍스트에 의존하지 않으며 어디에서도 재사용할 수 있는 부품
레이아웃에 관한 스타일링 X
-> position, float, margin 등 지정하면 안됨 (Mix기법 사용권장)
이름 규칙 : 영소문자 + 하이픈(-)
ex) menu
, global-nav
Block 중첩 가능 : 중첩의 수에 제한은 없다.
but, 중첩에 의한 Block간의 자식 셀렉터 사용이 많아지면 상세도가 높아진다.
-> Mix 기법으로 해결
// 각각 독립된 Block으로 이루어진 Block
// 모든 Block이 Element를 갖고 있지 않음
<div class="search-from">
<input class="input">
<button class="button">Search</button>
</div>
이름 규칙 : block이름 상속 + 언더스코어 2개(__
) + 하이픈(-)
ex) menu__item
, global-nav__link-item
Element안에 Element가 중첩(nest)된 이름 사용 X
ex) menu__item__link
(X), menu__item, menu__link
(O)
Element 수가 많을 경우, 특정 Element를 Block으로 상속시켜 복잡성을 줄인다.
Block 혹은 Element의 모습, 상태, 움직임을 정의하는 선택적인 요소
단독 사용 불가X
이름 규칙 : Block/Element 클래스 + 언더스코어(_
) + Modifier 이름(키-값/불값 규칙)
ex) block-name__element-name_moditier-name
키-값 규칙 : 언더스코어(_
)
size_s
, theme_caution
, text_large
, color-theme_caution
directions_rignt-to-left
, position-bottom-right
불값 규칙 : 한 단어로 완결
disabled
, focused
, actived
단일한 Dom 노드에 다른 여러 BEM 엔티티를 추가한 인스턴스
하나의 HTML 요소에 역할이 다른 여러 클래스가 붙어 있는 상태
이름 규칙 : B/E클래스 + 더블언더스코어(__
) + B/E클래스
코드를 복제하지 않고도 여러 BEM 엔티티의 동작이나 스타일을 조합한다.
기존 BEM 엔티티로부터 새로운 모듈을 만든다.
그룹 셀렉터 대신 Mix 사용
Mix로 처리할 수 없는 경우 (Element 안에 다른 Block 중첩)
-> __inner
라는 Element를 새로 만들고 그 안에 다른 Block 중첩
Modifier 이름 생략 X
position, margin 등 레이아웃(다른 요소와의 위치관계 조정)과 롼련된 변경의 경우
ex) 사이의 여백 조정
레이아웃이 아닌, 해당 Block 안에서 완결되는 변경의 경우
ex) 빨간 테두리선 추가