Frontend/CSS

[Frontend] CSS 방법론 (BEM, OOCSS, SMACSS)

강하다이녀석 2024. 1. 16. 16:19

CSS 에서 클래스 네임을 어떻게 지을 것인가?

-> 유지보수와 재사용성!

https://velog.io/@hahan/CSS%EB%B0%A9%EB%B2%95%EB%A1%A0OOCSS-BEM-SMACSS

 

CSS방법론 (OOCSS, BEM, SMACSS)

CSS방법론 > CSS에서 클래스 네임을 지을 때 작성하는 방식으로 일종의 naming convention이다 쉽게 말해 CSS방법론이란 웹에서 CSS의 영향력이 높아지게 되면서 CSS사용시 클래스 이름을 어떻게 작성할

velog.io

 

OOCSS

CSS를 모듈 방식으로 작성하여 중복을 줄임. 

- 구조와 스타일을 분리한다. 

- 공통적인,중복되는 디자인 요소를 따로 뺴서 작성하고, 각 고유의 스타일을 지정해사용..

 

단점 : 다중 클래스 사용으로 코드 가독성이 떨어짐.

  <!-- 기존 방식 --> 
  <a class=”instagram_btn instagram_skin”>Instagram</a>
  <a class=”facebook_btn facebook_skin”>Facebook</a>
 

  <!-- OOCSS 적용 -->
  <a class=”btn skin instagram”>Instagram</a>
  <a class=”btn skin facebook”>Facebook</a>
.btn {
	display: inline-block;
    width: 380px;
    height: 50px;
    text-align: center;
}


.skin {
	margin: 10px 5px;
}

.instagram {
	background-color: #f9f9f9;
}

.facebook {
	background-color: #45B759;
}

 

BEM

의미론 바탕의 클래스 선택자 작명 규칙.

- 블록, 요소, 상태로 구성. 각 부분을 __, --로 구분 -> 목적, 기능을 직관적으로 확인 가능. 

- css로 구조 파악 가능. scss와 사용편리.

 

- 단점: 클래스 명이 길어지고 복잡해짐.

  • 블록 : 재사용성이 가능하고, 기능적으로 독립이 가능한 컴포넌트. 하나의 단어를 사용하나, 길어지면 -를 사용
  • 요소 : 블록을 구성하는 단위. 하위요소.  __사용.
  • 상태: 블록이나 요소의 속성(모양, 상태, 동작...)으로, -- 사용.

이름은 형태>의미>순서>상태로 작성

ex) msgbox-toggle-off

 

SMACSS

- CSS를 범주화로 패턴화.

- 기본, 레이아웃, 모듈, 상태, 테마 다섯가지의 범주 제시.

 

1. 기본: Reset, Variable을 포함하고, !important 금지.

2. 레이아웃: 주요요소(id)와 하위 요소(class)로 구분하고, 접두사 사용.

// layout => l-

// 주요 요소 작성
#header {
    width: 400px;
}
#aside {
    width: 40px;
}

// 하위 요소 작성
.l-width #header {
    width: 650px;
    padding: 10px;
}
.l-width #aside {
    width: 100px
}

3. 모듈: 재사용성이 높은 구성 요소.

4. 상태: 요소의 상태변화 표현, 접두사 'is-'나 's-'사용.

.is-error { ... }
.is-hidden { ... }
.is-disabled { ... }

5. 테마: 사용자가 선택 가능하도록 스타일 재선언하여 사용.

// base.css
.header {
    background-color: red;
}
// theme.css
.header {
    background-color: orange;
}

 

규칙

1. 파생된 CSS셀렉터 사용 금지(?이게 머슨 말이고)

2.(위에는?) id 셀렉터 사용금지

3. !Important 금지

4. 의미있는 class 이름