Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Come creare un contatore numerico animato con HTML, CSS e JS

In questa guida tutorial vedremo come creare un contatore numerico animato con HTML, CSS e JavaScript, senza librerie esterne
In questa guida tutorial vedremo come creare un contatore numerico animato con HTML, CSS e JavaScript, senza librerie esterne
Link copiato negli appunti

Nel mondo dello sviluppo web moderno anche i più piccoli dettagli possono fare una grande differenza nell'esperienza utente. Uno di questi è il contatore numerico animato (noto anche come "Animated Counter"), un elemento visivo sempre più utilizzato per mostrare statistiche, risultati raggiunti, numeri chiave o dati aziendali in modo dinamico e coinvolgente. Che si tratti di contatori per "clienti soddisfatti", "progetti completati" o "anni di esperienza", l'animazione dei numeri cattura l'attenzione dell'utente e rende il contenuto più efficace e professionale.

Guida passo-passo per realizzare un counter animato da zero

In questa guida/tutorial vedremo come creare un contatore numerico animato utilizzando esclusivamente HTML, CSS e JavaScript, senza librerie esterne, così da comprendere a fondo il funzionamento della logica e poter personalizzare il risultato in base alle proprie esigenze. L'obiettivo è realizzare un effetto semplice, fluido e facilmente integrabile in qualsiasi sito web o progetto frontend.

HTML, CSS e JavaScript: cosa useremo e cosa realizzeremo

Per realizzare un contatore numerico animato efficace e leggero, utilizzeremo esclusivamente le tre tecnologie fondamentali del frontend: HTML, CSS e JavaScript. Questa scelta ci permette di ottenere un risultato performante, facilmente personalizzabile e soprattutto comprensibile anche per chi è alle prime armi con lo sviluppo web.

HTML sarà usato per definire la struttura del contatore, ovvero gli elementi che conterranno i numeri da animare. CSS servirà invece per lo stile grafico, ci permetterà inoltre di migliorare l'aspetto visivo del contatore, gestire l'allineamento, i font e rendere il risultato più professionale. JavaScript sarà infine il cuore dell'animazione: grazie a una semplice logica di incremento progressivo, faremo "contare" i numeri da un valore iniziale fino a quello finale, creando l'effetto animato.

Il risultato finale sarà un contatore che, al caricamento della pagina (o al verificarsi di un evento specifico), anima il numero in modo fluido, aumentando progressivamente fino al valore desiderato. Questo tipo di effetto è molto utilizzato nelle homepage, nelle landing page e nelle sezioni "Chi siamo" o "Statistiche", perché aiuta a mettere in risalto dati importanti in modo visivamente accattivante.

Il codice HTML

<body>
    <div class="counter-wrapper">
      <div class="counter">
        <span class="counter-number" data-target="1200">0</span>
        <p class="counter-text">Clienti soddisfatti</p>
      </div>
      <div class="counter">
        <span class="counter-number" data-target="98">0</span>
        <p class="counter-text">Percentuale di successo</p>
      </div>

      <div class="counter">
        <span class="counter-number" data-target="15">0</span>
        <p class="counter-text">Anni di esperienza</p>
      </div>
    </div>
  </body>

La struttura HTML è composta da un contenitore principale (counter-wrapper) che racchiude più contatori, permettendo di organizzarli in modo ordinato all'interno della pagina. Ogni contatore è rappresentato da un blocco (counter) indipendente, così da poter essere gestito e stilizzato singolarmente.

All'interno di ogni contatore troviamo lo span con classe counter-number che visualizza il numero animato. L'attributo data-target indica il valore finale che il contatore dovrà raggiungere, mentre il valore iniziale impostato a 0 verrà aggiornato dinamicamente tramite JavaScript. A completare la struttura, il paragrafo counter-text descrive il significato del numero mostrato, rendendo il dato chiaro e immediato per l'utente.

Codice CSS per il contatore

.counter-wrapper {
  display: flex;
  justify-content: center;
  gap: 30px;
  padding: 60px 20px;
  background-color: #f8f9fa;
}
.counter {
  background-color: #ffffff;
  padding: 30px 40px;
  border-radius: 12px;
  text-align: center;
  min-width: 180px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.counter:hover {
  transform: translateY(-5px);
  box-shadow: 0 15px 35px rgba(0, 0, 0, 0.12);
}
.counter-number {
  font-size: 52px;
  font-weight: 700;
  color: #3f5efb;
  display: block;
}

.counter-text {
  margin-top: 12px;
  font-size: 15px;
  color: #666;
  text-transform: uppercase;
  letter-spacing: 1px;
}

Il contenitore counter-wrapper centra i contatori e utilizza uno sfondo leggermente grigio per creare una separazione visiva dalla pagina. I singoli contatori sono racchiusi in card bianche con angoli arrotondati e un'ombra morbida che conferisce profondità e un aspetto più professionale.
L'effetto hover aggiunge una leggera animazione verticale e intensifica l'ombra, rendendo l'interazione più piacevole e dinamica. Il numero animato è messo in forte evidenza grazie a una dimensione generosa, un peso deciso e un colore acceso, mentre il testo descrittivo è più discreto e stilizzato in maiuscolo per migliorare la leggibilità.

Questo stile rende il contatore numerico perfetto per homepage, landing page e sezioni statistiche, mantenendo un design moderno e facilmente personalizzabile.

Infine, il codice JavaScript

const counters = document.querySelectorAll(".counter-number");
counters.forEach((counter) => {
  const target = +counter.getAttribute("data-target");
  const increment = target / 200;

  const updateCounter = () => {
    const current = +counter.innerText;
    if (current < target) {
      counter.innerText = Math.ceil(current + increment);
      setTimeout(updateCounter, 10);
    } else {
      counter.innerText = target;
    }
  };

  updateCounter();
});

Il cuore del nostro contatore numerico animato è il codice JavaScript, che si occupa di incrementare progressivamente i numeri fino al valore finale indicato nell'attributo data-target. L'obiettivo è ottenere un'animazione fluida, semplice e facilmente riutilizzabile, senza ricorrere a librerie esterne.
Il codice inizia selezionando tutti gli elementi con classe counter-number, permettendo di gestire più contatori contemporaneamente. Per ciascun elemento viene letto il valore finale tramite l'attributo data-target, che rappresenta il numero da raggiungere.
La variabile increment definisce di quanto il numero deve aumentare a ogni aggiornamento. In questo esempio il valore finale viene suddiviso in 200 step, creando un'animazione graduale e piacevole. La funzione updateCounter() aggiorna il numero visibile, controllando che non superi il valore target.
Attraverso setTimeout, la funzione viene richiamata a intervalli regolari, simulando l'animazione del conteggio. Una volta raggiunto il valore finale, il contatore si ferma automaticamente, assicurando un risultato preciso e senza errori.
Questo approccio rende il codice leggero, chiaro e facilmente personalizzabile, consentendo di modificare velocità e durata dell'animazione con poche semplici variazioni.

Risultato e commento finale

Una volta implementati HTML, CSS e JavaScript, il contatore numerico animato è pronto e funzionante. All'apertura della pagina, ogni numero inizia a incrementare progressivamente da zero fino al valore indicato nell'attributo data-target, creando un effetto visivo dinamico e accattivante. L'animazione risulta fluida grazie all'incremento graduale definito nel JavaScript, mentre il design moderno e leggero del CSS evidenzia i numeri e rende il layout ordinato e armonioso.

Grazie alla struttura modulare, è possibile aggiungere nuovi contatori semplicemente duplicando il blocco HTML e impostando un nuovo valore data-target, senza dover modificare nulla nel codice JavaScript o CSS. Inoltre, l'effetto hover sulle card dei contatori aggiunge un tocco di interattività, rendendo la sezione più coinvolgente per l'utente.

Considerazioni finali e conclusione

Il risultato finale è quindi un componente versatile, elegante e facilmente integrabile in qualsiasi progetto web: ideale per homepage, landing page, pagine statistiche o portfolio, dove sia importante mettere in evidenza numeri chiave in modo chiaro e visivamente gradevole.
Creare un contatore numerico animato con HTML, CSS e JavaScript è un modo semplice ma efficace per rendere le statistiche e i dati chiave più visivamente accattivanti. Grazie a una struttura modulare, uno stile moderno e un'animazione fluida, questo componente è facilmente integrabile in qualsiasi sito web, dalla homepage alle sezioni statistiche. Con pochi accorgimenti, come l'aggiunta di simboli grafici o l'adattamento dei colori, è possibile personalizzare il contatore in base al proprio progetto, ottenendo un effetto professionale e coinvolgente senza complicazioni.

Ti consigliamo anche