CSS scroll-behaviorλ₯Ό λ§μ€ν°νμ¬ λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ ꡬννμΈμ. μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ ꡬν λ°©λ²κ³Ό κΈλ‘λ² λͺ¨λ² μ¬λ‘μ λν μ΄ κ°μ΄λλ‘ μ¬μ©μ κ²½ν(UX)μ ν₯μμν€μΈμ.
CSS Scroll Behavior: μνν μ¬μ©μ κ²½νμ μν λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§ νμ©νκΈ°
μΉ κ°λ°μ μλμ μΈ μΈκ³μμ, λ§€λ ₯μ μ΄κ³ μ§κ΄μ μΈ μ¬μ©μ κ²½ν(UX)μ λ§λλ κ²μ 무μλ³΄λ€ μ€μν©λλ€. μ΄μ ν¬κ² κΈ°μ¬νλ λ―Έλ¬νμ§λ§ κ°λ ₯ν κΈ°μ μ€ νλκ° λ°λ‘ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ λλ€. κΈ΄ μΉ νμ΄μ§λ₯Ό νμνκ±°λ λ΄λΆ λ§ν¬λ₯Ό ν΄λ¦ν λ κ°μμ€λ½κ² νλ νμμ μ΄μ κ³Όκ±°μ μΌμ΄ λμμ΅λλ€. νλ μΉ λμμΈμ μ λμ±μ μ°μ μνλ©°, CSS Scroll Behaviorλ μ΄λ₯Ό μμ½κ² λ¬μ±ν μ μλ κ΄λ¬Έμ λλ€.
μ΄ μ’
ν© κ°μ΄λμμλ CSSμ scroll-behavior
μμ±μ λν΄ κΉμ΄ νκ³ λ€μ΄, κ·Έ κΈ°λ₯, ꡬν λ°©λ², λͺ¨λ² μ¬λ‘ λ° κΈλ‘λ² μ¬μ©μλ₯Ό μν κ³ λ € μ¬νμ νμν κ²μ
λλ€. μλ ¨λ νλ‘ νΈμλ κ°λ°μμ΄λ μ΄μ λ§ μ¬μ μ μμν λΆμ΄λ , λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ μ΄ν΄νκ³ κ΅¬ννλ κ²μ μ¬λ¬λΆμ μΉμ¬μ΄νΈλ₯Ό κΈ°λ₯μ μΈ μμ€μμ μ§μ μΌλ‘ λ°μ΄λ μμ€μΌλ‘ λμ΄μ¬λ¦΄ μ μμ΅λλ€.
μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ νμμ± μ΄ν΄νκΈ°
μΉμ¬μ΄νΈμμ κΈ΄ κΈ°μ¬λ₯Ό νμνλ€κ³ μμν΄ λ³΄μΈμ. κΈ°λ³Έ μ€ν¬λ‘€λ§μμλ '맨 μλ‘ κ°κΈ°' λ§ν¬λ λ΄λΆ μ΅μ»€ λ§ν¬λ₯Ό ν΄λ¦νλ©΄ λμ μΉμ μΌλ‘ μ¦κ°μ μ΄κ³ κ°μμ€λ½κ² μ΄λν©λλ€. μ΄λ νΉν μ½ν μΈ κ° λ§μ νμ΄μ§μμ λ°©ν₯ κ°κ°μ μκ² ν μ μμΌλ©°, μ¬μ©μ νλ¦κ³Ό μ λ¬Έμ μΈ μΈμμ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
λ°λ©΄μ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ νμ¬ μ€ν¬λ‘€ μμΉμμ λͺ©ν μ§μ κΉμ§ μ μ§μ μΈ μ λλ©μ΄μ μ μ 곡ν©λλ€. μ΄ λΆλλ¬μ΄ μ νμ λ€μκ³Ό κ°μ μ΄μ μ κ°μ§λλ€:
- κ°λ μ± ν₯μ: μ¬μ©μκ° μΉμ κ°μ μ΄λν λ λ§₯λ½μ μ μ§ν μ μλλ‘ ν©λλ€.
- νμ κ°μ : κΈ΄ νμ΄μ§λ₯Ό νμνλ κ²μ΄ λ μ μ΄λκ³ λ κ±°μ¬λ¦¬κ² λκ»΄μ§λλ€.
- μΈμλλ νμ§ ν₯μ: λΆλλ¬μ΄ μ€ν¬λ‘€λ§ κ²½νμ μ’ μ’ λ λμ μμ€μ μμ±λμ μΈμ¬ν¨μ μ λ¬ν©λλ€.
- μ κ·Όμ± μ§μ: νΉμ μΈμ§ λλ μ΄λ μ₯μ κ° μλ μ¬μ©μμκ²λ μ¦κ°μ μΈ μ νλ³΄λ€ μ μ΄λ μ€ν¬λ‘€μ΄ λ°λΌκ°κΈ° λ μ¬μΈ μ μμ΅λλ€.
scroll-behavior
μ κ°λ ₯ν¨
CSSμ scroll-behavior
μμ±μ μ€ν¬λ‘€ κ°λ₯ν μμμ μ€ν¬λ‘€ μ λλ©μ΄μ
μ μ μ΄νλ κ°μ₯ ν¨μ¨μ μΈ λ€μ΄ν°λΈ λ°©λ²μ
λλ€. μ΄ μμ±μ λ κ°μ§ μ£Όμ κ°μ μ 곡ν©λλ€:
auto
: κΈ°λ³Έκ°μ λλ€. μ€ν¬λ‘€μ΄ μ¦κ°μ μΌλ‘ λ°μνλ©° μ λλ©μ΄μ μ΄ μμ΅λλ€.smooth
: μ΅μ»€ λ§ν¬ ν΄λ¦ λ± μ€ν¬λ‘€ λμμ΄ νΈλ¦¬κ±°λλ©΄ λΈλΌμ°μ κ° λμκΉμ§ μ€ν¬λ‘€μ μ λλ©μ΄μ μΌλ‘ μ²λ¦¬ν©λλ€.
λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§ ꡬννκΈ°
scroll-behavior
λ₯Ό μ¬μ©νμ¬ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ ꡬννλ κ²μ λ§€μ° κ°λ¨ν©λλ€. μ£Όλ‘ μ€ν¬λ‘€λλ μμμ μ΄ μμ±μ μ μ©νλ©΄ λ©λλ€. λλΆλΆμ μΉ νμ΄μ§μμ μ΄λ λ·°ν¬νΈμ μ€ν¬λ‘€μ κ΄λ¦¬νλ html
λλ body
μμμ
λλ€.
μμ 1: μ 체 νμ΄μ§μ μ μ©νκΈ°
μ 체 μΉ νμ΄μ§μ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ νμ±ννλ €λ©΄ html
μμλ₯Ό λμμΌλ‘ μ§μ ν©λλ€ (body
λ κ°λ₯νμ§λ§, html
μ΄ λ€λ₯Έ λ λλ§ μμ§ κ°μ νλμ νΈνμ±μ μν΄ μ νΈλ©λλ€):
html {
scroll-behavior: smooth;
}
μ΄ κ°λ¨ν CSS κ·μΉλ§μΌλ‘ λ·°ν¬νΈ λ΄μ μ΅μ»€ λ§ν¬(μ: <a href="#section-id">μΉμ
μΌλ‘ μ΄λ</a>
)λ₯Ό ν΄λ¦νλ©΄ ν΄λΉ IDλ₯Ό κ°μ§ μμ(μ: <div id="section-id">...</div>
)λ‘ λΆλλ½κ² μ€ν¬λ‘€λ©λλ€.
μμ 2: νΉμ μ€ν¬λ‘€ κ°λ₯ 컨ν μ΄λμ μ μ©νκΈ°
λλ‘λ μ¬μ΄λλ°, λͺ¨λ¬ μ°½ λλ μ¬μ©μ μ μ μ½ν
μΈ μμκ³Ό κ°μ΄ νμ΄μ§μ μ€ν¬λ‘€ κ°λ₯ν νΉμ μμκ° μμ μ μμ΅λλ€. μ΄λ° κ²½μ° ν΄λΉ μμμ μ§μ scroll-behavior: smooth;
λ₯Ό μ μ©ν μ μμ΅λλ€:
.scrollable-content {
height: 300px;
overflow-y: scroll;
scroll-behavior: smooth;
}
μ΄ μλ리μ€μμλ .scrollable-content
컨ν
μ΄λ λ΄μμμ μ€ν¬λ‘€λ§ μ λλ©μ΄μ
νλ©λλ€. μ΄ νΉμ 컨ν
μ΄λ λ΄μ μμλ₯Ό λμμΌλ‘ νλ λ΄λΆ λ§ν¬λ μ€ν¬λ‘€ λͺ
λ Ήμ΄ λΆλλ¬μ΄ μ λλ©μ΄μ
μ ννμ λ°κ² λ©λλ€.
λΈλΌμ°μ μ§μ λ° κ³ λ € μ¬ν
scroll-behavior
μμ±μ λͺ¨λ μ΅μ λΈλΌμ°μ μμ κ΄λ²μνκ² μ§μλ©λλ€. λ°λΌμ λλΆλΆμ κ²½μ° μλ°μ€ν¬λ¦½νΈ ν΄λ°±(fallback) μμ΄λ λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ ꡬνν μ μλ μ λ’°ν μ μλ μ νμ§μ
λλ€.
νμ§λ§ μ μ¬μ μΈ λ―Έλ¬ν μ°¨μ΄μ μ μΈμ§νλ κ²μ νμ μ’μ μ΅κ΄μ λλ€:
- ꡬν λΈλΌμ°μ : μ§μμ νλ₯νμ§λ§, λ§€μ° νΉμνκ±°λ λ κ±°μ λΈλΌμ°μ μ§μ μꡬ μ¬νμ΄ μλ κ²½μ°, ν΄λ°±μΌλ‘ μλ°μ€ν¬λ¦½νΈ κΈ°λ°μ μ€λ¬΄μ€ μ€ν¬λ‘€λ§ μ루μ μ μ¬μ ν κ³ λ €ν μ μμ΅λλ€.
- μ€ν¬λ‘€λ° μ€νμΌλ§:
::-webkit-scrollbar
λ±μ μ¬μ©νμ¬ μ€ν¬λ‘€λ° μ€νμΌμ μ§μ ν λ, μ€νμΌμ΄ μ λλ©μ΄μ μ λ°©ν΄νμ§ μλλ‘ ν΄μΌ ν©λλ€.
κΈλ‘λ² κ΄μ κ³Ό λͺ¨λ² μ¬λ‘
κΈλ‘λ² μ¬μ©μλ₯Ό λμμΌλ‘ λμμΈν λ, μ΄λ¬ν κΈ°λ₯μ΄ λ€μν λ¬Ένμ κΈ°μ νκ²½μμ μ΄λ»κ² μΈμλλμ§ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. λ€ννλ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ 보νΈμ μΌλ‘ νμλ°λ UX κ°μ μ¬νμ λλ€.
λͺ¨λλ₯Ό μν μ κ·Όμ±
λͺ¨λ μ¬λμ΄ μΉμ¬μ΄νΈμ μ κ·Όν μ μλλ‘ λ³΄μ₯νλ κ²μ νλ μΉ κ°λ°μ ν΅μ¬ μμΉμ
λλ€. scroll-behavior: smooth;
λ μ¬λ¬ κ°μ§ λ°©μμΌλ‘ μ κ·Όμ±μ κΈ°μ¬ν©λλ€:
- μμ§μ λ―Όκ°λ κ°μ: κΈ°λ³Έ μ€λ¬΄μ€ μ€ν¬λ‘€μ μΌλ°μ μΌλ‘ λΆλλ½μ§λ§, μ μ μ₯μ λ μμ§μμ λ―Όκ°ν μΌλΆ μ¬μ©μλ μ΄λ€ μ λλ©μ΄μ
μ΄λΌλ λΆνΈν¨μ λλ μ μμ΅λλ€.
prefers-reduced-motion
λ―Έλμ΄ μΏΌλ¦¬λ₯Ό μ¬μ©νμ¬ μ΄λ¬ν μ¬μ©μλ₯Ό μν΄ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ λΉνμ±νν μ μμ΅λλ€.
μμ 3: μμ§μ κ°μ μ¬μ©μ μ νΈλ μ‘΄μ€νκΈ°
μ΄μ 체μ μ€μ μμ μ λλ©μ΄μ
μ μ€μ΄λλ‘ μ νΈλλ₯Ό νμν μ¬μ©μλ₯Ό μν΄ μ¦κ°μ μΈ μ€ν¬λ‘€λ§μΌλ‘ λ체νλλ‘ prefers-reduced-motion
λ―Έλμ΄ μΏΌλ¦¬λ₯Ό ν΅ν©ν μ μμ΅λλ€:
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
}
μ΄λ μμ§μμ λ―Όκ°ν μ¬μ©μκ° μ€λ¬΄μ€ μ€ν¬λ‘€λ§ κΈ°λ₯μΌλ‘ μΈν΄ λΆμ μ μΈ μν₯μ λ°μ§ μλλ‘ λ³΄μ₯νλ©°, μ¬λ € κΉκ³ ν¬μ©μ μΈ λμμΈ μ κ·Ό λ°©μμ 보μ¬μ€λλ€. μ΄λ μ κ·Όμ± μκ΅¬κ° λ§€μ° λ€μν κΈλ‘λ² μ¬μ©μλ₯Ό μν΄ νΉν μ€μν©λλ€.
μ±λ₯μ λ―ΈμΉλ μν₯
λ€μ΄ν°λΈ CSS scroll-behavior
μμ± μ¬μ©μ μ£Όμ μ΄μ μ€ νλλ λ°μ΄λ μ±λ₯μ
λλ€. λΈλΌμ°μ λ μ΄λ¬ν μ λλ©μ΄μ
μ ν¨μ¨μ μΌλ‘ μ²λ¦¬νλλ‘ κ³ λλ‘ μ΅μ νλμ΄ μμΌλ©°, μ’
μ’
νλμ¨μ΄ κ°μμ νμ©ν©λλ€. μ΄λ νμ΄μ§μ μΌλΆλ₯Ό λ€μ λ λλ§νκ±°λ μ§μμ μΈ μλ°μ€ν¬λ¦½νΈ μ€νμ μꡬν μ μλ μλ°μ€ν¬λ¦½νΈ κΈ°λ° μ루μ
μ λΉν΄ μΌλ°μ μΌλ‘ λ λΆλλ½κ³ μ±λ₯μ΄ λ°μ΄λ κ²½νμ μ 곡ν©λλ€.
λ€μν λ€νΈμν¬ μ‘°κ±΄κ³Ό κΈ°κΈ°λ₯Ό μ¬μ©νλ μ¬μ©μκ° μμ μ μλ κΈλ‘λ² μΉμ¬μ΄νΈμ κ²½μ°, μ±λ₯μ μν΄ λ€μ΄ν°λΈ λΈλΌμ°μ κΈ°λ₯μ μ°μ μνλ κ²μ΄ νμ νλͺ ν μ λ΅μ λλ€.
μ¬μ©μ μΈν°νμ΄μ€(UI)μ μ¬μ©μ κ²½ν(UX)μ μλμ§
scroll-behavior
λ λ―Έλ¬ν UI λ³νκ° μ΄λ»κ² μλΉν UX κ°μ μΌλ‘ μ΄μ΄μ§ μ μλμ§λ₯Ό 보μ¬μ£Όλ μλ²½ν μμ
λλ€. μ΄λ κΈ°λ₯μ μΈ μΉμ¬μ΄νΈμ μ¦κ±°μ΄ μΉμ¬μ΄νΈ μ¬μ΄μ κ°κ·Ήμ λ©μλλ€.
μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ΄ νΉν μ μ©ν μ μλ λ€μκ³Ό κ°μ κ΅μ μ μΈ μμλ₯Ό κ³ λ €ν΄ λ³΄μΈμ:
- μ μμκ±°λ μν νμ΄μ§: μ¬λ¬ μν λ³νμ΄λ μμΈ μ¬μμ 보μ¬μ£Όλ νμ΄μ§μμ λ΄λΆ νμ('μΈλΆ μ 보 보기' λ²νΌμμ νΉμ μΉμ μΌλ‘ μ΄λ λ±)μ μν μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ λΈλΌμ°μ§ κ²½νμ ν₯μμν΅λλ€. λμΏμ μ¬μ©μκ° κ°μμ€λ¬μ΄ νμ΄μ§ μ ν μμ΄ κΈ°λ₯μ λΉκ΅νλ λͺ¨μ΅μ μμν΄ λ³΄μΈμ.
- λ΄μ€ ν¬νΈ λ° λΈλ‘κ·Έ: κΈ΄ νμμ κΈ°μ¬λ λ΄μ€ νΌλμ κ²½μ°, μΉμ κ° λλ 'λ 보기' μ½ν μΈ λ‘μ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ μ§μμ μΈ λ μ κ²½νμ μ 곡νλ©°, λλ°μ΄λ μνμΈλ£¨μ κ°μ λ²νν λμμμ μ΄λ μ€μ μ½ν μΈ μ μ μν μ μλ μ¬μ©μμκ² κ°μΉκ° μμ΅λλ€.
- ν¬νΈν΄λ¦¬μ€ μΉμ¬μ΄νΈ: μμ κ°μ λμμ΄λλ μ’ μ’ μ΅μ»€ λ§ν¬λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ νλ‘μ νΈλ ν¬νΈν΄λ¦¬μ€ μΉμ κ°μ μ΄λν©λλ€. μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ μ μΈκ³μ μ°½μμ μΈ μ λ¬Έκ°λ€μκ² μ΄νν μ μλ μ κ΅νκ³ μ°μν λ°©λ²μΌλ‘ μνμ μ λ³΄μΌ μ μκ² ν©λλ€.
- λ¬Έμ μ¬μ΄νΈ: κΈ°μ λ¬Έμλ μ’ μ’ λ°©λν©λλ€. μ±ν°, API μ°Έμ‘° λλ λ¬Έμ ν΄κ²° κ°μ΄λ(μ λ½μ΄λ λΆλ―Έ κΈ°μ μ μ¬μ΄νΈμμ νν λ³Ό μ μμ) κ°μ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ μ 보 κ²μμ ν¨μ¬ μ½κ² λ§λλλ€.
λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ νΌν΄μΌ ν λ
μΌλ°μ μΌλ‘ μ μ©νμ§λ§, scroll-behavior: auto;
λ₯Ό κ³ μνκ±°λ λ μΈλ°ν μ μ΄λ₯Ό μν΄ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°κ° μμ΅λλ€:
- 볡μ‘ν μ€ν¬λ‘€ νΈλ¦¬κ±° μ λλ©μ΄μ
: μΉμ¬μ΄νΈκ° μ€ν¬λ‘€ μ΄λ²€νΈμ μ ννκ² λ§μΆ°μ§ 볡μ‘ν μλ°μ€ν¬λ¦½νΈ μ λλ©μ΄μ
(μ: ν½μ
λ¨μμ μ λ°ν μ μ΄κ° νμν ν¨λ΄λμ€ ν¨κ³Ό)μ ν¬κ² μμ‘΄νλ κ²½μ°,
scroll-behavior: smooth;
μ λ΄μ₯ μ λλ©μ΄μ μ΄ λ°©ν΄κ° λ μ μμ΅λλ€. μ΄λ° κ²½μ°, μλ°μ€ν¬λ¦½νΈλ₯Ό ν΅ν΄μλ§ μ€ν¬λ‘€ λμμ μ μ΄νλ κ²μ΄ λ μμΈ‘ κ°λ₯ν©λλ€. - μ±λ₯μ΄ λ§€μ° μ€μν μ ν리μΌμ΄μ : λ§€ λ°λ¦¬μ΄κ° μ€μν κ·Ήλλ‘ μ±λ₯μ λ―Όκ°ν μ ν리μΌμ΄μ μμ λ€μ΄ν°λΈ μ λλ©μ΄μ μ μ€λ²ν€λμ‘°μ°¨ μ°λ €λ μ μλ κ²½μ°, μ¦κ°μ μΈ μ€ν¬λ‘€λ§μ μ νν΄μΌ ν μλ μμ΅λλ€. κ·Έλ¬λ λλΆλΆμ μΉ μ½ν μΈ μμλ λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ μ±λ₯ μ΄μ μ΄ μ΄λ₯Ό μμν©λλ€.
- νΉμ μ¬μ©μ νλ¦: μΌλΆ κ³ λλ‘ μ λ¬Ένλ μ¬μ©μ μΈν°νμ΄μ€λ κΈ°λ₯μ μΈ μ΄μ λ‘ μ¦κ°μ μΈ μ€ν¬λ‘€λ§μ΄ νμν μ μμ΅λλ€. μ νν λμμ΄ μλλ μνΈμμ©κ³Ό μΌμΉνλμ§ νμ μ¬μ©μ νλ¦μ ν μ€νΈνμΈμ.
κ³ κΈ κΈ°μ λ° λμ
λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ μν κΈ°λ³Έ μ νμ scroll-behavior: smooth;
μ΄μ§λ§, λ κ³ κΈ μλ리μ€λ λ ν° μ μ΄κ° νμν κ²½μ° λ€λ₯Έ μ κ·Ό λ°©μμ μΈκΈν κ°μΉκ° μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬
볡μ‘ν μ λλ©μ΄μ , μ¬μ©μ μ μ μ΄μ§(easing) ν¨μ λλ μ€ν¬λ‘€ μ§μ μκ° λ° μ€νμ μ λν μ λ°ν μ μ΄λ₯Ό μν΄ λ€μκ³Ό κ°μ μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μ μμ΅λλ€:
- GSAP (GreenSock Animation Platform): νΉν ScrollTrigger νλ¬κ·ΈμΈμ μ€ν¬λ‘€ κΈ°λ° μ λλ©μ΄μ μ λν λ 보μ μΈ μ μ΄λ ₯μ μ 곡ν©λλ€.
- ScrollReveal.js: μμκ° λ·°ν¬νΈμ λ€μ΄μ¬ λ λνλκ² νλ μΈκΈ° μλ λΌμ΄λΈλ¬λ¦¬μ λλ€.
- jQuery Easing Plugins (λ κ±°μ): μλ‘μ΄ νλ‘μ νΈμμλ λ μΌλ°μ μ΄μ§λ§, μ€λλ μ¬μ΄νΈμμλ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ μν΄ μ΄μ§ νλ¬κ·ΈμΈμ΄ ν¬ν¨λ jQueryλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ΄λ¬ν μ루μ μ λ ν° μ μ°μ±μ μ 곡νμ§λ§, νΉν λ€μν κΈ°κΈ°λ₯Ό μ¬μ©νλ κΈλ‘λ² μ¬μ©μλ₯Ό λμμΌλ‘ ν λ μλ°μ€ν¬λ¦½νΈ μ€ν μ€λ²ν€λμ μ μ¬μ μΈ μ±λ₯ κ³ λ € μ¬νμ΄ λ°λ¦ λλ€.
CSS scroll-snap
scroll-behavior
μ scroll-snap
μ νΌλνμ§ μλ κ²μ΄ μ€μν©λλ€. λ λ€ μ€ν¬λ‘€κ³Ό κ΄λ ¨μ΄ μμ§λ§, λ€λ₯Έ λͺ©μ μ κ°μ§λλ€:
scroll-behavior
: λμκΉμ§ μ€ν¬λ‘€νλ *μ λλ©μ΄μ *μ μ μ΄ν©λλ€.scroll-snap
: μ€ν¬λ‘€ ν¬νΈκ° μμμ 'μ€λ 'λ μ€ν¬λ‘€ κ°λ₯ 컨ν μ΄λλ₯Ό λ°λΌ μ§μ μ μ μν μ μκ² ν©λλ€. μ΄λ κ° 'νμ΄μ§'κ° λ·°μ λ± λ§κ² λ€μ΄μ€λ μΊλ¬μ μ΄λ νμ΄μ§λ€μ΄μ λ μ½ν μΈ λ₯Ό λ§λλ λ° νμν©λλ€.
μ΄ μμ±λ€μ κ²°ν©ν μλ μμ΅λλ€. μλ₯Ό λ€μ΄, scroll-snap-type
μ΄ μ μλ μ€ν¬λ‘€ κ°λ₯ 컨ν
μ΄λκ° μκ³ , μ¬μ©μκ° μλμΌλ‘ μ€ν¬λ‘€νλ©΄ μ€λ
λ©λλ€. λ§μ½ μ΅μ»€ λ§ν¬κ° ν΄λΉ 컨ν
μ΄λ λ΄μμ μ€ν¬λ‘€μ νΈλ¦¬κ±°νλ©΄, scroll-behavior: smooth;
κ° μ€λ
κ³Όμ μ μ λλ©μ΄μ
νν κ²μ
λλ€.
μμ 4: μ€ν¬λ‘€ λμκ³Ό μ€ν¬λ‘€ μ€λ κ²°ν©νκΈ°
.snap-container {
height: 400px;
overflow-y: scroll;
scroll-snap-type: y mandatory;
scroll-behavior: smooth;
}
.snap-item {
height: 100%;
scroll-snap-align: start;
}
μ΄ μμ μμ μλ μ€ν¬λ‘€μ κ° .snap-item
μ μμ λΆλΆμ μ€λ
λλ©°, λ§μ½ μ΅μ»€ λ§ν¬κ° λ΄λΆμ μμ΄ν
μ λμμΌλ‘ νλ©΄, μμ μ§μ μΌλ‘ μ€λ
λλ λμμ΄ λΆλλ½κ² μ λλ©μ΄μ
νλ©λλ€.
κ²°λ‘
CSS scroll-behavior
μμ±μ μΉ νμ΄μ§μ μ€ν¬λ‘€ κ°λ₯ 컨ν
μ΄λμ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ λμ
νμ¬ μ¬μ©μ κ²½νμ ν₯μμν€λ κ°λ ₯ν λ€μ΄ν°λΈ λꡬμ
λλ€. κ·Έ λ¨μμ±, κ΄λ²μν λΈλΌμ°μ μ§μ, κ·Έλ¦¬κ³ μ±λ₯μμ μ΄μ μ νλ μΉ κ°λ°μμ λꡬ μμμμ μμ΄μλ μ λ μμ°μ
λλ€.
scroll-behavior: smooth;
λ₯Ό μ μ€νκ² μ μ©νκ³ , prefers-reduced-motion
λ―Έλμ΄ μΏΌλ¦¬λ₯Ό ν΅ν΄ μ¬μ©μ μ νΈλλ₯Ό μ‘΄μ€ν¨μΌλ‘μ¨, κΈλ‘λ² μ¬μ©μμκ² κ³΅κ°μ μ»μ μ μλ λ λ§€λ ₯μ μ΄κ³ μ κ·Ό κ°λ₯νλ©° μΈλ ¨λ μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μμ΅λλ€. κ΅μ μ μΈ μ μμκ±°λ νλ«νΌ, μ½ν
μΈ κ° νλΆν λ΄μ€ μ¬μ΄νΈ, λλ μ°μν ν¬νΈν΄λ¦¬μ€λ₯Ό ꡬμΆνλ , λ€μ΄ν°λΈ μ€λ¬΄μ€ μ€ν¬λ‘€λ§μ λͺ¨λλ₯Ό μν λ λμ μΉμ ν₯ν μμ§λ§ μ€μν ν κ±Έμμ
λλ€.
μ λμ±μ λ°μλ€μ΄κ³ , μ¬μ©μλ₯Ό κΈ°μκ² νλ©°, λμμμ΄ μ§ννλ CSSμ κΈ°λ₯μ κ³μ νμνμμμ€!