안녕하세요, 일루넥스 개발팀 정민지입니다.
오늘은 지난 번 다루었던 SMACSS에 이어 OOCSS에 대해 소개해보려고 합니다.
OOCSS(Object Oriented CSS)는 Nicole Sullivan에 의해 개발된 프레임워크로,
CSS를 모듈 방식으로 코딩하여 중복을 최소화하는 기법입니다.
OOCSS의 작성 원칙은 다음 두 가지입니다.
기본적인 구조와 반복 정의되는 외형은 따로 정의합니다.
#button {
width: 200px;
height: 50px;
padding: 10px;
border: solid 1px #ccc;
background: linear-gradient(#ccc, #222);
box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
}
#box {
width: 400px;
overflow: hidden;
border: solid 1px #ccc;
background: linear-gradient(#ccc, #222);
box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
}
#widget {
width: 500px;
min-height: 200px;
overflow: auto;
border: solid 1px #ccc;
background: linear-gradient(#ccc, #222);
box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
}
위의 세 요소는 각각 독자적인 스타일이 있고, 재사용할 수 없는 ID 선택자를 사용하고 있습니다.
또한 각 요소에 공통 스타일도 다수 존재합니다.
이를 OOCSS의 원칙에 따라 공통 스타일을 추출하면 다음과 같이 변경할 수 있습니다.
이제 모든 요소는 ID가 아닌 클래스를 사용합니다.
또한 공통 스타일의 경우 `.skin`으로 묶였고, 불필요한 반복이 사라졌습니다.
<!-- Bad -->
<h2>...</h2>
h2{ font-size: 16px; }
<!-- Good -->
<h2 class="title">...</h2>
<span class="title">...</span>
.title { font-size: 16px; }
<button type="button" class="btn-base cart">장바구니</button>
<button type="button" class="btn-base but">바로구매</button>
/* 버튼 구조 ; 공통적인 구조 지정 */
.btn-base { ... }
/* 버튼 외형 */
.cart { ... }
.buy { ... }
.sidebar h3
같은 선택자 사용하지 않기)div.header
, h1.title
!important
사용 피하기많은 CSS 코드가 재사용되면서 코드의 길이가 줄어들게 됩니다. 즉, CSS 파일 크기가 작어져 속도를 향상시킬 수 있습니다.
새로운 요소를 추가할 때, 기존 모듈을 통해서 재사용이 가능하고 쉽게 확장 가능하여 유지보수성이 높아집니다.
다중으로 클래스를 사용하기 때문에 가독성이 떨어질 수 있습니다.
이를 보완하기 위해 OOSass(OOCSS + Sass)와 같은 방법이 제시되기도 했습니다.
지금까지 CSS 방법론 중 OOCSS에 대해 알아보았습니다.
읽어주셔서 감사합니다.