* SMACSS (Scalable & Modular Architecture for CSS)
SMACSS는 CSS를 5가지로 분류/범주화하여 작명규칙 등 스타일 가이드를 제시한 방법론이다.
- Bass : 기본스타일(Reset, Default, Variables, Mixins) 등 ID, class 셀렉터의 정의 없이 기본 스타일 구축
- Layout
- 페이지 분할 요소 스타일 구축
- l- ,layout-, grid- 등의 접두사(prefix)를 사용하여 클래스 명을 접미사(suffix)로 조합하여 구축
- Module
- 스타일 반복, 재사용을 위한 요소 스타일 구축
- 위치기반의 클래스명 작명은 지양한다.
- State
- 상태를 나타내는 요소 스타일 구축
- is-, s- 등의 접두사(prefix)를 사용하여 클래스 명을 접미사(suffix)로 조합하여 구축
- 자바스크립트에 의존적인 요소 스타일 / Layout, Module에 사용이 가능한 요소 스타일
- Theme : 사이트의 전반적 look and feel 제어
* OOCSS (Object Oriented CSS)
OOCSS는 2가지 범주 내에서 독립적인 요소로 추상화할 수 있는 반복패턴을 정의하여 사용하자는 객체 지향 스타일 가이드를 제시한 방법론이다.
- 표현과 구조의 분리 (Separate structure and skin) : CSS를 Positioning / Styling으로 객체화하여 Mix & Match
.position {
position: relative;
display: block;
float: none;
}
.style {
background: transparent;
border: none;
}
- 컨테이너와 콘텐츠의 분리 (Separate container and content) : DOM 위치에 의존하지 않고 객체의 재사용이 가능한 클래스 기반 모듈 구축
- 장점 : 코드의 재사용성이 높아진다.
- 단점
- 다중클래스를 사용하여 HTML이 복잡해진다.
- 의미 있는 클래스 이름을 짓기 어렵다.
* OOSass
OOCSS를 토대로 Sass에 적용하는 방법론
(Less, Sass와 같은 CSS 전처리기를 사용하여 OOCSS의 단점을 보완하고 Mixin을 사용하여 코드의 재활용성과 의미 있는 네이밍 등의 장점을 극대화하여 사용할수 있다.)
* BEM (Block Element Modifier)
- Block : 문단 전체에 적용된 엘리먼트, 또는 엘리먼트를 담고 있는 컨테이너를 말함
.block-name {
//
}
- Element : Block 안에서 특정기능을 수행하는 컴포넌트
.block-name__element-name{
//
}
- Modifier : Block, Element의 외관/상태를 변화시킨다.
.block-name__element-name--modifier {
//
}
- 장점 : 의미있는 클래스 이름의 작명이 가능하다.
- 단점 : 클래스 이름이 길어진다.
BEM 방법론을 토대로 응용한 사례
.module-function-expand {
//
&.statement {
//
}
}
* 여러 방법론을 토대로 사용하기 쉽고 효율적으로 자신만의 방법론으로 사용함을 추천한다.