BEM(Block, Element, Modifier)는 컴포넌트 기반 접근 방식이다. 기본 아이디어는 사용자 인터페이스(UI)를 독립된 블록으로 나누는 것이다. 이를 통해 복잡한 UI도 쉽고 빠르게 개발할 수 있으며, 기존 코드를 재사용할 수 있는 장점이 있다.
BEM은 모듈을 Block, Element, Modifier 단위로 분해하며, 각 앞 글자를 따서 BEM으로 부른다. BEM은 러시아 Yandex사에서 개발한 방법론으로 실제로 이 방법에 기반한 CSS 설계 기법이 널리 사용되고 있지만 BEM은 CSS에만 국한되지는 않는다.
그렇다면 BEM의 공통 규칙과 모듈의 개별 규칙을 알아보자.
CSS style을 위한 BEM 공통 규칙
– ID 셀렉터와 태그 셀렉터를 사용하지 않는다. – 네스팅된 셀렉터 사용을 최소화한다. – CSS 클래스 네이밍 컨벤션을 사용하여 이름 충돌을 피하고 셀렉터의 목적을 명확하게 한다. – Blocks, Elements, Modifiers를 구분하여 사용한다. – Blocks를 재사용한다.
BEM의 네이밍 규칙
모두 소문자를 사용하며, 두 단어는 하이픈(-)으로 연결한다.
Block
–
block, block-two
Element
block 이름을 상속받아 언더스코어 두 개(__)로 연결
block__element, block-two__element-two
Modifier
Block/Element 이름 상속받아 언더스코어 하나(_)로 연결. 키-값 쌍은 스네이크 케이스(_)를 사용.
block/element의 모양이나 동작을 정의하는 모듈이다. modifier는 선택적 요소이므로 사용하지 않아도 상관없지만 단독으로는 사용할 수 없고 block/element와 함께 사용해야 한다. 같은 block이라도 modifier에 따라 모양이 변할 수 있으며, modifier는 런타임이나 block에 따라 바뀔 수 있다. modifier 클래스 이름은 형태(크기, 색, 상태, 동작)을 나타내야 한다. 형태로 나누면 boolean, key-value 두 가지가 있으며, 각각의 예는 다음과 같다.
modifier의 수는 제한이 없으므로 여러 개를 붙일 수 있지만 동일한 스타일은 중복하지 않는다.
MIX
mix는 하나의 요소에 역할이 다른 여러 클래스를 사용하는 기법이다. 장점은 코드를 복사하지 않고 기존의 스타일과 조합해서 새로운 모듈로 사용할 수 있다. block+element, block+block, element+element 등의 mix를 사용할 수 있으며, 샘플 코드를 통해 확인할 수 있다.
display는 요소를 보여주고 숨기거나 위치를 설정하기 위한 옵션으로, display만 잘 알아도 레이아웃의 많은 부분을 해결할 수 있습니다.
이번 포스팅에서 display의 속성인 inline, flex, inline-flex, block, inline-block, grid, inline-grid, none의 구현을 통해 각각의 표시 방식을 알아보도록 하겠습니다.
알아보기 편하도록 배경은 블랙, 요소는 각각 레드, 오렌지, 그린으로 표현하겠습니다.
inline : inline으로 표시(width는 요소 크기) block : block으로 표시 inline-block : inline + block으로 표시 flex : 자식 요소를 모두 inline-block으로 설정 inline-flex : inline + flex(전체 width는 자식 width의 합) grid : flex처럼 한 방향이 아닌 가로, 세로로 설정 가능한 레이아웃 inline-grid : inline + grid(전체 width는 자식 width의 합) none : 표시하지 않음(공간을 차지하지 않음)