먼 옛날 퍼블리싱 과외를 받던 시절...
과외 선생님께서 BEM 방식을 추천해 주셔서 그냥 뭐가 뭔지 모르는 상태로 알려주시는대로 썼던 기억이 있다.
최근 다시 포트폴리오를 만들면서 BEM 을 어떤식으로 써야 좋을지 헷갈려서
또, BEM 방식으로 코드를 짜볼 때에도 감이 잘 안 올때가 있어서
내 스스로가 헷갈리지 않기위해 정리를 해보았다!
BEM 이란?
BEM이란 CSS 방법론 중 하나로, Blcok, Element, Modifier 의 약자이다.
Block (블럭)
블럭은 그 자체로 의미가 있는 독립적인 부분이다.
( 예시 : header, container, menu, checkbox, input )
블럭은 블럭을 감쌀 수 있다.
예를들어 header 라는 블럭 안에 logo 라는 블럭이 들어갈 수 있다.
<!-- 이 헤더는 독립전인 컴포넌트이다. -->
<div class="header">
<!-- 이 로고는 다른 곳에서도 독립적으로 사용할 수도 있기에 블럭으로 지정한다. -->
<div class="logo"></div>
</div>
Element (요소)
요소는 독립적인 의미가 없고, 해당 블럭과 의미론적으로 연결된 블록의 일부이다.
블럭에 의존적인 형태이므로, 연결된 블록 안에서만 의미를 가진다.
블럭 뒤에 __를 붙여 사용한다.
( 예시 : header__title, menu__item , list__item, checkbox__caption )
<!-- 이 헤더는 독립전인 컴포넌트이다. -->
<div class="header">
<!-- 이 로고 요소는 헤더 안에서만 의미를 가진다.-->
<div class="header__logo">
<!-- 이 로고는 다른 곳에서도 독립적으로 사용할 수도 있기에 블럭으로 지정한다. -->
<div class="logo"></div>
</div>
</div>
Modifier (속성)
블럭, 또는 요소의 속성이다.
예를들어 해당 부분이 다르게 동작을 하거나, 색상 등 스타일이 다른 경우 사용한다.
블럭이나 요소 뒤에 --를 붙여 사용한다.
( 예시 : header--fixed, nav__item--active, form__submit--disabled )
속성의 경우 두가지 방법이 있었다.
3-1. 불리언(Boolean) 타입
예를들어 아래 예시에 있는 것과 같이, active 상태로 속성을 주는 것을 말한다.
active 상태가 true라고 가정하고 사용하는 것이다.
<div class="nav">
<ul class="nav__list-wrap">
<!-- 이 아이템은 --active로 속성을 주어 스타일을 다르게 준다. -->
<li class="nav__item nav__item--active">메뉴 1</li>
<li class="nav__item">메뉴 2</li>
</ul>
</div>
3-2. 키-밸류 (key-value) 타입
이 경우 하이픈으로 성질-내용을 작성한다.
예를들어 상태(state)가 성공(success)인 경우 state-success 로 초록색 버튼을,
상태가 경고(danger)인 경우 state-danger 로 주면서 빨간색 버튼을 만들어 준다.
<!-- 이 버튼은 state-success 와 state-danger로 속성을 따로 주어 스타일을 다르게 준다. -->
<button class="button button--state-success">
Success button
</button>
<button class="button button--state-danger">
Danger button
</button>
.
.
.
이상!
이렇게 따로 공부하면서 정리하다 보니...
내가 원래 작성했었던 코드들 에서도 틀렸던 것 같은 부분들이 꽤 있는 것 같다. 😅
새로 만드는 포트폴리오 사이트에선 이 페이지를 보면서 최대한 맞추려고 노력해 봐야겠다! 💪

- 끝 -
'CSS' 카테고리의 다른 글
[CSS] 텍스트에 그라데이션 효과 주기 (0) | 2023.03.31 |
---|---|
[CSS] 사파리에서 기본 input 스타일 제거하기 (0) | 2023.02.14 |