
Il pulsante d’invio
Pulsanti, Transizioni, SVG
NuovaGratis
Un'azione e i modi di farla nello stesso pulsante: la freccia a destra apre un menu che si srotola dal pulsante, la spunta scivola sul modo scelto e il modo diventa l'azione, con le parole che rotolano e il pulsante che prende la loro larghezza. Premuto, unisce con una barra che corre lungo il fondo, poi diventa viola, la freccia si ripiega e dice Merged.
Una cartella che funziona da sola: index.html, style.css, script.js e le librerie da CDN. Nelle schede React e Vue la stessa demo è già un componente, che spegne le sue animazioni quando esce dalla pagina.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The split button</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/hubot-sans@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the split button: the action on the left, the arrow on the right opens the ways to do it; the chosen way
becomes the action, and pressed, the button merges and turns purple -->
<div class="split" data-split data-autoclic>
<span class="split__frame" aria-hidden="true" data-frame></span>
<div class="split__btn" role="group" aria-label="Merge" data-group>
<button class="split__main" type="button" data-main>
<span class="split__icon" aria-hidden="true" data-icon></span>
<span class="split__label"><span class="split__word" data-word>Merge pull request</span></span>
<span class="split__bar" aria-hidden="true" data-bar></span>
</button>
<button class="split__caret" type="button" aria-haspopup="menu" aria-expanded="false" aria-controls="merge-menu" aria-label="Choose how to merge" data-caret>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 10l5 5 5-5"/></svg>
</button>
</div>
<div class="split__menu" id="merge-menu" role="menu" aria-label="How to merge" data-menu hidden>
<span class="split__tick" aria-hidden="true" data-tick><svg viewBox="0 0 24 24"><path d="M5 12.6l4.3 4.3L19 7.2"/></svg></span>
<button class="split__option" type="button" role="menuitemradio" aria-checked="true" tabindex="-1" data-option="merge" data-action="Merge pull request">
<span class="split__title">Create a merge commit</span>
<span class="split__text">All 3 commits from this branch go into main with a merge commit.</span>
</button>
<button class="split__option" type="button" role="menuitemradio" aria-checked="false" tabindex="-1" data-option="squash" data-action="Squash and merge">
<span class="split__title">Squash and merge</span>
<span class="split__text">The 3 commits are combined into one commit on main.</span>
</button>
<button class="split__option" type="button" role="menuitemradio" aria-checked="false" tabindex="-1" data-option="rebase" data-action="Rebase and merge">
<span class="split__title">Rebase and merge</span>
<span class="split__text">The 3 commits are replayed on top of main, one by one.</span>
</button>
</div>
<p class="split__hint"><span data-hint>3 commits ready to go into main</span></p>
<p class="sr" aria-live="polite" data-say></p>
</div>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.min.js"></script>
<script src="script.js"></script>
</body>
</html>Cambia valori, colori e testi con le manopole e guarda l’animazione rispondere dal vivo. Oppure scrivi tu nel codice. Poi scarica la cartella con le tue modifiche.
18 valori da cambiare
Col connettore di Animorio, Claude Code la prende da qui con tutta la sua guida e la adatta al tuo progetto. Incolla questa richiesta:
Prendi «Il pulsante diviso» da Animorio e adattala al mio sitoL'azione e la freccia sono due button in un gruppo con un solo colore di fondo, così il verde e il viola cambiano insieme, e con overflow hidden sugli angoli tondi; la luce del passaggio è uno strato bianco sopra ognuno dei due, al 9% di opacità.
Il menu si apre con un clip-path inset che scende dall'alto (da inset(0% 0% 100% 0%) a inset(0%), con gli angoli tondi), una scala da 0,95 a 1 ed expo.out in UNFOLD secondi; i tre modi entrano dal basso a 0,05 secondi l'uno dall'altro, e la freccia gira di 180 gradi.
La spunta è una sola per tutto il menu: si mette all'altezza del modo scelto (offsetTop) e, scegliendone un altro, ci scivola con power3.inOut; dopo 0,28 secondi il menu si richiude, la scritta rotola sul nome nuovo e l'azione prende la sua larghezza, misurata con una copia invisibile delle parole.
Premendo, il disegno diventa un cerchio aperto che gira e una barra di 3 pixel si allunga da sinistra in MERGE secondi (scaleX con l'origine a sinistra). Poi il colore del gruppo passa al viola, la freccia si stringe fino a larghezza zero e il gruppo passa per 1,05 di scala; dopo DONE secondi torna verde, con la freccia e il modo scelto.
Il menu segue lo schema del menu a pulsante: freccia in giù o in su sulla freccia lo apre e porta sul modo scelto o sull'ultimo, le frecce girano fra i modi, Home e Fine vanno ai capi, Escape lo richiude e torna alla freccia, Tab lo richiude. Una pressione fuori lo richiude. Un clic da script (l'anteprima della libreria) apre il menu, poi sceglie il modo dopo, poi unisce.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
MERGE | script.js | 1.4 | I secondi che dura l'unione. |
DONE | script.js | 2.2 | I secondi in cui il pulsante resta viola prima di tornare pronto. |
UNFOLD | script.js | 0.45 | I secondi che il menu impiega a srotolarsi. |
Per un'azione principale che ha delle varianti: unire o pubblicare in modi diversi, salvare o salvare con nome, inviare ora o più tardi, scaricare in formati diversi, prenotare con o senza colazione.
Il menu è largo 340 pixel, o lo schermo meno 32, centrato sotto il pulsante; un tocco fuori lo richiude, e ogni modo, con la sua spiegazione, è alto più di 60 pixel, comodo per il dito.
Il menu compare e sparisce di colpo, la spunta salta sul modo scelto, le parole e i disegni cambiano senza rotolare né girare, il cerchio dell'attesa sta fermo e alla fine il viola arriva senza balzo; la barra dell'unione corre lo stesso, perché dice quanto manca.
GSAP 3.15.0, Hubot Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 6,4 KB; le librerie: GSAP 28 KB.
Provata il 4 ottobre 2026
Puoi usarla nei tuoi progetti e in quelli dei tuoi clienti. Non puoi rivenderla né ridistribuirla così com’è. GSAP resta sotto la sua licenza Standard. Licenza completa.
Con l’email e la password del tuo account.
oppure con l’email
Hai fatto l’accesso come .
Con l’account scarichi lo zip di ogni animazione e di ogni pacchetto, gratis.