μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |
- νλ‘ νΈμλ
- λ€ν¬λͺ¨λν κΈ
- jsμ€ν¬λ‘€μ΄λ²€νΈ
- μΉλμμΈ
- λ°λλΌμ€ν¬λ¦½νΈ
- λ°λλΌjs
- JavaScript
- uiuxλμμΈ
- μλ°μ€ν¬λ¦½νΈ
- ν λ§μλμ ν
- μλ°μ€ν¬λ¦½νΈui
- μΉμ κ·Όμ±
- μ€ν¬λ‘€μ λλ©μ΄μ
- uiμ»΄ν¬λνΈ
- μ κ·Όμ±
- cssλ³μ
- μλ°μ€ν¬λ¦½νΈμ»΄ν¬λνΈ
- λ€ν¬λͺ¨λ
- μΉκ°λ°
- μ€ν¬λ¦°λ¦¬λμ§μ
- λ‘컬μ€ν 리μ§
- μΉUI
- preferscolorscheme
- μΈν°λ ν°λΈui
- μΉuiλμμΈ
- UIUX
- UXλμμΈ
- μ½λ©μμ
- cssμ λλ©μ΄μ
- λ°μνμΉ
- Today
- Total
UI Code Lab
π λΌμ΄λΈλ¬λ¦¬ μμ΄ μ€ν¬λ‘€ λ±μ₯ μ λλ©μ΄μ λ§λ€κΈ° – μ€μ μΉ UI μμ λ³Έλ¬Έ
π λΌμ΄λΈλ¬λ¦¬ μμ΄ μ€ν¬λ‘€ λ±μ₯ μ λλ©μ΄μ λ§λ€κΈ° – μ€μ μΉ UI μμ
π―κΏμμ΄π 2025. 7. 17. 09:30
μ΅κ·Ό μΉ UIμμ μ€ν¬λ‘€μ λ°μν΄ μμκ°
μμ°μ€λ½κ² λνλλ μΈν°λμ μ
μ¬μ©μμκ² μλκ°μ μ€λλ€.
λ³΄ν΅ GSAP, ScrollReveal κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νκ³€ νμ§λ§,
μ΄λ²μ λ°λλΌ JSμ CSSλ§μΌλ‘
κ°κ²°νκ² κ΅¬ννλ λ°©λ²μ μμλ΄ λλ€.
π§ ꡬν λͺ©ν
- μ€ν¬λ‘€ μμΉμ λ°λΌ μμ λ±μ₯
- μμ°μ€λ¬μ΄ μ λλ©μ΄μ ν¨κ³Ό
- λΌμ΄λΈλ¬λ¦¬ μμ΄ μμ HTML/CSS/JS μ¬μ©
β¨ μμ±λ UI μμ° μ΄λ―Έμ§
(π‘μμ μ΄λ―Έμ§λ‘ μ 곡 κ°λ₯ – μ΄λ―Έμ§ μμ±μ΄ νμν κ²½μ° μλ €μ£ΌμΈμ!)
- μ¬μ©μκ° νλ©΄μ μλλ‘ μ€ν¬λ‘€νλ©΄, κ° μ½ν μΈ λΈλ‘μ΄ μμ°¨μ μΌλ‘ λΆλλ½κ² λ±μ₯ν©λλ€.
- νλ¨μΌλ‘ κ°μλ‘ μμκ° μ§μ° λ±μ₯νλ©΄μ μ§μ€λλ₯Ό μ λν©λλ€.
π§© μ½λ ꡬν
β HTML ꡬ쑰
<section class="section">
<h2 class="fade-in">μΉμ
μ λͺ©</h2>
<p class="fade-in">μ΄κ³³μ μμΈ μ€λͺ
μ΄ λ€μ΄κ°λλ€.</p>
</section>
π¨ CSS μ€νμΌ
.fade-in {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.fade-in.visible {
opacity: 1;
transform: translateY(0);
}
π§ μλ°μ€ν¬λ¦½νΈ
const faders = document.querySelectorAll('.fade-in');
const handleScroll = () => {
faders.forEach(el => {
const rect = el.getBoundingClientRect();
if (rect.top < window.innerHeight - 100) {
el.classList.add('visible');
}
});
};
window.addEventListener('scroll', handleScroll);
window.addEventListener('load', handleScroll); // λ‘λ© μμλ 체ν¬
π μ€μ ν & νμ₯ μ¬λ‘
κΈ°λ₯ | μ€λͺ |
λλ μ΄ μΆκ° | λ±μ₯ μμ μ§μ ν λ transition-delayλ‘ μμ κ° μκ°μ°¨ μ‘°μ |
λ€μν λ±μ₯ λ°©μ | translateY λμ scale, rotate, opacity, clip-path λ± λ€μν CSS νμ© κ°λ₯ |
Intersection Observerλ‘ μ±λ₯ ν₯μ | λ§μ μμκ° μμ κ²½μ° μ±λ₯ μ ν λ°©μ§ |
λ°μν λμ | λͺ¨λ°μΌμμ μμ ν¬κΈ° λ° λ±μ₯ νμ΄λ° μ‘°μ νμ |
π μ€λ¬΄ μ μ© μμ
β³οΈ ν¬νΈν΄λ¦¬μ€ μΉμ¬μ΄νΈ
κ° νλ‘μ νΈ μΉ΄λκ° μ€ν¬λ‘€ μ μμν λ±μ₯ν΄ μ λ¬Έμ±μ΄ κ°μ‘°λ©λλ€.
ποΈ μ ν μμΈ νμ΄μ§
νΉμ§, μ΄λ―Έμ§, νκΈ° μμμ΄ μμ°¨μ μΌλ‘ λ±μ₯νλ©΄ μ¬μ©μκ° μ½κ² λͺ°μ ν©λλ€.
π§π« κ΅μ‘ μ½ν μΈ νλ«νΌ
κ°μ μκ°, μΉμ μμ½ λ±μ΄ λ±μ₯ μ λλ©μ΄μ μΌλ‘ μ¬μ©μ μμ μ μ§μ€μν΄
π λ±μ₯ μμ νλ¨μ λ μ λ°νκ² νκΈ°
λ¨μν getBoundingClientRect().top λ§μΌλ‘ λ±μ₯ μμΉλ₯Ό 체ν¬νλ©΄,
μμκ° μ§λμΉκ² λΉ λ₯΄κ² λνλκ±°λ μ¬μ©μ νκ²½μ λ°λΌ λ°μμ±μ΄ λ¨μ΄μ§ μ μμ΄μ.
κ·Έλμ λ±μ₯ νΈλ¦¬κ±° μμ μ 컀μ€ν°λ§μ΄μ§νλ λ°©μλ μκ°ν΄λ³Όκ²μ:
const triggerPoint = window.innerHeight * 0.8; // νλ©΄ 80% μμΉ κΈ°μ€
if (rect.top < triggerPoint) {
el.classList.add('visible');
}
π‘ μ΄λ κ² νλ©΄ μ¬μ©μκ° μ½ν μΈ μ μ§μ€ν μ μλ νμ΄λ°μ λ±μ₯νκ² λκ³ ,
λͺ¨λ°μΌμμλ λμ± λΆλλ¬μ΄ UXλ₯Ό μ 곡ν©λλ€.
π CSS λ±μ₯ ν¨κ³Ό λ€λ¬κΈ°
κΈ°λ³Έμ μΈ opacity + translateY μΈμλ λ€μμ²λΌ
μ λλ©μ΄μ μ λ€μνν μ μμ΄μ:
.fade-in {
clip-path: inset(0 0 100% 0);
transition: clip-path 0.6s ease, opacity 0.6s ease;
}
.fade-in.visible {
clip-path: inset(0 0 0% 0);
opacity: 1;
}
πΉ μ μμ λ μμκ° μ¬λΌμ΄λλ‘ μ»€λ²κ° μ΄λ¦¬λ―μ΄ λ±μ₯νλ λλμ μ€λλ€.
μκ°μ μΌλ‘ λμ± μΈλ ¨λκ² λ³΄μ΄μ£ .
β‘ Intersection Observerλ₯Ό νμ©ν κ³ κΈ λ²μ
μ±λ₯ μ΅μ νμ λλΆμ΄ λΉλκΈ°μ κ°μ§ λ°©μμ μ°λ©΄
μλ°± κ°μ μμκ° μμ΄λ λΆλλ½κ² μ²λ¦¬λ©λλ€:
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
observer.unobserve(entry.target);
}
});
}, { threshold: 0.3 });
document.querySelectorAll('.fade-in').forEach(el => {
observer.observe(el);
});
β μ΄ λ°©μμ μμκ° μΌμ λΉμ¨ μ΄μ λ³΄μΌ λλ§ μ²λ¦¬νλ―λ‘,
리μμ€ λλΉ μμ΄ μ νν νμ΄λ°μ λ±μ₯ν©λλ€.
π¬ μ¬μ©μ λ°μκ³Ό ν μ€νΈ ν
- λ±μ₯ μμλ₯Ό ν μ€νΈν λλ κ°λ°μ λꡬμμ μ€ν¬λ‘€ μλ μ‘°μ νλ©΄μ νμΈ
- λͺ¨λ°μΌμμλ κ°κΈμ translateY λ²μλ₯Ό μ€μ¬μΌ μ λλ©μ΄μ μ΄ κ³Όνμ§ μκ² λ³΄μ
- μ½ν μΈ λΈλ‘λ³λ‘ transition-delay μ‘°μ ν΄ λ μ λ°ν μ μ΄ κ°λ₯
π§Ύ λ§λ¬΄λ¦¬νλ©°
μ€ν¬λ‘€ μ λλ©μ΄μ μ λ¨μν μκ° ν¨κ³Όλ₯Ό λμ΄μ,
μ¬μ©μμ λͺ°μ λμ μ½ν μΈ μ§μ€λ ₯μ λμ΄λ κ°λ ₯ν λꡬμ λλ€.
μ΄λ² κΈμμλ GSAPμ΄λ μΈλΆ λΌμ΄λΈλ¬λ¦¬ μμ΄λ,
λ°λλΌ μλ°μ€ν¬λ¦½νΈμ CSSλ§μΌλ‘λ
μΆ©λΆν λΆλλ¬μ΄ UIλ₯Ό ꡬνν μ μλ€λ κ°λ₯μ±μ
보μ¬λλ Έμ΅λλ€.
μ΄ λ°©μμ λΉκ΅μ κ°λ³κ³ μ μ°νκ² μ μ©ν μ μκΈ° λλ¬Έμ,
ν¬νΈν΄λ¦¬μ€, μ ν μκ°, λΈλ‘κ·Έ λ± λ€μν νμ΄μ§μμ
μλν΄λ³Ό μ μμ΄μ. π¨π»
μμΌλ‘ λ λμ μ¬μ©μ κ²½νμ μν΄ μ§μ ꡬ쑰λ₯Ό μ€κ³νκ³
컀μ€ν°λ§μ΄μ§ν΄λ³΄μΈμ. π
μμ μΈν°λμ νλλ‘ μ¬μ΄νΈμ μΈμμ΄
λ¬λΌμ§ μ μλ€λ μ μ κΌ κΈ°μ΅ν΄μ£ΌμΈμ!
λ€μ κΈμμλ μ€ν¬λ‘€ μμΉμ λ°λΌ UI μμκ° κ³ μ λλ
Sticky Scroll UI μ λν΄ μμλ³Ό μμ μ΄μμ.
λ μ€λ§νΈνκ³ μ§κ΄μ μΈ λ μ΄μμμ λ§λλ λ°©λ²μ΄
κΆκΈνλ€λ©΄ κΈ°λν΄μ£ΌμΈμ!