오늘 배운 OOCSS를 활용해서 만들어보았다.
100%에서 screenshot 딴다.
PerfectPixel by WellDonCode (Chrome Extension 다운받기)
screesshot과 비교하여 정확하게 만들 수 있다.
레고처럼 여러가지 모듈을 만들어서 조합하도록 하는 방법론
/* 구조와 스킨의 분리 */
.btn {
width: 200px;
height: 80px;
font-size: 30px;
}
.btn-close {
background: black;
color: #FFF;
border: 3px dotted #fff;
}
/* container와 contents를 분리하라 */
/* 아래 예제 처럼 스타일링되면 #main이 사라졌을 때 css가 무력화된다. module화를 해야한다. */
#main .btn {
width: 300px;
display: inline-block;
padding: 20px;
margin: 10px;
font-size: 18px;
line-height: 1.5;
}
#main .general {
background-color: aquamarine;
color: black;
}
#main .warning {
background-color: azure;
color: blue;
}
<h1>구조와 스킨의 분리</h1>
<button type="button" class="btn"></button>
<button type="button" class="btn btn-close"></button>
<h1>container와 contents를 분리</h1>
<main id="main">
<button type="button" class="btn general">기본 버튼</button>
<button type="button" class="btn warning">취소 버튼</button>
</main>
1️⃣ base
프로젝트의 표준 스타일을 정의함.
방법론 :
2️⃣ layout
헤더, 메인영역, 푸터, 사이드 바와 같은 웹사이트에서 큰 틀을 구성하는 모듈에 관한 규칙.
#header {
...
}
**텍스트**
#section {
...
}
#footer {
...
}
<header id="header"></header>
<section id="section"></section>
<footer id="footer"></footer>
3️⃣ module과 subclass
레이아웃안에 배치되는 모든 요소를 의미
.btn.bts-small {
width: 50%;
}
.btn.bts-big {
width: 150%;
}
4️⃣ state
기존 스타일을 덮어쓰거나 확장하는데 사용하는 스타일
얀덱스(Yandex)사가 만든 설계방법.
기본 규칙
어디에서나 재사용 가능한 부품
클래스 네이밍은 목적이 명확해야 (Error, hidden … )
소문자를 사용하며 여러 단어가 연결되는 경우는 하이픈 케이스(케밥케이스)를 사용 (cont-nav … )
Block 을 구성하는 요소들로 block 에 종속되야 함
때문에 block 의 클래스 이름을 상속 받고 element의 클래스 이름을 언더바 두 개를 접두사로 하여 사용 (errorlink, opacity-halfbtn )
Element 안에 또 element를 사용할 경우 클래스 네이밍은 element 끼리 중첩하지 않는다.
opacity-half__btn__txt (x)
opacity-half__txt (o)
block이나 element의 모습이나 상태 또는 움직임 (요소가 활성화된 상태, 사이즈, 컬러 등등)을 정의
단독으로 클래스 이름을 사용하지 않고 두 번째 클래스 이름으로 사용
btn_size_small (x)
btn_move btn_move_active (o)
클래스 네이밍은 block이나 element의 이름을 상속 받고 언더바 하나로 연결
만약 두 개 이상의 단어를 사용해야하면 block처럼 하이픈으로 연결
btn_move btn_move_size-small (o)
이렇게 언더바와 하이픈이 혼용된 형태를 취함.
배운걸 바로바로 활용하시다니 대단합니다. !!!