![[CSS] CSS λ°©λ²λ‘](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkTlsE%2FbtsEHFC4ETG%2FCgNEjXJ79cABQDLfW8ldXK%2Fimg.png)
π CSS λ°©λ²λ‘ μ΄λ 무μμΈκ°μ?
CSS λ°©λ²λ‘ μ CSS μ½λλ₯Ό ꡬ쑰ννκ³ μ‘°μ§ννλ μΌλ ¨μ κ·μΉμ΄λ κ°μ΄λλΌμΈμ΄μμ. μ΄λ μ€νμΌ μνΈκ° 컀μ§κ³ 볡μ‘ν΄μ§μ λ°λΌ λ°μν μ μλ λ¬Έμ λ€, μλ₯Ό λ€μ΄ μ νμμ μΆ©λ, μ½λμ μ€λ³΅, μ μ§λ³΄μμ μ΄λ €μ λ±μ ν΄κ²°νλ λ° λͺ©μ μ΄ μμ΄μ.
μ£Όμ CSS λ°©λ²λ‘ μλ BEM(Block Element Modifier), OOCSS(Object-Oriented CSS), SMACSS(Scalable and Modular Architecture for CSS) λ±μ΄ μμ΄μ.
π₯οΈ μ£Όμ CSS λ°©λ²λ‘
1. BEM (Block Element Modifier)
- κ°λ : BEMμ 'λΈλ‘(Block)', 'μμ(Element)', 'μμ μ(Modifier)'μ μ½μλ‘, CSS ν΄λμ€ μ΄λ¦μ μΌκ΄λκ³ λͺ ννκ² λ§λλ λ€μ΄λ° 컨벀μ μ΄μμ.
- μ₯μ : BEM λ°©λ²λ‘ μ μ¬μ©νλ©΄ HTMLκ³Ό CSS κ°μ λͺ νν κ΄κ³λ₯Ό μ 립ν μ μμΌλ©°, μ€νμΌ μνΈμ μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μν μ μμ΄μ.
- ꡬ쑰:
- Block: λ 립μ μΈ κ΅¬μ± μμλ₯Ό μλ―Ένλ©°, μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈμ κΈ°λ³Έ λ¨μμμ.
- Element: λΈλ‘ λ΄λΆμ κ΅¬μ± μμλ₯Ό μλ―Ένλ©°, νμ μ΄λ€ λΈλ‘μ μΌλΆλ‘λ§ μ‘΄μ¬ν΄μ. λΈλ‘κ³Ό μ리먼νΈλ __λ‘ μ°κ²°λΌμ.
- Modifier: λΈλ‘μ΄λ μ리먼νΈμ μ€νμΌμ λ³νν λ μ¬μ©λλ©°, --λ‘ νμλΌμ.
- 건물μ μ§λ κ²μ μκ°ν΄ 보μΈμ. 건물(Block)μ μ¬λ¬ μΈ΅(Element)μΌλ‘ ꡬμ±λμ΄ μκ³ , κ° μΈ΅μ νΉμ μ€νμΌ(Modifier)μ κ°μ§ μ μμ΄μ. BEMμ μ΄λ¬ν ꡬ쑰λ₯Ό CSSμ μ μ©ν κ²μΌλ‘, κ°κ°μ μ»΄ν¬λνΈλ₯Ό λ 립μ μΌλ‘ ꡬμ±νμ¬ μ¬μ¬μ©κ³Ό μμ μ΄ μ½λλ‘ ν΄μ.
/* Block */
.card { ... }
/* Element */
.card__title { ... }
.card__description { ... }
/* Modifier */
.card--large { ... }
.card__title--bold { ... }
μ¬κΈ°μ:
- 'card'λ λΈλ‘μ λνλ λλ€.
- '__'λ 'card' λΈλ‘μ λ΄λΆ μμμΈ 'title'κ³Ό 'description'μ λνλ λλ€.
- '--'λ λΈλ‘ λλ μμμ λ³νμ λνλ΄λ 'large'μ 'bold' μ€νμΌμ λνλ λλ€.
2. OOCSS (Object-Oriented CSS)
- κ°λ : OOCSSλ CSSλ₯Ό κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ κ΄μ μμ μ κ·Όνλ λ°©λ²λ‘ μΌλ‘, μ€νμΌμ ꡬ쑰μ μ€ν¨μΌλ‘ λΆλ¦¬νκ³ , 컨ν μ΄λμ μ½ν μΈ μ λ 립μ±μ κ°μ‘°ν΄μ.
- μ₯μ : μ½λμ μ¬μ¬μ©μ±μ λμ΄κ³ , μ€νμΌ μνΈμ ν¬κΈ°λ₯Ό μ€μ΄λ©°, μ μ°ν μ€νμΌλ§μ΄ κ°λ₯ν΄μ.
- μ£Όμ μμΉ:
- ꡬ쑰μ μ€ν¨ λΆλ¦¬: ꡬ쑰(λ μ΄μμ)μ μ€ν¨(μκ°μ λμμΈ)μ λΆλ¦¬νμ¬, κ°μ ꡬ쑰μ λ€μν μ€νμΌμ μ μ©ν μ μλλ‘ ν΄μ.
- 컨ν μ΄λμ μ½ν μΈ μ λΆλ¦¬: μ€νμΌμ μ½ν μΈ μ μ§μ μ μ©νλ λμ , 컨ν μ΄λλ₯Ό ν΅ν΄ μ€νμΌμ μ μ©νμ¬ μ¬μ¬μ©μ±μ λμ¬μ.
- μλμ°¨λ₯Ό 쑰립νλ κ²μ μμν΄ λ³΄μΈμ. μ¬λ¬ λΆν(Object)μ΄ μ‘°ν©λμ΄ νλμ μλμ°¨λ₯Ό λ§λ€μ£ . OOCSSμμλ μΉ νμ΄μ§λ₯Ό μ¬λ¬ μ¬μ¬μ© κ°λ₯ν κ°μ²΄λ‘ λλκ³ , μ΄ κ°μ²΄λ€μ μ‘°ν©νμ¬ λ€μν λμμΈμ λ§λ€μ΄μ.
/* ꡬ쑰 */
.box { ... }
/* μ€ν¨ */
.skin--red { background-color: red; }
3. SMACSS (Scalable and Modular Architecture for CSS)
- κ°λ : SMACSSλ CSSλ₯Ό μ¬λ¬ μΉ΄ν κ³ λ¦¬λ‘ λΆλ₯νμ¬ κ΄λ¦¬νλ μν€ν μ² μ€νμΌ κ°μ΄λμμ. μ΄ λ°©λ²λ‘ μ λ² μ΄μ€, λ μ΄μμ, λͺ¨λ, μν, ν λ§ λ±μΌλ‘ CSSλ₯Ό λΆλ₯ν΄μ.
- μ₯μ : νλ‘μ νΈμ κ·λͺ¨κ° 컀μ§μ λ°λΌ CSSλ₯Ό μ½κ² νμ₯νκ³ κ΄λ¦¬ν μ μμΌλ©°, κ·λͺ¨μ κ΄κ³μμ΄ μΌκ΄λ μ½λλ² μ΄μ€λ₯Ό μ μ§ν μ μμ΄μ.
- λμλ₯Ό κ³ννλ―, SMACSSλ μΉ μ¬μ΄νΈλ₯Ό μ¬λ¬ ꡬμ(λͺ¨λ)μΌλ‘ λλκ³ , κ° κ΅¬μμ΄ μ΄λ»κ² νμ₯λκ³ κ΄λ¦¬λ μ§μ λν κ·μΉμ μ μν΄μ. μ΄λ₯Ό ν΅ν΄ λκ·λͺ¨ μΉ μ ν리μΌμ΄μ μ CSSλ₯Ό μ½κ² νμ₯νκ³ μ μ§ κ΄λ¦¬ν μ μμ΄μ.
/* Base */
a { ... }
/* Layout */
.l-header { ... }
/* Module */
.nav { ... }
/* State */
.is-active { ... }
SMACSSλ CSSλ₯Ό λ€μ― κ°μ§ μ νμΌλ‘ λΆλ₯ν©λλ€:
- Base: HTML μμμ μ§μ μ μ©λλ κΈ°λ³Έ μ€νμΌμ λλ€.
- Layout: νμ΄μ§ λ μ΄μμμ μν ν° νμ μ 곡νλ μ€νμΌμ λλ€.
- Module: μ¬μ¬μ© κ°λ₯ν λͺ¨λ(μ»΄ν¬λνΈ)μ μ€νμΌμ λλ€.
- State: νΉμ μν(νΈλ², λΉνμ±ν λ±)λ₯Ό λνλ΄λ μ€νμΌμ λλ€.
- Theme: μ¬μ΄νΈμ μ λ°μ μΈ ν λ§λ₯Ό μ μνλ μ€νμΌμ λλ€.
π€ CSS λ°©λ²λ‘ μ μ© μμ
1. BEM μ μ© μμ
<div class="card card--large">
<h2 class="card__title">Card Title</h2>
<p class="card__description">Card description here...</p>
</div>
.card {
border: 1px solid #ccc;
padding: 20px;
}
.card--large {
width: 300px;
}
.card__title {
font-size: 1.5rem;
}
.card__description {
font-size: 1rem;
}
μ΄ μμ μμλ 'card' λΈλ‘μ λν κΈ°λ³Έ μ€νμΌκ³Ό 'card--large' λ³νμ μ μ©νμ΅λλ€.
λν, 'card__title'κ³Ό 'card__description' μμμ λν μ€νμΌμ μ μνμ΅λλ€.
2. OOCSS μ μ© μμ
<div class="box skin--red">
<p>Content here...</p>
</div>
/* ꡬ쑰 */
.box {
padding: 20px;
margin: 10px;
}
/* μ€ν¨ */
.skin--red {
background-color: red;
color: white;
}
OOCSSμμλ ꡬ쑰(box)μ μ€ν¨(skin--red)μ λΆλ¦¬νμ¬ κ°μ ꡬ쑰μ λ€λ₯Έ μ€ν¨μ μ μ©ν μ μμ΅λλ€.
3. SMACSS μ μ© μμ
<div class="l-header">
<nav class="nav is-active">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
</ul>
</nav>
</div>
/* Layout */
.l-header {
background: #eee;
padding: 20px;
}
/* Module */
.nav {
list-style: none;
}
/* State */
.is-active {
font-weight: bold;
}
SMACSSλ₯Ό μ¬μ©νμ¬ λ μ΄μμ(l-header), λͺ¨λ(nav), μν(is-active)μ λν μ€νμΌμ ꡬλΆν©λλ€.
π¨ μ£Όμν μ
κ° CSS λ°©λ²λ‘ μ μ μ©ν λ μ£Όμν΄μΌ ν μ¬νλ€μ΄ μμ΄μ. μ΄λ¬ν μ£Όμμ¬νμ μ΄ν΄νκ³ μμΌλ©΄, λ°©λ²λ‘ μ λ ν¨κ³Όμ μΌλ‘ νμ©ν μ μμ΄μ:
- BEM (Block Element Modifier)
- κΈ΄ ν΄λμ€ μ΄λ¦: BEM λ€μ΄λ° κ·μΉμ λλλ‘ λ§€μ° κΈ΄ ν΄λμ€ μ΄λ¦μ μμ±ν μ μμ΄μ. μ΄λ μ½λμ κ°λ μ±μ μ νμν¬ μ μμΌλ―λ‘, λ무 볡μ‘νκ±°λ κΈ΄ λ€μ΄λ°μ νΌνλ κ²μ΄ μ’μμ.
- μΌκ΄μ± μ μ§: νλ‘μ νΈ μ 체μμ BEM λ€μ΄λ° κ·μΉμ μΌκ΄μ±μ μ μ§νλ κ²μ΄ μ€μν΄μ. μΌκ΄μ± μλ λ€μ΄λ°μ νΌλμ μΌκΈ°ν μ μμ΄μ.
- OOCSS (Object-Oriented CSS)
- ꡬ쑰μ μ€ν¨μ λΆλ¦¬: ꡬ쑰(λ μ΄μμ)μ μ€ν¨(μ€νμΌ)μ λͺ νν λΆλ¦¬νλ κ²μ΄ μ€μν΄μ. μ΄ μμΉμ μ λλ‘ λ°λ₯΄μ§ μμΌλ©΄ OOCSSμ μ₯μ μ μΆ©λΆν νμ©ν μ μμ΄μ.
- ν΄λμ€ μ€λ³΅: μ¬μ¬μ© κ°λ₯ν μ€νμΌμ λ§λλ κ³Όμ μμ ν΄λμ€κ° μ€λ³΅λ μ μμ΄μ. μ΄λ μ νμμ λͺ νμ±μ μ ν΄ν μ μμΌλ―λ‘ μ£Όμκ° νμν΄μ.
- SMACSS (Scalable and Modular Architecture for CSS)
- μΉ΄ν κ³ λ¦¬ λΆλ₯: SMACSSλ CSSλ₯Ό μ¬λ¬ μΉ΄ν κ³ λ¦¬λ‘ λΆλ₯ν΄μ. μ΄ μΉ΄ν κ³ λ¦¬λ€μ λͺ νν μ΄ν΄νκ³ μ¬λ°λ₯΄κ² μ μ©νλ κ²μ΄ μ€μν΄μ.
- κ³Όλν μΈλΆν: μΉ΄ν κ³ λ¦¬μ λ무 λ§μ μΈλΆνλ₯Ό μ μ©νλ©΄ κ΄λ¦¬κ° 볡μ‘ν΄μ§ μ μμ΄μ. λ°λΌμ νλ‘μ νΈμ κ·λͺ¨μ μꡬμ¬νμ λ§κ² μ μ ν μμ€μ μΈλΆνλ₯Ό μ μ©ν΄μΌ ν΄μ.
- κ³΅ν΅ μ£Όμμ¬ν
- νλ‘μ νΈ κ·λͺ¨μ μꡬμ¬ν κ³ λ €: λͺ¨λ CSS λ°©λ²λ‘ μ νΉμ μν©μ λ μ ν©ν μ μμ΄μ. νλ‘μ νΈμ κ·λͺ¨, νμ μμ λ°©μ, μ μ§λ³΄μ μꡬμ¬ν λ±μ κ³ λ €νμ¬ κ°μ₯ μ ν©ν λ°©λ²λ‘ μ μ νν΄μΌ ν΄μ.
- κ³Όλν κ·μΉ μ μ© νΌνκΈ°: λ°©λ²λ‘ μ μ μ©ν λλ μ μ°μ±μ μμ§ μλλ‘ μ£Όμν΄μΌ ν΄μ. λ무 μ격νκ² κ·μΉμ μ μ©νλ©΄ μ€νλ € κ°λ°μ ν¨μ¨μ±μ μ ν΄ν μ μμ΄μ.
π κ²°λ‘
CSS λ°©λ²λ‘ μ μΉ κ°λ° νλ‘μ νΈμ μ€νμΌλ§μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ κ°λ ₯ν λꡬμμ. BEM, OOCSS, SMACSS λ± λ€μν λ°©λ²λ‘ μ μ΄ν΄νκ³ νλ‘μ νΈμ μꡬμ¬νμ λ§κ² μ μ ν μ ννμ¬ μ¬μ©νλ©΄, κΉλνκ³ μ μ§λ³΄μκ° μ©μ΄ν μ½λλ² μ΄μ€λ₯Ό ꡬμΆν μ μμ΄μ.
λ, CSS λ°©λ²λ‘ μ μ¬μ©νλ©΄ λ€μκ³Ό κ°μ μ΄μ μ μ»μ μ μμ΄μ:
- μ μ§λ³΄μμ μ©μ΄μ±: λͺ νν κ·μΉκ³Ό ꡬ쑰λ₯Ό κ°μ§ CSS μ½λλ μ μ§λ³΄μκ° ν¨μ¬ μ¬μμ.
- μ¬μ¬μ©μ± μ¦κ°: μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈλ₯Ό λ§λ€μ΄ νλ‘μ νΈ μ λ°μ κ±Έμ³ μΌκ΄λ λμμΈμ μ μ©ν μ μμ΄μ.
- κ°λ° μκ° λ¨μΆ: μ΄κΈ° μ€μ μκ°μ΄ μμλμ§λ§, μ₯κΈ°μ μΌλ‘ 보면 κ°λ° μκ°μ ν¬κ² λ¨μΆμν¬ μ μμ΄μ.
π μΆκ° μ 보
- BEM λ°©λ²λ‘ μ λν λ κΉμ μ΄ν΄λ₯Ό μνμ λ€λ©΄, BEM 곡μ μΉμ¬μ΄νΈμμ μμΈν μ 보λ₯Ό μ°Ύμλ³Ό μ μμ΄μ.
- OOCSS λ°©λ²λ‘ μ λν λ κΉμ μ΄ν΄λ₯Ό μνμ λ€λ©΄, OOCSS GitHub νμ΄μ§μμ μμΈν μ 보λ₯Ό μ°Ύμλ³Ό μ μμ΄μ.
- SMACSS λ°©λ²λ‘ μ λν λ κΉμ μ΄ν΄λ₯Ό μνμ λ€λ©΄, SMACSS 곡μ μΉμ¬μ΄νΈμμ μμΈν μ 보λ₯Ό μ°Ύμλ³Ό μ μμ΄μ.
'Front-end > HTML & CSS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CSS] Position (0) | 2024.10.26 |
---|---|
[HTML] μΉ μμΌ(WebSocket) (0) | 2024.03.30 |
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!