μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- μλ°μ€ν¬λ¦½νΈμ»΄ν¬λνΈ
- νλ‘ νΈμλ
- μ κ·Όμ±
- preferscolorscheme
- λ‘컬μ€ν 리μ§
- μΉμ κ·Όμ±
- λ°λλΌμ€ν¬λ¦½νΈ
- μΉuiλμμΈ
- cssλ³μ
- μλ°μ€ν¬λ¦½νΈ
- UIUX
- uiuxλμμΈ
- jsμ€ν¬λ‘€μ΄λ²€νΈ
- λ€ν¬λͺ¨λ
- λ°μνμΉ
- μ€ν¬λ‘€μ λλ©μ΄μ
- UXλμμΈ
- μ½λ©μμ
- μΉλμμΈ
- uiμ»΄ν¬λνΈ
- μ€ν¬λ¦°λ¦¬λμ§μ
- μλ°μ€ν¬λ¦½νΈui
- μΈν°λ ν°λΈui
- λ°λλΌjs
- μΉκ°λ°
- cssμ λλ©μ΄μ
- λ€ν¬λͺ¨λν κΈ
- ν λ§μλμ ν
- μΉUI
- JavaScript
- Today
- Total
UI Code Lab
π§² μ€ν¬λ‘€ μμΉμ λ°λΌ κ³ μ λλ UI λ§λ€κΈ° – Sticky μμ ꡬν μμ μ 볡 λ³Έλ¬Έ
π§² μ€ν¬λ‘€ μμΉμ λ°λΌ κ³ μ λλ UI λ§λ€κΈ° – Sticky μμ ꡬν μμ μ 볡
π―κΏμμ΄π 2025. 7. 18. 09:23
μ€ν¬λ‘€μ λ΄λ¦¬λ©΄ λ©λ΄λ ν€λκ° νλ©΄ μλ¨μ κ³ μ λμ΄ κ³μ 보μ΄λ κ²½ν,
λ€λ€ ν λ²μ―€ ν΄λ³΄μ ¨μ£ ?
μ΄λ° κΈ°λ₯μ μ¬μ©μ νμ ν¨μ¨μ λμ΄κ³ ,
μνΈμμ© μμμ μ§μ€λλ₯Ό λμ¬μ£Όλ UI κΈ°λ² μ€ νλμμ.
μ΄λ² κΈμμλ position: sticky μ μλ°μ€ν¬λ¦½νΈλ₯Ό νμ©ν΄
μ€ν¬λ‘€ μμΉμ λ°λΌ κ³ μ λλ μμ(Sticky UI) λ₯Ό λ§λλ λ°©λ²μ μκ°ν©λλ€.
π― ꡬν λͺ©ν
- νΉμ μμμμ μ€ν¬λ‘€ μ μμ κ³ μ
- μμ CSS λλ JSλ‘ κ΅¬ν
- λ°μν μΉμμλ μ μ°νκ² μλ
βοΈ κΈ°λ³Έ CSS λ°©μ – position: sticky
κ°μ₯ κ°λ¨ν λ°©μμ CSSμ position: sticky μμ±μ μ¬μ©νλ κ²μ λλ€.
.sticky {
position: sticky;
top: 0; /* νλ©΄ μμμ μΌλ§λ λ¨μ΄μ§ μμΉμ κ³ μ μν¬μ§ μ§μ */
background: white;
z-index: 10;
}
β HTML ꡬ쑰 μμ
<header class="sticky">
<nav>λ΄λΉκ²μ΄μ
λ°</nav>
</header>
<section>λ³Έλ¬Έ μ½ν
μΈ </section>
π‘ μ΄ λ°©μμ μμκ° λΆλͺ¨ 컨ν μ΄λμ μμ μμμλ§ κ³ μ λλ―λ‘, ꡬ쑰 μ€κ³κ° μ€μν©λλ€.
λΆλͺ¨ μμκ° overflow: hidden μ΄λ overflow: auto μΈ κ²½μ° stickyκ° μ λλ‘ λμνμ§ μμ μ μμ΄μ!
π§ μλ°μ€ν¬λ¦½νΈ λ°©μ – μΌμ μμΉμμ ν΄λμ€ ν κΈ
CSSλ§μΌλ‘ μ μ΄νκΈ° μ΄λ €μ΄ κ²½μ°μ JSλ₯Ό νμ©ν΄ λ±μ₯ μμ μ΄λ κ³ μ μ¬λΆλ₯Ό λ³΄λ€ μΈλ°νκ² μ μ΄ν μ μμ΄μ.
const stickyTarget = document.querySelector('.sticky');
const stickyOffset = stickyTarget.offsetTop;
window.addEventListener('scroll', () => {
if (window.scrollY > stickyOffset) {
stickyTarget.classList.add('fixed');
} else {
stickyTarget.classList.remove('fixed');
}
});
π¨ μΆκ° CSS
.fixed {
position: fixed;
top: 0;
width: 100%;
box-shadow: 0 2px 6px rgba(0,0,0,0.1);
}
π μ΄λ κ² νλ©΄ μ€ν¬λ‘€ μμΉμ λ°λΌ ν΄λμ€λ₯Ό ν κΈνλ©΄μ μμ ν νλ©΄ μλ¨μ κ³ μ λλ ν¨κ³Όλ₯Ό μ€ μ μμ΄μ.
π μ€λ¬΄ μ μ© μΌμ΄μ€
μ μ© μν© | μ€λͺ |
μ ν νμ΄μ§ κ³ μ ꡬ맀 λ²νΌ | μ€ν¬λ‘€ μ κ³μ 보μ΄κ² νμ¬ μ νμ¨μ λμ |
λ¬Έμ μ½ν μΈ κ³ μ λͺ©μ°¨ | κΈ΄ κΈμμ μΉμ μ΄λμ μ½κ² λ§λ€μ΄μ€ |
κ²μκΈ μμ±μ°½ μλ¨ κ³ μ ν΄λ° | μ¬μ©μκ° μ€ν¬λ‘€μ λ΄λ¦΄ λλ ν΄λ°λ₯Ό νμ μ κ·Ό κ°λ₯νκ² |
π§ νμ₯ κΈ°λ₯ μ μ
- κ³ μ ν΄μ κ΅¬κ° μ€μ : νΉμ μΉμ μ§λλ©΄ λ€μ κ³ μ ν΄μ λλ κΈ°λ₯
- λͺ¨λ°μΌ/PC νκ²½λ³ κ³ μ λ°©μ μ‘°μ
- Sticky μμ λ΄λΆ μ λλ©μ΄μ μΆκ° (μ: κΈμ μ λ³κ²½, νλ ν¨κ³Ό λ±)
- Intersection Observerλ‘ κ³ μ νμ΄λ° κ°μ§ κ°μ
π λ§λ¬΄λ¦¬ ν
- position: stickyλ λ μ΄μμμ΄ λ¨μν λ κ°λ ₯ν λꡬμ§λ§, λμ UIμλ JSκ° λ μ μ°ν΄μ.
- λΈλΌμ°μ νΈνμ±κ³Ό κ³ μ λμμ z-index, λΆλͺ¨ μμμ overflow μμ±λ λ°λμ νμΈνμΈμ.
- κ³ μ μμκ° λ무 λ§μΌλ©΄ μ€νλ € UXλ₯Ό ν΄μΉ μ μμΌλ ν΅μ¬ μμμλ§ μ μ©νμΈμ.