
CSS방법론은 대규모 프로젝트나 팀 작업에서 css코드의 유지보수성, 재사용성, 확장성을 향상시키기 위해 사용되는 일련의 규칙을 의미한다.
CSS방법론에는 크게 OOCSS, BEM, SMACSS로 나눠져있다.
OOCSS(Object Oriented CSS)
CSS를 모듈(module)방식으로 작성하여 중복을 줄이는 방식의 방법론
구조와 스타일 분리
스타일의 구조(레이아웃)과 테마(스킨)을 분리해야한다.
ex) 버튼의 기본 레이아웃과 버튼의 테마(배경색, 테두리)를 분리하여 스타일링 해야함
컨테이너와 콘텐츠 분리
스타일은 특정 위치나 컨테이너에 의존적이지 않아야한다.
ex) 사이드바에만 사용되는 특정 스타일 대신 일반적으로 재사용 가능한 스타일을 만들어야한다.
재사용성
중복된 디자인 요소를 따로 빼내어 작성하기 때문에 코드 중복을 줄이고 일관된 디자인을 유지할 수 있다.
확장성
새로운 테마나 레이아웃 추가하기가 쉬워진다.
유지보수
변경사항이 발생할 때, 특정부분만 수정하면 되므로 유지보수가 용이하다.
최적의 성능
코드 재사용성이 높아져 적은 코드량으로 최적의 성능을 보여준다.
<!-- 기존 방식 -->
<div class="header_btn header_skin">haeder</div>
<div class="footer_btn footer_skin">footer</div>
<!-- OOCSS 적용 -->
<div class="btn skin hader">hader</div>
<div class="btn skin footer">footer</div>
.btn > 공통 버튼 스타일 정의
.skin > 공통 스킨 스타일 정의
BEM(Block Element Modifier)
블록(block), 요소(element), 상태(modifier)로 구분하여 클래스 이름을 작성하는 방식
각 부분을 __와 --로 구분하여 짓게 된다.
어떻게 보일지에 초점을 두기 보단, 어떤 목적인가에 초점을 두어 이름을 짓는다.
블록은 웹페이지의 독립적인 구성 요소를 의미하며,
헤더, 메뉴, 버튼 등과 같이 재사용 가능한 높은 수준의 컴포넌트를 나타난다
.header {..}
.menu {..}
.button {..}
블록 내부의 구성 요소로, 해당 e3블록의 일부로만 의미를 가지며,BEM에서는 블록과 요소 사이에 __(더블 언더스코어)를 사용하여 연결한다.
.header__tap {..}
.menu__item {..}
블록 또는 요소의 다양한 상태와 변형을 나타나는데 사용한다.
상태 표현할 때 --(더블대시) 을 사용한다.
.header__tap--active {..}
.menu__item--disabled {..}
SMACSS (Scalable and Modular Architecture for CSS)
대규모 웹 사이트와 애플리케이션의 CSS를 유지 관리하기 쉽게 만드는 데 초점을 맞춘 CSS 설계 방법론이다.
SMACSS의 핵심은 CSS를 여러 카테고리로 나누어 관리 및 확장성을 높이는 것을 목표로 한다.
SMACSS는 작성할때 CSS를 비슷한 종류끼리 모아 5가지 스타일로 나누고
각 유형에 맞는 선택자와 작명법, 코딩기법을 제시한다.
body, form, p, table, button, fieldset, input ... {
margin: 0;
padding: 0;
}
// 주요 요소 작성
#header {
width: 400px;
}
#aside {
width: 40px;
}
// 하위 요소 작성
.l-width #header {
width: 650px;
padding: 10px;
}
.l-width #aside {
width: 100px
}
.module { ... }
.module-name { ... }
.module-number { ... }
.is-error { ... }
.is-hidden { ... }
.is-disabled { ... }
.is-tab-active { ... }
/*공통 root 역할을 하는 main.css*/
.box {
border: 1px solid; //border type 만 공통으로 설정해놓고
}
/*테마 별로 재정의 blue theme.css*/
.box {
border-color: blue;
}
css를 익히는 과정에서 방법론에 대해 배워봤는데 이 외에도 다양한 방법론이 존재한다.
모든 방법론이 결코 정답은 아니며, 프로젝트 성향,팀의 요구사항에 따라 가장 잘맞는 방법을 선택하는게 우선시 되어야하며 어느 방법론으로 작성하는것이 좋을지 빠르게 생각해내는게 능력중 하나다!