π 1οΈβ£ CSSλ? + μ€λ¬΄ κ°κ°κΉμ§ νμ₯
κ΅¬λΆ |
λ΄μ© |
λΉμ π |
CSSλ? |
Cascading Style Sheets (κ³λ¨μ μ€νμΌ μνΈ). HTML ꡬ쑰μ λμμΈκ³Ό λ μ΄μμ μ μ© |
HTML: π 건물 λΌλ, CSS: π μΈν
λ¦¬μ΄ & μ· |
μν |
μμ, ν°νΈ, ν¬κΈ°, μμΉ, μ λ ¬, λ°μν, μ λλ©μ΄μ
λ± μκ°μ νν μ λ΄ |
π νλ°± μ±
μ 컬λ¬λ‘ κΎΈλ―ΈκΈ° |
β
μ¬ν ν¬μΈνΈ:
- βCascadingβ β μ°μ μμμ λ°λΌ μ€νμΌμ΄ κ²Ήμ³μ§λ©° μ μ©λλ μ리
- HTMLκ³Ό CSS λΆλ¦¬ β μ μ§λ³΄μμ±, νμ
ν¨μ¨β
βοΈ 2οΈβ£ CSS μμ± λ°©λ² μ¬ν + μ₯λ¨μ
λ°©λ² |
μμΉ |
νΉμ§ |
λΉμ π |
μ€λ¬΄ Best Practice π© |
Inline |
HTML νκ·Έ λ΄ style μμ± |
νΉμ μμ 1κ°μλ§ μ μ©, μ°μ μμ μ΅μ, μ μ§λ³΄μ μ§μ₯ |
βοΈ μ·μ λμνκΈ° |
κΈ΄κΈ μμ μΈμ μ¬μ© μ§μ |
Internal |
<style> νκ·Έ, <head> μ |
1νμ΄μ§ μ μ©, μ μ§λ³΄μ λΆνΈ |
π ν μ₯μλ§ μμΉ |
μμ νλ‘μ νΈλ νλ‘ν νμ
μ |
External |
λ³λ .css νμΌ |
μ€λ¬΄ νμ€! μ¬λ¬ νμ΄μ§, μ μ§λ³΄μ & μλβ |
π μ·μ₯μ μ€νμΌ λͺ¨μλκΈ° |
νμΌ λΆλ¦¬ + Minify + CDN μ μ© κΆμ₯ |
β
μΆκ° μ¬ν:
- νμΌ μ©λ ν¬λ©΄ β CSS νμΌ Split & Critical CSSλ§ inline μ²λ¦¬ β μλ μ΅μ ν
π 3οΈβ£ μ νμ μ¬ν νμ₯ + μ€μ μμ
μ νμ |
μμ |
μ€λͺ
|
λΉμ π |
μ 체 μ νμ |
* {} |
λͺ¨λ μμ μ μ© |
π μ μΈκ³ μ μ© |
νκ·Έ μ νμ |
h1 {} |
νΉμ νκ·Έ μ 체 |
π’ λͺ¨λ h1 λΆλ¬ |
ν΄λμ€ μ νμ |
.menu {} |
μ¬λ¬ μμ λ¬Άμ |
π¦ λ°μ€ λ¬Άμ μ ν |
μμ΄λ μ νμ |
#header {} |
λ¨ νλ μμ |
π― μ μΌ ID μ§μ |
μμ± μ νμ |
[type="text"] {} |
νΉμ μμ± κ°μ§ μμ |
π 쑰건 κ²μ¬ |
κ°μ ν΄λμ€ |
a:hover |
νΉμ μν |
π¨ λ§μ°μ€ μ¬λ¦΄ λ μμΉ |
μμ μ νμ |
div > p {} |
λ°λ‘ μλ μμ |
πͺ μλ§ μ§κ³μμ |
νμ μ νμ |
div p {} |
λͺ¨λ νμ |
π³ κ°μ‘± λ무 μ 체 |
β
λ³΅ν© μ νμ μ¬ν μμ
/* λ€λΉκ²μ΄μ
λ©λ΄μμ νμ±νλ νλͺ©μλ§ ν¨κ³Ό */
nav > ul.menu > li.active a:hover {
color: red;
font-weight: bold;
}
κΈ°μ λ©΄μ ν¬μΈνΈ:
- id (100μ ) > class (10μ ) > tag (1μ ) β μ°μ μμ κ³μ°λ²!
- μμ(
>
) vs νμ(space
) β μ νν ꡬλΆν κ²
π¦ 4οΈβ£ λ°μ€ λͺ¨λΈ μ¬ν μκ°ν
κ΅¬μ± |
μ€λͺ
|
λΉμ π |
Content |
λ΄μ© μμ (ν
μ€νΈ, μ΄λ―Έμ§) |
π λ³Έλ¬Έ λ΄μ© |
Padding |
λ΄μ©κ³Ό ν
λ리 μ¬μ΄ μ¬λ°± |
π§Έ λ΄μ© μ£Όλ³ μΏ μ
|
Border |
ν
λ리 |
π μ±
νμ§ ν
λ리 |
Margin |
μμ λ°κΉ₯ μ¬λ°± |
πͺ μ λ°μ€μμ 거리 |
β
box-sizing μ¬ν μμ
* {
box-sizing: border-box;
}
Why?
- κΈ°λ³Έμ content-box β padding, border μΆκ°λλ©΄ width κ³μ° 볡μ‘
- border-box β μ΄ width μμ padding, border ν¬ν¨! β λ μ΄μμ κΉ¨μ§ λ°©μ§
ποΈ 5οΈβ£ λ°°κ²½ μ€μ μ¬ν + κ³ κΈ ν¨ν΄
μμ± |
μ€λͺ
|
λΉμ π |
background-color |
λ°°κ²½ μμ |
π¨ λ²½ μ |
background-image |
λ°°κ²½ μ΄λ―Έμ§ |
πΌοΈ λ²½ κ·Έλ¦Ό |
background-repeat |
μ΄λ―Έμ§ λ°λ³΅ μ¬λΆ |
π νμΌ λ°λ³΅ |
background-position |
μμΉ |
π κ·Έλ¦Ό μμΉ |
background-size |
ν¬κΈ° (cover , contain , κ°) |
π λ§μΆ€ μ¬μ΄μ¦ |
background-attachment |
μ€ν¬λ‘€ μ λ°°κ²½ κ³ μ |
π κ³ μ λ λ²½μ§ |
β
λ°°κ²½ μ¬ν μμ
body {
background: url('bg.jpg') no-repeat center/cover fixed;
}
β
cover vs contain:
- cover: λ°°κ²½μ΄ κ½ μ±μ (μλ¦Ό κ°λ₯)
- contain: μλ¦Ό μμ΄ λ§μΆ€
β
fixed β ν¨λ΄λμ€ μ€ν¬λ‘€ ν¨κ³Όμ μμ£Ό μ¬μ©
π― 6οΈβ£ μ νμ μ°μ μμ(Specificity) μ¬ν 곡μ
μ νμ |
μ μ |
Inline Style |
1000 |
ID |
100 |
Class / μμ± μ νμ |
10 |
νκ·Έ |
1 |
* |
0 |
π‘ μ€λ¬΄μμ !important λ¨λ° μ§μ β ꡬ쑰μ μ°μ μμ κ΄λ¦¬ νμ
π 7οΈβ£ μ€λ¬΄ Best Practice μ 리
ν¬μΈνΈ |
μ€λͺ
|
External CSS κ΄λ¦¬ β νμΌ λΆλ¦¬ & Minify μ μ© |
μ μ§λ³΄μ, μλ ν₯μ |
box-sizing: border-box μ 체 μ μ© |
ν¬κΈ° κ³μ° μ½κ², λ μ΄μμ μμ |
μ νμ β id μ΅μ, class μ€μ¬, νκ·Έ μ ν μ΅μν |
μ°μ μμ κ΄λ¦¬ νΈλ¦¬ |
background shorthand μ κ·Ή νμ© |
μ±λ₯, κ°λ
μ± β |
κ°μ ν΄λμ€ (hover , focus , nth-child λ±) μ κ·Ή μ¬μ© β UX κ°μ |
μ¬ν μ€νμΌλ§ νμ |
πΌ 8οΈβ£ κΈ°μ λ©΄μ κ³ κΈ μ§λ¬Έ ν¬μΈνΈ
μ§λ¬Έ |
μ¬ν λ΅λ³ |
box-sizing: border-boxμ μ₯μ ? |
λ μ΄μμ κ³μ° κ°νΈ, ν¬κΈ° μ μ§, μ μ§λ³΄μ νΈλ¦¬ |
classμ id μ νμ μ°¨μ΄? |
class β μ¬μ¬μ© κ°λ₯, id β μ μΌ μμ |
κ°μ ν΄λμ€μ μΌλ° ν΄λμ€ μ°¨μ΄? |
κ°μ ν΄λμ€ β μν/μμΉ(hover, nth-child λ±) μ€νμΌλ§ |
background coverμ contain μ°¨μ΄λ? |
cover β μ±μ, μλ¦ΌO / contain β μλ¦ΌX, μ¬λ°±O |
μ νμ μ°μ μμ μ λ ¬μ μ΄λ»κ²? |
inline > id > class > νκ·Έ > * |