UI Code Lab

🧲 슀크둀 μœ„μΉ˜μ— 따라 κ³ μ •λ˜λŠ” UI λ§Œλ“€κΈ° – Sticky μš”μ†Œ κ΅¬ν˜„ μ™„μ „ 정볡 λ³Έλ¬Έ

μžλ°”μŠ€ν¬λ¦½νŠΈUI

🧲 슀크둀 μœ„μΉ˜μ— 따라 κ³ μ •λ˜λŠ” UI λ§Œλ“€κΈ° – Sticky μš”μ†Œ κ΅¬ν˜„ μ™„μ „ 정볡

πŸ―κΏ€μƒμ΄πŸ 2025. 7. 18. 09:23

슀크둀 μœ„μΉ˜μ— 따라 κ³ μ •λ˜λŠ” UI λ§Œλ“€κΈ° – Sticky μš”μ†Œ κ΅¬ν˜„ μ™„μ „ 정볡

 

 

 

μŠ€ν¬λ‘€μ„ 내리면 λ©”λ‰΄λ‚˜ 헀더가 ν™”λ©΄ 상단에 κ³ μ •λ˜μ–΄ 계속 λ³΄μ΄λŠ” κ²½ν—˜,

λ‹€λ“€ ν•œ 번쯀 해보셨죠?

 

이런 κΈ°λŠ₯은 μ‚¬μš©μž 탐색 νš¨μœ¨μ„ 높이고,

μƒν˜Έμž‘μš© μš”μ†Œμ— 집쀑도λ₯Ό λ†’μ—¬μ£ΌλŠ” 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λ₯Ό ν•΄μΉ  수 μžˆμœΌλ‹ˆ 핡심 μš”μ†Œμ—λ§Œ μ μš©ν•˜μ„Έμš”.