Créez votre compte
Rejoignez 12 400 développeurs
Résultat de validation
Paire de boutons CSS vert/rouge avec animation de pression et double encodage emoji + couleur — IDs prêts à câbler sur l'API Web Audio, zéro dépendance.
Cet effet est gratuit — la catégorie Atmosphère en contient 57 au total, dont 10 gratuits. Effect.Labs regroupe 811 effets vanilla. Découvrir la catégorie →
Rejoignez 12 400 développeurs
Résultat de validation
Cet accord est-il majeur ou mineur ?
Le composant est CSS pur : deux éléments <button> natifs portant les classes .snd-tone-success et .snd-tone-error. Chaque bouton applique une couleur sémantique en triple usage — texte, fond semi-transparent (rgba(…, 0.20)) et bordure (rgba(…, 0.30)) — avec emerald-500 (#10b981) pour le succès et red-500 (#ef4444) pour l'erreur. Ce style « ghost » laisse l'arrière-plan transparaître tout en signalant clairement l'état.
Le retour tactile est assuré par :active { transform: scale(0.95) } combiné à transition: transform 0.2s sur .snd-tone-btn — le bouton s'enfonce visuellement à l'appui sans aucun JavaScript. La mise en page interne du bouton utilise display:flex; gap:6px; align-items:center pour aligner horizontalement l'emoji (✅ ou ❌) et le libellé.
Les identifiants id="sndSuccess" et id="sndError" servent de points d'ancrage d'intégration : le projet câble la synthèse sonore dans l'onclick de chaque bouton via l'API Web Audio native — AudioContext, createOscillator() (type sine) et createGain() pour l'enveloppe. Accord majeur (sol-si-ré 392/494/587 Hz) pour le succès, accord mineur (ré-fa-la 294/349/440 Hz) pour l'erreur. La synthèse n'est pas embarquée dans le code source.
Le conteneur .snd-tones positionne les deux boutons en display:flex; gap:16px. Aucun canvas, aucun requestAnimationFrame, aucun observateur — le rendu est entièrement géré par le moteur CSS du navigateur, sans coût d'initialisation.
<button> natifs : focusables au clavier (Tab + Entrée ou Espace) sans ARIA ni JavaScript supplémentaires.transition: transform 0.2s sur :active n'est pas désactivée. Ajoutez dans votre CSS : @media (prefers-reduced-motion: reduce) { .snd-tone-btn { transition: none; } .snd-tone-btn:active { transform: none; } }.#10b981) sur fond sombre atteint ≈ 5,6:1 ; red-500 (#ef4444) ≈ 5,3:1 — tous deux au-dessus du seuil WCAG AA (4,5:1).Composant CSS pur — aucune API JavaScript requise pour la partie visuelle. L'API Web Audio (synthèse audio optionnelle) est supportée dans tous les navigateurs modernes.
Sans CSS, les deux <code><button></code> s'affichent avec les styles natifs du navigateur et restent cliquables — aucune erreur JS, aucune dépendance cassée.
Copiez les trois blocs dans votre page. Aucune dépendance.
<div class="snd-tones">
<button class="snd-tone-btn snd-tone-success" id="sndSuccess">✅ Succes</button>
<button class="snd-tone-btn snd-tone-error" id="sndError">❌ Erreur</button>
</div>
.snd-tones {
display: flex;
gap: 16px;
}
.snd-tone-btn {
padding: 12px 24px;
border-radius: 8px;
border-width: medium;
border-style: none;
border-color: currentcolor;
border-image: initial;
cursor: pointer;
font-size: 0.85rem;
font-weight: 600;
display: flex;
align-items: center;
gap: 6px;
transition: transform 0.2s;
}
.snd-tone-btn:active {
transform: scale(0.95);
}
.snd-tone-success {
background: rgba(16, 185, 129, 0.2);
color: rgb(16, 185, 129);
border: 1px solid rgba(16, 185, 129, 0.3);
}
.snd-tone-error {
background: rgba(239, 68, 68, 0.2);
color: rgb(239, 68, 68);
border: 1px solid rgba(239, 68, 68, 0.3);
}
// Effet CSS pur — pas de JavaScript nécessaire
Options passées à l'API ou attributs data-* :
| Option / propriété | Défaut | Effet |
|---|---|---|
| rgba(16, 185, 129, …) — CSS .snd-tone-success | emerald-500 | Couleur du bouton succès (texte, fond ×0,20, bordure ×0,30). Remplacer par la couleur positive de votre brand — ex. indigo : rgba(99, 102, 241, 0.2). |
| rgba(239, 68, 68, …) — CSS .snd-tone-error | red-500 | Couleur du bouton erreur. Passer à ambre si votre charte évite le rouge vif : rgba(245, 158, 11, 0.2). |
| border-radius: 8px | 8px | Arrondi des boutons. 4px = look strict, 100px = style pill compact. |
| padding: 12px 24px | 12px 24px | Taille interne. Réduire à 6px 14px pour une intégration compacte dans une toolbar ou une row de statuts. |
| font-size: 0.85rem | 0.85rem | Taille du libellé. 1rem pour un CTA principal, 0.72rem pour une row dense. |
| transition: transform 0.2s | 0.2s | Durée de l'animation de pression. 0.1s = snap immédiat, 0.35s ease-out = rebond plus doux. |
| gap: 16px — sur .snd-tones | 16px | Espacement entre les deux boutons. 8px pour une barre étroite, 24px pour une mise en scène aérée. |
Non. Le fichier source est CSS pur — deux boutons visuels sans son embarqué. La synthèse est à ajouter côté projet via new AudioContext() : créez un OscillatorNode (type: 'sine'), un GainNode pour l'enveloppe ADSR, branchez-les sur ctx.destination, et déclenchez-les dans l'onclick de #sndSuccess et #sndError. Les IDs sont prévus pour cet usage.
Oui : supprimez l'une des classes et basculez l'autre via btn.classList.replace('snd-tone-success', 'snd-tone-error'). Le bouton change instantanément de couleur (texte, fond, bordure). Combinez avec une mise à jour du textContent et de l'emoji pour un retour complet sans créer deux éléments séparés.
Pas dans le code source. Ajoutez ce bloc dans votre CSS global : @media (prefers-reduced-motion: reduce) { .snd-tone-btn { transition: none; } .snd-tone-btn:active { transform: none; } } — trois lignes suffisent sans modifier le code de l'effet.