Six patterns fondamentaux d'états bouton. Chaque micro-interaction est un dialogue : trigger → action → feedback → boucle. Testez chaque pattern et ressentez la différence de qualité perçue.
// Ripple — Material Design pattern en vanilla btn.addEventListener('click', (e) => { const ripple = document.createElement('span'); const rect = btn.getBoundingClientRect(); const size = Math.max(rect.width, rect.height) * 2; Object.assign(ripple.style, { width: size + 'px', height: size + 'px', left: (e.clientX - rect.left - size/2) + 'px', top: (e.clientY - rect.top - size/2) + 'px', position: 'absolute', borderRadius: '50%', background: 'rgba(0,0,0,0.3)', transform: 'scale(0)', animation: 'ripple .6s ease-out' }); btn.appendChild(ripple); setTimeout(() => ripple.remove(), 600); });
Le « morph » transforme un bouton rectangulaire en cercle de succès. Quel timing (durée + easing) rend la transformation la plus naturelle ? Essayez de combiner scale + ripple sur un même bouton.
Le détail qui fait la différence : formez-vous aux micro-interactions
Réserver un créneau