<div class="header">
<div class="menu">....</div>
<div class="search">....</div>
</div>
.header__logo { … }
.header__menu { … }
.header__search { … }
.header__login { … }
/* block 이름이나 element 이름이 길 경우 – 하이픈으로 연결한다. */
.block-name__element-name {}
/*
탭 메뉴가 다른 영역에서 다른 스타일로 사용된다면,
메인 속성을 복사하여 추가 하거나, sass의 @extend를 활용하여 속성을 상속 받을 수 있다
*/
.header__navigation {
background: #008cba;
padding: 1px 0;
margin: 2px 0;
}
.header__navigation‐‐secondary {
@extend .header__navigation;
background: #dfe0e0;
}
<div class=”header”>
<div class=”search-form header__search-form”></div>
</div>
재사용성과 직관적인 클래스(class): BEM은 이해하기 쉽고, 직관적인 클래스 이름의 작명을 하기가 쉽다. 또한, Block 기반의 스타일로 Block을 다른 곳에 재사용하기 쉽다.
클래스(class) 중복 방지: BEM은 Block 단위의 class name을 통해 CSS의 원치 않은 상속을 제한하며, 클래스 네임 중복을 방지합니다.
body,p,h1,h2,h3,h4,h5,h6,ul,ol,li,dl,dt,dd,table,th,td,form,fieldset,legend,input,
textarea,button,select{margin:0;padding:0}
body,input,textarea,select,button,table{font-size:14px;line-height:1.25}
body.s,.s input,.s textarea,.s select,.s button,.s table{font-family:helvetica}
body{position:relative;background-color:#fff;color:#000}
body.s{-ms-text-size-adjust:none;-webkit-text-size-adjust:none}
img,fieldset{border:0}
ul,ol{list-style:none}
table{border-collapse:collapse}
em,address{font-style:normal}
a{color:inherit;text-decoration:none}
#content {
width: 80%;
float: left;
}
#aside {
width: 20%
}
.l-fixed #content {
width: 600px;
margin-right: 10px;
}
.l-fixed #aside {
width: 200px
}
<div class="forder">
<span>Forder Name</span>
</div>
<div class="box">
...
</div>
<div class="basket">
...
</div>
.folder >span {
padding-left: 20px;
background: url(icon.png);
}
<div class="btn_area">
<a href="#" class="btn btn_good is-active">좋아요버튼</a>
<a href="#" class="btn btn_bad">나빠요버튼</a>
</div>
.btn {
display: inline-block;
background:#ddd;
border-radius:4px;
}
.btn.is-active{
background:#43f837;
}
.btn.is-hidden {
display: none;
}
.mod {
border: 1px solid;
}
.mod {
border-color:blue
}
표현과 구조의 분리(Separate structure and skin)
표현은 시각적 속성(colors, fonts, shadows, gradients 등)을 얘기하며, 구조는 (width, height, padding, margin 등) 요소의 크기 및 위치를 말함.
컨테이너와 콘텐츠의 분리(Separation of Container and Content)
컨테이너란 스타일의 적용 범위를 제한하는 범주이며, 내용물이란 컨테이너로 인해 제한된 스타일의 범주를 말한다.
확장성: OOCSS를 사용하면 각 요소를 고려하지 않고 여러 요소를 자유롭게 혼합하고 다시 적용 할 수 있다. 따라서 한 프로젝트에서 다른 개발자로 프로젝트가 전달 될 때마다 CSS를 더 많이 쌓는 대신에, 프로젝트의 신규 사용자는 이전에 이미 추상화 한 것을 다시 사용할 수 있다.
재사용성과 속도: CSS 파일은 웹 사이트가 복잡 해짐에 따라 기하 급수적으로 확장되는 경우가 있다. 특이성은 중요하지만 CSS 파일에는 필요한 것보다 더 많은 정보가 포함되는 경우가 많다.
OOCSS는 DRY(Don't Repeat Yourself)에 입각하여, CSS의 재사용성과 효율 및 속도를 향상시킬 수 있다.