μλ°μ€ν¬λ¦½νΈλ‘ λ§λλ μλ¦Ό(Toast) μ»΄ν¬λνΈ
π κ°μ
Toast μλ¦Όμ μ¬μ©μμκ² λΉ λ₯΄κ³ κ°λ¨ν νΌλλ°±μ μ 곡νλ UI μμμ λλ€.
μλ₯Ό λ€μ΄ “μ μ₯λμμ΅λλ€”μ²λΌ νλ©΄ μλ¨μ΄λ νλ¨μ μ§§κ² λνλλ μλ¦Ό λ§μ΄μ£ .
μ΄ κΈμμλ λ°λλΌ μλ°μ€ν¬λ¦½νΈ(Vanilla JS)λ§μΌλ‘
μ¬μ¬μ© κ°λ₯ν toast μ»΄ν¬λνΈλ₯Ό λ§λλ λ²μ μκ°ν©λλ€.
- β μμ JSλ‘ κ°λ³κ² ꡬν
- β μμΉ, μ§μ μκ°, μ λλ©μ΄μ μ€μ κ°λ₯
- β μ€ν¬λ¦° 리λ μ¬μ©μλ κ³ λ €ν μ κ·Όμ±
π‘ Toast UIλ?
Toastλ νλ©΄ νμͺ½μ λͺ μ΄κ° νμλλ μΌμμ μΈ λ©μμ§μ λλ€.
μ¬μ©μκ° λ³λμ μ‘°μ μμ΄ νΌλλ°±μ λ°μ μ μμ΄ UX ν₯μμ ν¨κ³Όμ μ΄μ£ .
π μμ£Ό μ°μ΄λ μν© μμ
- νΌ μ μΆ ν “μ μΆμ΄ μλ£λμμ΅λλ€”
- λ³΅μ¬ λ²νΌ ν΄λ¦ μ “ν΄λ¦½λ³΄λμ 볡μ¬λ¨”
- μ μ₯, μμ , μ€λ₯ μλ΄ λ±
π οΈ HTML ꡬ쑰
<div id="toast-container"></div>
toast-containerλ ν μ€νΈ λ©μμ§λ₯Ό κ°μΈλ 컨ν μ΄λμ λλ€.
μλ°μ€ν¬λ¦½νΈμμ λμ μΌλ‘ λ©μμ§λ₯Ό μ½μ ν΄ μ¬μ©ν μμ μ΄μμ.
π¨ CSS μ€νμΌ
#toast-container {
position: fixed;
top: 1.5rem;
right: 1.5rem;
z-index: 9999;
}
.toast {
background: #333;
color: #fff;
padding: 0.75rem 1.2rem;
margin-top: 0.5rem;
border-radius: 4px;
opacity: 0;
transform: translateY(-10px);
transition: opacity 0.3s ease, transform 0.3s ease;
}
.toast.show {
opacity: 1;
transform: translateY(0);
}
βοΈ μλ°μ€ν¬λ¦½νΈ λ‘μ§
function showToast(message, duration = 3000) {
const container = document.getElementById('toast-container');
const toast = document.createElement('div');
toast.className = 'toast';
toast.innerText = message;
container.appendChild(toast);
// νμ
requestAnimationFrame(() => toast.classList.add('show'));
// μ¬λΌμ§κΈ°
setTimeout(() => {
toast.classList.remove('show');
toast.addEventListener('transitionend', () => toast.remove());
}, duration);
}
β μ κ·Όμ± κ³ λ € (a11y)
toast.setAttribute('role', 'alert');
toast.setAttribute('aria-live', 'assertive');
- role="alert": μ€ν¬λ¦° 리λκ° μ¦μ μ½μ΄μ€λλ€.
- aria-live="assertive": κΈ΄κΈνκ² μ λ¬ν νμκ° μμ κ²½μ° μ¬μ©ν©λλ€.
π§ͺ μ¬μ© μμ
<button onclick="showToast('볡μ¬λμμ΅λλ€!')">볡μ¬</button>
π νμ₯ ν¬μΈνΈ
- β ν μ€νΈ μμΉ μ»€μ€ν°λ§μ΄μ§ (μΌμͺ½, κ°μ΄λ° λ±)
- β μμ΄μ½, μμ λ³κ²½
- β ν(queue) μ²λ¦¬: μ¬λ¬ toastκ° κ²ΉμΉμ§ μκ²
- β μ¬μ΄λ μΆκ° λ± λ€μν μΈν°λμ
π κ΄λ ¨ ν€μλ (SEO)
- μλ°μ€ν¬λ¦½νΈ toast λ§λ€κΈ°
- λ°λλΌ JS μλ¦Ό UI
- toast λ©μμ§ μμ
- μλ°μ€ν¬λ¦½νΈ λμ μ»΄ν¬λνΈ
- μΉ μ κ·Όμ± μλ¦Ό ꡬν
π§© λ§λ¬΄λ¦¬νλ©°
JavaScriptλ§μΌλ‘λ νΈλ¦¬ UIλ₯Ό μΆ©λΆν νλΆνκ² κ΅¬νν μ μμ΅λλ€.
κΈ°λ³Έ κΈ°λ₯μμ μΆλ°ν΄ μμ΄μ½, λλκ·Έ μ€ λλ‘, κ²μ, κ·Έλ¦¬κ³ μ κ·Όμ±κΉμ§ μ±κΈ°λ©΄μ
μ¬μ©μ κ²½νμ λ μ κ΅νκ² λ€λ¬λ κ³Όμ μ νλ°νΈμλ κ°λ°μ μ§μ§ μ¬λ―Έλ₯Ό λλ μ μκ² ν΄ μ€λλ€.
μ΄μ μ¬λ¬λΆμ νΈλ¦¬ UIλ λ¨μν νμΌ κ΅¬μ‘° ννμ λμ΄,
λꡬμκ²λ μΉμ ν μΈν°νμ΄μ€λ‘ νμ₯λ μ€λΉκ° λμμ΄μ.
μ¬κΈ°μ μ λλ©μ΄μ , API μ°λ, 컀μ€ν°λ§μ΄μ§ μ΅μ λ± μνλ κΈ°λ₯μ λ§λΆμ΄λ©΄
λλ§μ λ©μ§ μ»΄ν¬λνΈκ° μμ±λκ² μ£ . π§
κΆκΈν μ μ΄λ λ λ€λ€μΌλ©΄ νλ UI μ£Όμ κ° μλ€λ©΄ λκΈλ‘ μλ €μ£ΌμΈμ!
κ·ΈλΌ λ€μ ν¬μ€νΈμμ λ λ§λμ. π