back to top

Guida Definitiva ai Tooltip Accessibili: CSS :has() e JavaScript

Introduzione: L’Universo dei Tooltip e l’Imperativo dell’Accessibilità

I tooltip sono piccoli pop-up informativi che appaiono quando un utente interagisce con un elemento specifico dell’interfaccia, solitamente tramite hover del mouse o focus della tastiera. Forniscono contesto aggiuntivo, spiegazioni o suggerimenti senza appesantire l’interfaccia principale. Rendere un tooltip accessibile CSS e JavaScript non è solo una buona pratica, ma un requisito fondamentale per garantire che tutti gli utenti, inclusi quelli con disabilità, possano accedere alle informazioni che veicolano. Approfondiremo come creare un tooltip accessibile CSS sfruttando le moderne capacità del linguaggio e come potenziarlo progressivamente con JavaScript.

Navigare nel web oggi significa incontrare una miriade di componenti interattivi. Tra questi, i tooltip giocano un ruolo cruciale nell’arricchire l’esperienza utente, offrendo chiarimenti puntuali o informazioni supplementari. Ma cosa succede se questi piccoli aiutanti non sono accessibili? Si trasformano in barriere, escludendo una fetta di utenti. Ecco perché l’accessibilità web, come discusso nella nostra guida completa all’accessibilità web 2025 per developer, deve essere al centro di ogni nostra scelta progettuale.

Differenze tra tooltip decorativi e informativi:

Non tutti i tooltip sono uguali. È importante distinguere tra:

  1. Tooltip Decorativi: Hanno uno scopo puramente estetico o forniscono informazioni ridondanti, già presenti e chiare nel contesto dell’elemento trigger (ad esempio, un tooltip che ripete l’etichetta di un pulsante già esplicita). In genere, questi tooltip dovrebbero essere nascosti agli screen reader per non appesantire l’esperienza.
  2. Tooltip Informativi: Veicolano informazioni essenziali per comprendere la funzione di un elemento o per completare un’azione. Questi devono essere accessibili. Pensiamo ad icone che necessitano di una descrizione testuale, o a campi di input con requisiti specifici.

In questa guida, ci concentreremo sulla creazione di tooltip informativi robusti e accessibili, prima con una soluzione puramente CSS grazie alla pseudo-classe :has(), per poi esplorare come JavaScript possa intervenire per miglioramenti progressivi.

Soluzione Solo CSS con :has(): Eleganza e Modernità

Il CSS moderno ci offre strumenti sempre più potenti per gestire l’interattività senza ricorrere necessariamente a JavaScript. Uno di questi è la pseudo-classe :has(), che permette di selezionare un elemento genitore o un elemento precedente in base alla presenza o allo stato di elementi figli o successivi. Questo apre scenari interessantissimi per la creazione di un tooltip accessibile CSS.

Requisiti Browser (Supporto a :has()):

Prima di tuffarci nel codice, è doveroso un cenno al supporto browser. :has() è una funzionalità relativamente recente. Al momento della stesura di questo articolo (maggio 2025), il supporto è ampio nei browser moderni (Chrome, Edge, Safari, Firefox). È sempre buona norma verificare lo stato attuale su Can I Use :has() o MDN Web Docs per :has() per i progetti destinati a un pubblico con browser meno recenti, e considerare eventuali fallback o approcci alternativi se il supporto non è sufficiente.

Esempio Pratico di Codice con Spiegazione:

Vediamo come strutturare il nostro HTML e CSS. L’idea è di mostrare il tooltip quando l’elemento “trigger” (quello che scatena il tooltip) riceve :hover o :focus-within (per l’accessibilità da tastiera).

HTML:

<div class="tooltip-container">
  <button class="tooltip-trigger" aria-describedby="tooltip-content-1">
    Salva Modifiche
    <span class="tooltip" role="tooltip" id="tooltip-content-1">
      Clicca per salvare i tuoi progressi. Assicurati che tutti i campi siano compilati.
    </span>
  </button>
</div>

<div class="tooltip-container">
  <label for="username">Nome Utente:</label>
  <input type="text" id="username" class="tooltip-trigger" aria-describedby="tooltip-content-2">
  <span class="tooltip" role="tooltip" id="tooltip-content-2">
    Deve contenere almeno 8 caratteri.
  </span>
</div>

Spiegazione HTML:

  • tooltip-container: Un wrapper che ci aiuta a posizionare il tooltip rispetto al trigger.
  • tooltip-trigger: L’elemento interattivo (pulsante, input, link, ecc.) che mostrerà il tooltip.
  • aria-describedby="tooltip-content-1": Attributo ARIA cruciale. Collega semanticamente il trigger al contenuto del tooltip. Il valore deve corrispondere all’ id del tooltip. Approfondiremo tra poco.
  • tooltip: L’elemento che contiene il testo del tooltip.
  • role="tooltip": Definisce semanticamente l’elemento come un tooltip.
  • id="tooltip-content-1": Identificatore univoco per il contenuto del tooltip, referenziato da aria-describedby.

CSS con :has():

.tooltip-container {
  position: relative; /* Necessario per il posizionamento assoluto del tooltip */
  display: inline-block; /* O block, a seconda del contesto */
  margin: 20px;
}

.tooltip-trigger {
  /* Stili base per il trigger */
  padding: 8px 12px;
  border: 1px solid #ccc;
  background-color: #f9f9f9;
  cursor: help; /* Indica che c'è aiuto disponibile */
}

.tooltip {
  /* Stili base del tooltip: inizialmente nascosto */
  visibility: hidden;
  opacity: 0;
  position: absolute;
  bottom: 125%; /* Posizionamento sopra il trigger */
  left: 50%;
  transform: translateX(-50%);
  background-color: #333;
  color: #fff;
  padding: 10px;
  border-radius: 4px;
  width: max-content; /* Adatta la larghezza al contenuto */
  max-width: 250px; /* Evita tooltip troppo larghi */
  z-index: 10;
  transition: opacity 0.3s ease, visibility 0.3s ease;
  font-size: 0.875em;
  text-align: left;
}

/* Styling per la freccetta del tooltip (opzionale) */
.tooltip::after {
  content: "";
  position: absolute;
  top: 100%; /* Posiziona la freccia sotto il tooltip */
  left: 50%;
  margin-left: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: #333 transparent transparent transparent;
}

/* LA MAGIA CON :has() */
/* Mostra il tooltip quando il container CONTIENE un trigger in hover o focus */
.tooltip-container:has(> .tooltip-trigger:hover),
.tooltip-container:has(> .tooltip-trigger:focus-within) {
  & > .tooltip { /* Seleziona il figlio diretto .tooltip */
    visibility: visible;
    opacity: 1;
  }
}

/* Per input specifici, potremmo usare :focus invece di :focus-within sul container */
.tooltip-container:has(> input.tooltip-trigger:focus) > .tooltip {
    visibility: visible;
    opacity: 1;
}

Spiegazione CSS:

  1. Il .tooltip è inizialmente nascosto (visibility: hidden, opacity: 0).
  2. Usiamo position: absolute per il tooltip e position: relative per il suo contenitore per un posizionamento preciso.
  3. La parte cruciale è .tooltip-container:has(> .tooltip-trigger:hover) > .tooltip e .tooltip-container:has(> .tooltip-trigger:focus-within) > .tooltip.
    • tooltip-container:has(> .tooltip-trigger:hover): Seleziona il .tooltip-container se al suo interno ha un figlio diretto .tooltip-trigger che è in stato :hover.
    • tooltip-container:has(> .tooltip-trigger:focus-within): Seleziona il .tooltip-container se al suo interno ha un figlio diretto .tooltip-trigger (o un suo discendente) che ha il focus. Questo è ottimo per la navigazione da tastiera.
    • > .tooltip: Una volta selezionato il container in queste condizioni, applichiamo gli stili per rendere visibile il suo figlio diretto .tooltip.

Questo approccio ci permette di avere un tooltip accessibile CSS puro, reattivo sia al mouse che alla tastiera, senza una singola riga di JavaScript per la logica di visualizzazione base. Per chi volesse esplorare altri selettori potenti, consiglio la lettura de “I 5 selettori CSS meno conosciuti ma potentissimi“.

Miglioramento Accessibilità con aria-describedby

Avere un tooltip che appare e scompare è solo una parte della storia. Per renderlo veramente accessibile, specialmente agli utenti che utilizzano screen reader, dobbiamo comunicare la relazione tra l’elemento trigger e il contenuto del tooltip. Qui entra in gioco l’attributo aria-describedby.

Come strutturare HTML semanticamente:

Come visto nell’esempio precedente, la struttura è fondamentale:

<button class="tooltip-trigger" aria-describedby="info-tooltip">
  Mostra Info
</button>
<span class="tooltip" role="tooltip" id="info-tooltip" aria-hidden="true">
  Questa è un'informazione aggiuntiva importante.
</span>
  • aria-describedby="info-tooltip" sull’elemento trigger (il bottone) indica che una descrizione aggiuntiva per questo bottone si trova nell’elemento con id="info-tooltip".
  • role="tooltip" sull’elemento del tooltip (<span>) lo definisce semanticamente come tale.
  • id="info-tooltip" sull’elemento del tooltip fornisce l’ancora per aria-describedby.
  • aria-hidden="true": Inizialmente, se il tooltip non è visibile, potremmo volerlo nascondere anche agli screen reader per evitare che leggano contenuto non pertinente. Questo attributo andrebbe poi gestito (rimosso o impostato a false) quando il tooltip diventa visibile, preferibilmente con JavaScript per un controllo più fine. Tuttavia, la specifica WAI-ARIA per i tooltip suggerisce che il contenuto del tooltip, se referenziato da aria-describedby, può essere sempre presente nel DOM accessibile, e sarà lo screen reader a decidere quando leggerlo in base all’interazione dell’utente con il trigger. Per una soluzione puramente CSS, il contenuto del tooltip è nel DOM, e aria-describedby lo collega. Lo screen reader annuncerà il trigger e poi, tipicamente, il contenuto del tooltip associato.

Collegamento corretto tra trigger e contenuto:

L’uso di aria-describedby è preferibile ad aria-labelledby per i tooltip perché il contenuto del tooltip descrive l’elemento trigger, non ne fornisce l’etichetta principale. L’etichetta del trigger dovrebbe essere data dal suo contenuto testuale (es. “Salva”) o da un aria-label se l’elemento è puramente iconico. Per approfondire l’uso di aria-label e aria-hidden, potete consultare l’articolo “Come usare aria-label e aria-hidden per migliorare l’accessibilità“.

Quando l’utente con screen reader naviga e raggiunge il <button>, il software leggerà prima l’etichetta del bottone (es. “Mostra Info, pulsante”) e poi, grazie ad aria-describedby, annuncerà anche il contenuto del tooltip (es. “Questa è un’informazione aggiuntiva importante.”). Questo fornisce il contesto necessario senza che l’utente debba compiere azioni aggiuntive per scoprire il significato del tooltip. È un passo cruciale per un tooltip accessibile CSS e per l’inclusività generale.

Versione con JS Opzionale: Miglioramenti Progressivi

La soluzione CSS con :has() è elegante e spesso sufficiente. Tuttavia, JavaScript può aggiungere livelli di raffinatezza e risolvere alcune limitazioni, specialmente per scenari più complessi o per un controllo comportamentale più granulare.

Miglioramenti progressivi:

  1. Posizionamento Dinamico: Se il tooltip è vicino ai bordi della viewport, potrebbe venir tagliato. JavaScript può calcolare la posizione del trigger e lo spazio disponibile, riposizionando il tooltip dinamicamente (es. da sopra a sotto, o da destra a sinistra).
  2. Delay (Ritardo): Per evitare che i tooltip appaiano troppo aggressivamente al semplice passaggio veloce del mouse su più elementi, si può introdurre un piccolo ritardo (hover intent) prima di mostrarli e nasconderli.
  3. Interazione via Tastiera Avanzata:
    • Chiusura con ESC: Permettere agli utenti di chiudere un tooltip attivo premendo il tasto Escape è una convenzione comune e migliora l’usabilità.
    • Gestione del Focus: Assicurarsi che il focus rimanga sull’elemento trigger o che sia gestito in modo prevedibile, specialmente se il tooltip contenesse elementi interattivi (anche se generalmente sconsigliato per tooltip semplici). Per una guida approfondita sulla gestione del focus, fate riferimento a “Gestire il Focus via JavaScript + tabindex: La Guida Completa per Frontend Dev“.
  4. Tooltip Attivati al Click: Per informazioni più complesse o persistenti, un tooltip potrebbe essere attivato da un click anziché da hover/focus. In questo caso, JavaScript è indispensabile per gestire lo stato aperto/chiuso.
  5. Animazioni Complesse: Sebbene CSS gestisca bene le animazioni base, JS può orchestrare transizioni più sofisticate o basate su interazioni utente complesse. Potreste dare un’occhiata a “5 Animazioni Solo CSS Facili e Moderne per il Tuo Sito Web” per idee su animazioni CSS.
  6. Rimozione dal DOM (Performance): Per pagine con moltissimi tooltip, JavaScript potrebbe aggiungere/rimuovere dinamicamente i tooltip dal DOM invece di averli tutti presenti ma nascosti, sebbene con aria-describedby sia generalmente preferibile che il contenuto esista per essere referenziato.

Quando ha senso usare JS per tooltip:

  • Quando i requisiti di posizionamento sono complessi e dinamici.
  • Quando si desidera un controllo fine sui tempi di apparizione/scomparsa (delay).
  • Per implementare la chiusura con il tasto ESC o altre interazioni da tastiera avanzate non gestibili via CSS.
  • Se i tooltip devono rimanere visibili dopo che il mouse ha lasciato il trigger (es. tooltip attivati al click).
  • Quando si necessita di caricare contenuto del tooltip dinamicamente via AJAX.
  • Se si vuole un controllo programmatico completo sull’attributo aria-hidden per il tooltip, sincronizzandolo con la sua visibilità effettiva.

Esempio di potenziamento con JS (delay e chiusura ESC):

document.addEventListener('DOMContentLoaded', () => {
  const tooltipTriggers = document.querySelectorAll('.tooltip-trigger-js'); // Usiamo una classe diversa per i tooltip gestiti da JS
  let hoverTimeout;

  tooltipTriggers.forEach(trigger => {
    const tooltipId = trigger.getAttribute('aria-describedby');
    const tooltip = document.getElementById(tooltipId);

    if (!tooltip) return;

    // Inizialmente, se usiamo JS per controllare la visibilità,
    // potremmo voler aggiungere una classe per nasconderlo
    tooltip.classList.add('tooltip-js-hidden');


    const showTooltip = () => {
      clearTimeout(hoverTimeout);
      hoverTimeout = setTimeout(() => {
        tooltip.classList.remove('tooltip-js-hidden');
        tooltip.classList.add('tooltip-js-visible');
        tooltip.setAttribute('aria-hidden', 'false');
      }, 300); // Ritardo di 300ms
    };

    const hideTooltip = () => {
      clearTimeout(hoverTimeout);
      tooltip.classList.remove('tooltip-js-visible');
      tooltip.classList.add('tooltip-js-hidden'); // Potrebbe non essere necessario se si usa solo opacity/visibility
      tooltip.setAttribute('aria-hidden', 'true');
    };

    trigger.addEventListener('mouseenter', showTooltip);
    trigger.addEventListener('focus', showTooltip);
    trigger.addEventListener('mouseleave', hideTooltip);
    trigger.addEventListener('blur', hideTooltip); // Nasconde quando il trigger perde il focus

    trigger.addEventListener('keydown', (event) => {
      if (event.key === 'Escape' && tooltip.classList.contains('tooltip-js-visible')) {
        hideTooltip();
      }
    });
  });
});

E il CSS corrispondente per le classi JS:

/* Stili per tooltip gestiti da JS */
.tooltip-js { /* Supponendo che il tooltip abbia questa classe */
  /* Stili base come prima: position, background, color, etc. */
  position: absolute;
  /* ... altri stili ... */
  visibility: hidden; /* Inizialmente nascosto via CSS */
  opacity: 0;
  transition: opacity 0.2s ease, visibility 0.2s ease;
}

.tooltip-js-visible {
  visibility: visible;
  opacity: 1;
}

.tooltip-js-hidden { /* Opzionale, se si preferisce una classe esplicita per nascondere */
  visibility: hidden;
  opacity: 0;
}

In questo scenario, si rinuncia alla logica di visibilità di :has() per un controllo JS completo. L’idea è che JavaScript potenzia l’esperienza. Potrebbe anche essere usato insieme a :has(): CSS gestisce la visibilità base, e JS interviene per il posizionamento o la chiusura con ESC. La strategia di “migliorare l’esperienza utente con CSS avanzato” può essere estesa con intelligenti aggiunte JavaScript.

Best Practice per Tooltip Accessibili

Creare un tooltip accessibile CSS e JavaScript richiede attenzione a diversi dettagli per garantire un’esperienza utente ottimale per tutti.

  1. Evitare tabindex Errati:
    • Non aggiungere tabindex="0" a elementi non interattivi (es. <span>, <div>) solo per farli attivare un tooltip. Se un elemento necessita di un tooltip, dovrebbe essere intrinsecamente focalizzabile (link, pulsanti, input) o reso tale per una ragione valida (es. un elemento custom che si comporta come un widget).
    • Se un tooltip contiene elementi interattivi (generalmente sconsigliato per tooltip semplici, meglio usare un pattern dialog o popover in quei casi), la gestione del focus diventa complessa e richiede JavaScript per intrappolare il focus all’interno del tooltip attivo. Per la maggior parte dei tooltip informativi, il contenuto è solo testo.
  2. Gestione del Focus:
    • Il focus deve rimanere sull’elemento trigger quando il tooltip appare su hover o focus. L’utente non deve perdere il contesto.
    • Se il tooltip è attivato da un click e si comporta più come un “non-modal dialog”, la gestione del focus potrebbe necessitare di spostare il focus al tooltip e poi riportarlo al trigger alla chiusura. Ma per tooltip standard, il focus resta sul trigger.
  3. Screen Reader e Annunci:
    • aria-describedby è il metodo primario per collegare il tooltip al suo trigger per gli screen reader.
    • Assicurarsi che il contenuto del tooltip sia conciso e fornisca valore aggiunto. Evitare informazioni ridondanti.
    • Come menzionato, l’uso di role="tooltip" sull’elemento tooltip è semanticamente corretto.
    • Per i tooltip che appaiono e scompaiono, lo stato di visibilità deve essere comunicato. Gli screen reader generalmente gestiscono bene i contenuti collegati con aria-describedby che diventano visibili. Se si usa JavaScript per mostrare/nascondere, manipolare aria-hidden (da true a false e viceversa) sull’elemento tooltip può rafforzare questa comunicazione, anche se aria-describedby spesso è sufficiente a far leggere il contenuto quando il trigger è focalizzato.
  4. Visibilità e Contrasto:
    • Contrasto: Il testo del tooltip deve avere un rapporto di contrasto sufficiente rispetto al suo sfondo, e il tooltip stesso deve avere un contrasto sufficiente con lo sfondo della pagina su cui appare, per rispettare le WCAG (Web Content Accessibility Guidelines). Usare strumenti di verifica del contrasto.
    • Non solo Colore: Non affidarsi esclusivamente al colore per indicare la presenza di un tooltip. L’elemento trigger dovrebbe avere un affordance (es. sottolineatura puntinata, icona di aiuto) che suggerisca la disponibilità di informazioni aggiuntive.
    • Non Oscurare Contenuto Importante: Assicurarsi che il tooltip non oscuri permanentemente contenuto rilevante della pagina. La sua natura è temporanea.
  5. Interazione al Mouse e Tastiera Coerente:
    • Il tooltip deve apparire sia al passaggio del mouse (hover) sia quando l’elemento trigger riceve il focus della tastiera.
    • Deve scomparire quando il mouse lascia l’area del trigger (o del tooltip stesso, se si vuole permettere l’interazione con il tooltip) o quando il focus si sposta su un altro elemento.
    • La chiusura con il tasto Escape è una best practice quando i tooltip sono resi visibili, specialmente se persistono leggermente.
  6. Considerare il Contesto Mobile:
    • L’evento hover non esiste sui dispositivi touch. Per mobile, i tooltip informativi spesso devono essere attivati da un tocco (tap) sull’elemento trigger. Questo cambia il pattern di interazione, avvicinandosi più a un “toggle” o a un piccolo popover. In questi casi, JavaScript è quasi sempre necessario per una buona UX. Una X o un pulsante di chiusura esplicito nel tooltip diventa cruciale.
  7. Testare, Testare, Testare:
    • Testare con diversi browser e dispositivi.
    • Testare utilizzando solo la tastiera per la navigazione.
    • Testare con screen reader (NVDA, VoiceOver, JAWS).
    • Coinvolgere utenti con disabilità nel processo di testing, se possibile.

Seguire queste best practice, insieme a un solido HTML semantico e una struttura moderna, contribuirà a creare tooltip che non sono solo funzionali ma genuinamente inclusivi.

FAQ e Domande Frequenti

D1: Quali sono i principali vantaggi nell’usare la pseudo-classe CSS :has() per i tooltip? R: Il vantaggio principale di :has() è la capacità di creare un tooltip accessibile CSS puro, cioè che mostra e nasconde il tooltip in base all’interazione (hover/focus) con l’elemento trigger, senza bisogno di JavaScript per questa logica base. Questo porta a codice più leggero e manutenibile, con un approccio dichiarativo. Semplifica anche la struttura, permettendo di agire su un elemento genitore o fratello in base allo stato di un figlio.

D2: Quando è indispensabile usare aria-describedby per i tooltip? R: aria-describedby è sempre indispensabile per i tooltip informativi accessibili. Collega semanticamente l’elemento trigger (es. un pulsante o un input) al contenuto del tooltip. Questo permette agli screen reader di annunciare il testo del tooltip quando l’utente interagisce con il trigger, fornendo contesto essenziale che altrimenti sarebbe perso.

D3: JavaScript è necessario per rendere i tooltip accessibili? R: Non necessariamente per la funzionalità base di un tooltip accessibile CSS. Come abbiamo visto, CSS con :has() e il corretto uso di ARIA (come aria-describedby e role="tooltip") possono creare tooltip che appaiono su hover/focus e sono compresi dagli screen reader. JavaScript diventa utile o necessario per miglioramenti progressivi come: * Posizionamento dinamico per evitare che il tooltip esca dalla viewport. * Aggiungere un ritardo (delay) all’apparizione/scomparsa. * Implementare la chiusura con il tasto ESC. * Gestire tooltip attivati al click. * Controllare aria-hidden in modo più esplicito, sebbene non sempre strettamente necessario se aria-describedby è usato correttamente.

D4: Come posso gestire la compatibilità cross-browser per :has() e i fallback? R: :has() è ben supportato nei browser moderni. Per browser più datati che non lo supportano: * Nessun Fallback (Degradazione Aggraziata): Il tooltip semplicemente non apparirà. Se l’informazione è critica, questo non è accettabile. Se è supplementare, potrebbe esserlo. * Soluzione JavaScript: Utilizzare JavaScript per replicare la logica di visualizzazione del tooltip (mostra/nascondi su hover/focus), come si faceva tradizionalmente. Si può usare @supports not (selector(:has(*))) in CSS per applicare stili di base e poi lasciare che JS prenda il controllo, oppure usare JS per rilevare il supporto a :has() e agire di conseguenza. * Approccio CSS Alternativo (più limitato): Tecniche come il selettore fratello adiacente (+) o generale (~) possono funzionare se la struttura HTML lo permette (es. tooltip immediatamente dopo il trigger), ma sono meno flessibili di :has(). L’articolo “Tooltip con CSS: semplicità e accessibilità senza JavaScript” esplora alcuni di questi approcci più semplici.

D5: Quali sono le considerazioni principali per i tooltip su dispositivi mobili/touch? R: L’evento hover non è affidabile sui dispositivi touch. Di conseguenza: * I tooltip informativi spesso devono essere attivati da un’azione esplicita come un “tap” (click). * Una volta attivati, dovrebbero rimanere visibili finché non vengono esplicitamente chiusi (es. con un’icona “X” nel tooltip) o toccando fuori dall’area del tooltip/trigger. * Questo pattern di interazione richiede quasi sempre JavaScript. * Assicurarsi che il tooltip non occupi troppo spazio sullo schermo e non oscuri elementi cruciali. Il design deve essere responsivo.

Conclusione: Verso Tooltip Migliori e Più Inclusivi

Abbiamo esplorato in dettaglio come creare un tooltip accessibile CSS, sfruttando la potenza della pseudo-classe :has() per una soluzione elegante e moderna, e come l’attributo aria-describedby sia fondamentale per l’accessibilità. Abbiamo anche visto come JavaScript possa intervenire per aggiungere miglioramenti progressivi, gestendo scenari più complessi e offrendo un controllo più granulare sull’esperienza utente.

La chiave è partire da una base solida: HTML semantico, corretto uso degli attributi ARIA, e una gestione della visibilità che funzioni sia per utenti che usano il mouse sia per quelli che navigano con la tastiera. La soluzione con :has() rappresenta un eccellente punto di partenza per un tooltip accessibile CSS che sia performante e manutenibile.

L’invito è a sperimentare questi approcci nei vostri progetti. Testate la soluzione solo CSS, valutate dove i miglioramenti JavaScript apportano un reale valore aggiunto e, soprattutto, mettete sempre l’accessibilità al primo posto. Un piccolo tooltip può fare una grande differenza nell’esperienza complessiva di un utente.

Per approfondire ulteriormente temi correlati all’ottimizzazione e allo sviluppo frontend moderno, vi consiglio di esplorare:

Costruire interfacce inclusive è una responsabilità e un’arte. Con gli strumenti giusti e la giusta mentalità, possiamo rendere il web un posto migliore per tutti.

Condividi

Articoli Recenti

Categorie popolari