디자인과 개발 단계에서부터
재사용할 수 있는 UI 컴포넌트를 미리 디자인하고 개발
레고처럼 조립해 나갈 수 있는 부품 단위로 UI 컴포넌트를 만들어 나가는 개발을 진행할 수 있음
CDD 방식은 컴포넌트 단위로 만들어 페이지를 조립하는 방식으로상향식 개발
에 가깝다
⇒ 컴포넌트 생성, 컴포넌트 결합, 페이지 조립
⇒ 예시 : BBC , UN
프로젝트의 규모와 복잡도가 점점 커지면서 팀원 수가 증가하고,
모바일이나 태블릿 등 다양한 디바이스가 등장하면서 구조화된 CSS가 필요하게 되었다.
⇒ CSS 발전 순서도 :CSS
→SASS
→BEM
→CSS Modules
→Styled Components
CSS가 구조적으로 작성될 수 있게 도움을 주는 도구
반복적인 작업이나, 클래스의 상속과 같은 사항으로 CSS 문서 양이 많아지는데
⇒ 이러한 문제점을 프로그래밍 개념(변수, 함수, 상속 등)을 활용해 해결
CSS 전처리기 만으로 웹 서버가 인지하기 못하기 때문에 각 CSS 전처리기에 맞는 컴파일러를 사용해야 하고 컴파일을 하게 되면 실제로 우리가 사용하는 CSS 문서로 변환
⇒ 이를 통해 CSS 파일들을 잘 구조화할 수 있게 되었고, 최소한 CSS 파일을 몇 개의 작은 파일로 분리할 수 있는 방법이 생겼다.
CSS 전처리기 중 가장 유명한 SASS는 CSS를 확장해주는 스크립팅 언어이다.
.alert { border: 1px solid rgba(198, 83, 140, 0.88); } .button { color: rgba(198, 83, 140, 0.88); }
$base-color: rgba(198, 83, 140, 0.88); .alert { border: 1px solid $base-color; } .button { color: $base-color; }
장점
: 자바스크립트처럼 특정 속성을 변수로 선언
해 필요한 곳에 선언된 변수를 적용할 수 있고, 반복되는 코드를 여러 곳에서 재사용할 수 있도록 해주는 기능 ⇒ CSS 의 구조화
전역 CSS 번들 파일을 만들어주는 전처리기 역할을 함
단점
: 전처리기 내부에서 어떤 작업을 하는지 알지 못하고 단순히 계층 구조를 만들어 내는 것에 의지해 컴파일된 CSS의 용량이 어마어마하게 커짐
CSS 전처리기의 문제 보완하기 위한 BEM, OOCSS, SMACSS 같은 CSS 방법론
각각 장단점이 있지만 같은 지향점을 가지고 있다.
⇒ 코드의 재사용성
, 코드의 간결화(쉬운 유지보수)
, 코드의 확장 가능성
, 클래스명으로 의미를 예측
대표적인 방법론 BEM은 Block, Element, Modifier 로 구분해 클래스명을 작성한다.
.header__navigation--navi-text { color: red; } /* -- 와 __ 로 구분한다. */
Block : 전체를 감싸고 있는 블럭 요소 ⇒
header
Element : 블럭이 포함하고 있는 한 조각 ⇒navigation
Modifier : 블럭 또는 요소의 속성(블럭이나 엘리먼트의 외관이나 상태를 변화가능하게 하는 부분) ⇒navi-text
장점
: 이러한 클래스명은 BEM 방식의 이름을 여러 번 반복해 재사용할 수 있도록 해 HTML, CSS, SASS 파일에서 더 일관된 코딩 구조를 만들어줌단점
: 클래스 선택자가 장황해지고, 마크업이 불필요하게 커지면서 재사용하려 할 때 마다 모든 UI 컴포넌트를 명시적으로 확장해야만 함애플리케이션으로 개발 방향이 진화하면서 컴포넌트 단위의 개발은 캡슐화의 중요성
이 생겼다.
CSS는 컴포넌트 기반의 방식을 위해 만들어진 적이 한번도 없어서
컴포넌트 영역으로 불러들이기 위해 CSS in JS
가 탄생
기능적 혹은 상태를 가진 컴포넌트들로부터 UI를 완전히 분리해 사용할 수 있는 단순한 패턴을 제공한다.
장점
: CSS를 컴포넌트 안으로 캡슐화, 네이밍이나 최적화를 신경 쓸 필요가 없다.단점
: 빠른 페이지 로드에 불리함