BEM CSS 방법론 (Block_Element–Modifier)
BEM (Block, Element, Modifier)은 웹 개발 쓰이는 CSS 방법론중 하나입니다.
Block__Element–Modifier의 형태를 가집니다.
블록 (Block)
- 해당 블록의 목적을 정의 (menu, button)
- 상태 정의는 불가 (red, big)
- 재사용 할 수 있는 독립적인 구성 요소
- 클래스 선택자 사용
- 외부 여백(margin) 불가
- 중첩 가능
- 계층 가능
기본 블록
<div class="error"></div> // O
<div class="red-text"></div> // X
중첩과 계층 블록
<!-- 'header' block -->
<header class="header">
<!-- 'logo' block -->
<div class="logo"></div>
<!-- 'search-form' block -->
<form class="search-form"></form>
</header>
<body class="page">
<header class="header page__header"></header>
<footer class="footer page__footer"></footer>
</body>
엘리먼트 (Element)
- 재사용과 독립적인 사용 불가
- 해당 블록의 목적을 정의 (menu, button)
- 상태 정의는 불가 (red, big)
- 중첩 가능
- 계층 가능
- __로 구분합니다.
기본 엘리먼트
<!-- O -->
<form class="search-form">
<div class="search-form__content">
<input class="search-form__input">
<button class="search-form__button">
Search
</button>
</div>
</form>
<!-- O -->
<form class="search-form">
<div class="search-form__content">
<input class="search-form__content-input">
<button class="search-form__content-button">
Search
</button>
</div>
</form>
<!-- X -->
<form class="search-form">
<div class="search-form__content">
<input class="search-form__content__input">
<button class="search-form__content__button">
Search
</button>
</div>
</form>
중첩과 계층 엘리먼트
<div class="block">
<div class="block__elem1">
<div class="block__elem2">
<div class="block__elem3"></div>
</div>
</div>
</div>
<div class="block">
<div class="block__elem1">
<div class="block__elem2"></div>
</div>
<div class="block__elem3"></div>
</div>
블록과 엘리먼트 차이
블록 요소에 직접 스타일을 주지 않고 엘리먼트 요소에 선언합니다.
<body class="page">
<header class="header page__header"></header>
<footer class="footer page__footer"></footer>
</body>
<style>
.page__header {
padding:20px;
}
.page__footer {
padding:50px;
}
</style>
옵션
엘리먼트가 블록이 될 수도 있습니다.
모든 블록 요소가 엘리먼트를 가지지 않아도 됩니다.
<div class="search-form">
<input class="input">
<button class="button">Search</button>
</div>
수식,상태 (Modifier)
- 블록 또는 요소의 모양, 상태 또는 동작을 정의합니다.
- 크기, 모양, 테마등을 표시합니다.
- — 로 구분합니다.
기본 Modifier
<div class="block block--mod">
<div class="block block--size-box block--shadow-yes"></div>
</div>
<div class="block--mod"><div>
예제
<form class="form form--theme-xmas form--simple">
<input class="form__input" type="text" />
<input
class="form__submit form__submit--disabled"
type="submit" />
</form>
<style>
.form {}
.form--theme-xmas {}
.form--simple {}
.form__input {}
.form__submit {}
.form__submit--disabled {}
</style>