block__element--modifier
구조에 맞춰 class를 쓰는 방식.
최대한 단일 클래스로 선택자를 불러와 특이성을 낮춰
!important를 쓰는 일을 줄인다.
1.구조
1).Block
-독립적인 컴포넌트를 의미
-다른 블록으로 들어갈 수도 있지만 독립적으로도 쓰임
-단어를 조합 시 하이픈으로 연결
-목적에 따라 이름을 정해줄 것
-환경에 따라 영향을 받으면 안됨
2).Element
-의존적인 구성요소를 의미
-블록이 있어야 의미를 가지기 때문에 분리해 재사용할 수 없음
-목적에 따라 이름을 정해줄 것
-단어끼리 조합은 하이픈으로 함
-필수 작성 아님
3).Modifier
-Block이나 Element의 속성을 의미 (모양, 동작, 상태)
-boolean이나 key-value타입으로 작성함
-필수 작성 아님
2.사용법
-css 선택자를 쓸 때 다른 block, element에 종속되지 않도록 쓰기
.header-block .header__btn {} // x
.header__btn {} // o
-scss와 함께 쓰면 더 간단하게 사용하기가 쉽다.
.block {
// styles for .block
&__element {
// styles for .block__element
&--modifier {
// styles for .block__element--modifier
}
}
&--modifier {
// styles for .block--modifier
}
}
-요소의 일부를 변경해야 할 때 block에다가 말고
그 element에 대해 새로운 modifier이 붙은 클래스를 추가하는게 더 편하다고 한다. (img, figcaption 참조)
<figure class="photo">
<img class="photo__img photo__img--framed" src="me.jpg">
<figcaption class="photo__caption photo__caption--large">Look at me!</figcaption>
</figure>
<style>
.photo__img--framed {
/* incremental style changes */
}
.photo__caption--large {
/* incremental style changes */
}
</style>
-block의 상태에 따라 하위 요소들이 바뀌는 것이라면 다음과 같이 바꾸면 된다.
<!-- DO THIS -->
<figure class="photo photo--highlighted">
<img class="photo__img" src="me.jpg">
<figcaption class="photo__caption">Look at me!</figcaption>
</figure>
<style>
.photo--highlighted .photo__img { }
.photo--highlighted .photo__caption { }
</style>
<!-- DON'T DO THIS -->
<figure class="photo">
<img class="photo__img photo__img--highlighted" src="me.jpg">
<figcaption class="photo__caption photo__caption--highlighted">Look at me!</figcaption>
</figure>
<style>
.photo__img--highlighted { }
.photo__caption--highlighted { }
</style>
참고
-https://css-tricks.com/bem-101/
-https://sparkbox.com/foundry/bem_by_example
-https://sparkbox.com/foundry/bem_css_organization
: 알기 쉬운 예제를 통해 오해를 해결하기 좋음
-https://en.bem.info/libraries/classic/bem-components/6.0.0/desktop/button/
: bem 클래스명 붙일 때 도움됨
-https://en.bem.info/methodology/naming-convention/#element-modifier-name
: modifier에 대한 세부적인 예시
'CSS' 카테고리의 다른 글
[CSS] input 자동완성 시 적용되는 기본 스타일 초기화하기 (1) | 2024.02.15 |
---|---|
[CSS] overflow (0) | 2020.08.15 |
[CSS] 간단한 네비게이션바 만들기 (4) 가상 요소 이용하기 (0) | 2020.08.13 |
[CSS] 글꼴 (0) | 2020.08.12 |
[CSS] 간단한 네비게이션바 만들기 (3) display: inline-block이용하기 (0) | 2020.08.12 |