| μΌ | μ | ν | μ | λͺ© | κΈ | ν | 
|---|---|---|---|---|---|---|
| 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 | 
- μΉκ°λ°
 - λ°λλΌμ€ν¬λ¦½νΈ
 - jsμ€ν¬λ‘€μ΄λ²€νΈ
 - λ°λ§μΌν
 - λ€ν¬λͺ¨λ
 - νλ‘ νΈμλ
 - Golden
 - κ°μμμ΄λ
 - μΉUI
 - μλ°μ€ν¬λ¦½νΈ
 - λ·νλ¦μ€μ λλ©μ΄μ 
 - λ°λλΌjs
 - UXλμμΈ
 - μ¬μ보μ΄μ¦
 - JavaScript
 - 골λ
 - μλ°μ€ν¬λ¦½νΈui
 - λΉλ³΄λμ°¨νΈ
 - μ κ·Όμ±
 - μΌμ΄νλ°λͺ¬νν°μ€
 - μΉλμμΈ
 - UIUX
 - λ·νλ¦μ€ost
 - μ€ν¬λ‘€μ λλ©μ΄μ 
 - λ€ν¬λͺ¨λν κΈ
 - μΉμ κ·Όμ±
 - μΌλ°ν
 - uiμ»΄ν¬λνΈ
 - ννΈλ¦μ€
 - kpopdemonhunters
 
- 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λ₯Ό ν΄μΉ μ μμΌλ ν΅μ¬ μμμλ§ μ μ©νμΈμ.