개인 공부 저장용으로, 글의 흐름과 내용이 어지러울 수 있습니다😂 이해해주세요!
CSS Naming 방법론을 알아보기 전,
대표적인 Naming Case는 어떤 것들이 있는 지 알아보자
-
(하이픈)으로 단어를 연결하는 표기법_
(언더바)로 구분하는 표기법BEM이란? CSS 제작 방법론으로, 일종의 네이밍 컨벤션이라고 볼 수 있다. 개발, 디버깅, 유지보수를 위해 가능한 명확하게 네이밍하는 것이 그들의 목표이다.
-
(하이픈)으로 연결하여 작명/* 잘못된 예 */
.redBox{
color: red;
}
/* 올바른 예 */
.red-box{
color: red;
}
형태>의미>순서_상태
를 기본순서로 사용/* Naming 조합 잘못된 예 */
cancle_btn_off_01.gif
.msgbox-off-toggle
/* Naming 조합 올바른 예 */
btn_cancle_01_off.gif
.msgbox-toggle-off
_
(언더바) 조합은 파일, 폴더, 이미지에 사용/* 잘못된 예 */
customerService
/* 올바른 예 */
customer_service
/* 잘못된 예 */
cyber_center_1, cyber_center_2
/* 올바른 예 */
cyber_center_01, cyber_center_02
menu
HTML
<div class="menu">...</div>
CSS
.menu {
color: red;
}
menu__item
동일한 블록의 동일한 요소는 동일한 이름을 갖는다. 예를 들어, 메뉴 블록의 모든 메뉴 항목은
menu__item
이라고 한다
HTML
<div class="menu">
...
<span class="menu__item"></span>
</div>
CSS
.menu__item {
color: red;
}
__
(이중 밑줄)로 Block Name과 구분menu__item_visible
menu__item_type_radio
HTML
<div class="menu">
...
<span class="menu__item menu__item_visible menu__item_type_radio"> ... </span>
</div>
CSS
.menu__item_visible {
}
.menu__item_type_radio {
}
_
(단일 밑줄)로 Block 또는 Element Name과 구분_
(단일 밑줄)로 Modifier Name과 구분js-
라는 이름을 사용하도록 하자<div class="site-navigation js-site-navigation"></div>
//the JavaScript code
const nav = document.querySelector(".js-site-navigation");
js-
클래스를 보는 사람은 JS 코드에서 DOM element와 관계가 있구나를 이해할 수 있음
<a href="http://css-tricks.com" class="btn btn--big btn--orange">
<span class="btn__price">$9.99</span>
<span class="btn__text">Subscribe</span></a
>
/* Block component */
.btn {
}
.btn__price {
}
.btn--orange {
}
.btn--big {
}
/* 잘못된 예시! */
.nav .nav__listItem .btn--orange {
background-color: green;
}
실제 사이트에 들어가서 CSS 문서를 찾아보고, BEM 네이밍을 활용해보자
/* button class 일부 */
.btn-center {}
.btn-left {}
.btn-right {}
.btn-left-1 {}
.btn-left-2 {}
.btn-right-ab1 {}
.btn-right-ab2 {}
.error-btn {}
위 btn classes를 BEM naming rules에 맞춰 변경해보자
_
(단일 밑줄)로 구분/* button class 일부 */
.btn_center {}
.btn_left {}
.btn_right {}
.btn_01_left {}
.btn_02_left {}
.btn_ab_01_right {}
.btn_ab_02_right {}
.btn_error {}
https://en.bem.info/methodology/naming-convention/
bem 공식 사이트에 들어가서 개발자 환경을 켜보면
bem 규칙에 맞춰 네이밍을 한 것을 볼 수 있는데,
보기가 아주 편함👍
<!-- footer source를 따왔다 -->
<footer class="footer page__foot">
<div class="footer__layout">
<ul class="footer__community">
<li class="footer__channel">
<a class="footer__channel-link" href="https://telegram.me/bem_en"
>Telegram</a
>
</li>
<li class="footer__channel">
<a
class="footer__channel-link"
href="https://www.facebook.com/groups/bem.info/"
>Facebook</a
>
</li>
<li class="footer__channel">
<a class="footer__channel-link" href="https://twitter.com/bem_en/"
>Twitter
</a>
</li>
</ul>
</div>
</footer>
footer(Block)
footer(Block)__layout(형태가 아닌 목적-Element)
footer(Block)__community(형태가 아닌 목적-Element)
footer(Block)__channel(형태가 아닌 목적-Element)
footer(Block)__channel-link(단어연결은 하이픈(-)사용)
<ul class="article__list">
<li class="article__list-item">
<p class="article__paragraph">
<a class="article__link" href="#introduction">Introduction</a>
</p>
</li>
<li class="article__list-item">
<p class="article__paragraph">
<a class="article__link" href="#try-pattern-parser">Try pattern-parser</a>
</p>
</li>
<li class="article__list-item">
<p class="article__paragraph">
<a class="article__link" href="#quick-start">Quick start</a>
</p>
</li>
<li class="article__list-item">
<p class="article__paragraph">
<a class="article__link" href="#api-reference">API reference</a>
</p>
</li>
</ul>
ex) id="btnSch" (x) id="btnGnbSearch" (o)
나쁜예: .footerBanner / .contentHeader / .contentTit (x)
좋은예: #footer .banner / #content .header .tit (o)
#wrapper - 페이지 전체 영역 그룹핑
#header - 머리글 영역
#container - 본문영역 그룹핑
#content - 주용컨텐츠 영역
#footer - 바닥글
#popWrapper - 팝업 페이지 전체 영역 그룹핑
#popHeader - 팝업 머리글 영역
#popContainer - 팝업 본문영역 그룹핑
#popContent - 팝업 주용컨텐츠 영역
#popFooter - 팝업 바닥글
#gnbNav - 글로벌 네비게이션 영역 메뉴
#lnbNav - 로컬 네비게이션 영역의 메뉴
#snbNav - 사이드 네비게이션 영역의 메뉴