All'interno di una pagina web l'utilizzo di un layout Skeleton è utile nel momento in cui la pagina dovrà caricare del contenuto dopo il suo primo rendering, attendendo il risultato da una chiamata asincrona o la scelta dell'utente.
<article > <div class="skeleton"> <div></div> <div></div> </div> <div class="content"> <h3 class="title"></h3> <p class="description"></p> </div> </article>
Ottenuto il contenuto, si potrà popolare il div e invertire la visibilità delle classi skeleton e content, mostrando i dati a video.
Benchè questo layout sia facile da creare, potrebbe non essere altrettanto intuitivo da leggere da parte degli screen reader, che come sappiamo utilizzano particolari attributi degli elementi per la lettura.
Riscriviamo dunque il codice.
<article class="default"> <div class="skeleton"> <div aria-hidden="true"></div> <div aria-hidden="true"></div> <span>Loading</span> </div> <div aria-busy="true" aria-live="polite"> <h3>Titolo</h3> <p>Descrizione</p> </div> </article>
Abbiamo aggiunto poche ma importanti informazioni.
- I div all'interno di skeleton risultano invisibili agli SR
- L'elemento span dovrà essere nascosto a monitor, impostando un position:absolute e dimensioni minime, in modo che solo lo SR ne legga il contenuto. L'utilizzatore medio capirà che il contenuto è in caricamento grazie ai precedenti div vuoti
- La porzione di contenuto, al primo caricamento verrà letta come "in caricamento" e tramite l'attributo aria-live, lo SR, verrà notificato al momento della popolazione.[l/i]
Per completare il giro, una volta popolato il layout possiamo nascondere lo skeleton e mostrare il contenuto
<article class="default"> <div class="skeleton" aria-hidden="true"> <!----> </div> <div aria-busy="false" aria-live="polite"> <!----> </div> </article>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Proteggere le risorse Azure con private link e private endpoints
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Miglioramenti nelle performance di Angular 16
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Utilizzare Azure AI Studio per testare i modelli AI
Recuperare l'ultima versione di una release di GitHub
Gestire la cancellazione di una richiesta in streaming da Blazor
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Disabilitare automaticamente un workflow di GitHub (parte 2)
Utilizzare i primary constructor in C#
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub