{"id":181,"date":"2024-08-13T14:59:06","date_gmt":"2024-08-13T14:59:06","guid":{"rendered":"https:\/\/www.accessibilita.digital\/?p=181"},"modified":"2024-08-23T12:17:29","modified_gmt":"2024-08-23T12:17:29","slug":"come-realizzare-un-accordion-accessibile","status":"publish","type":"post","link":"https:\/\/www.accessibilita.digital\/come-realizzare-un-accordion-accessibile\/","title":{"rendered":"Come realizzare un accordion accessibile"},"content":{"rendered":"<p>L\u2019elemento comunemente chiamato \u201caccordion\u201d viene usato per <b>mostrare e nascondere delle porzioni di contenuto<\/b>. In genere il primo della lista \u00e8 aperto e mostra il testo, mentre i successivi sono nascosti. In alcuni casi, si preferisce far <b>aprire un elemento alla volta<\/b> chiudendo quello aperto in precedenza, mentre in altri casi si sceglie di permettere all\u2019utente di mantenerli tutti aperti.<\/p>\n\n<h2>Cosa sapere per l&#8217;accessibilit\u00e0<\/h2>\n<p>In termini di accessibilit\u00e0, e anche di SEO, <b>l\u2019accordion \u00e8 forse l\u2019elemento meno adatto<\/b>, perch\u00e9 l\u2019utente per poter vedere il testo nascosto deve prima <b>sapere in qualche modo che questo \u00e8 presente nella pagina<\/b>. Solitamente per\u00f2, gli elementi accordion chiusi hanno il contenuto nascosto (cio\u00e8 in <b>display:none<\/b>) e questo significa che il contenuto non viene letto n\u00e9 dagli <b>screen reader<\/b> e nemmeno dai <b>crawler<\/b> dei motori di ricerca.<\/p>\n<p>L\u2019accordion potrebbe essere usato anche per mostrare o nascondere dei campi di un form, ad esempio in <b>un modulo fatto a step per il pagamento<\/b> (login, informazioni di spedizione, informazioni di fatturazione, riepilogo ordine, informazioni di pagamento).<\/p>\n<p>Come per i men\u00f9 di navigazione, possiamo usare dei <b>button<\/b> e avvalerci dell\u2019attributo <b>aria-expanded<\/b> per <b>determinare l\u2019apertura e la chiusura di un accordion<\/b>. I button saranno sempre visibili, mentre il contenuto degli accordion chiusi sar\u00e0 nascosto.<\/p>\n<h2>Analisi di un esempio dimostrativo<\/h2>\n<p>Vediamo un <a href=\"https:\/\/www.w3.org\/WAI\/ARIA\/apg\/patterns\/accordion\/examples\/accordion\/\" rel=\"nofollow noopener\">esempio fornito da WAI-ARIA<\/a>:<\/p>\n<ul>\n<li>I button che azionano l\u2019accordion sono racchiusi in un <b>h3<\/b> e usano l\u2019attributo <b>aria-expanded impostato a true quando l\u2019elemento \u00e8 attivo<\/b>, o aperto, e <b>a false quando \u00e8 disattivo<\/b>, o chiuso<\/li>\n<li>Il contenuto ha un <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Accessibility\/ARIA\/Roles\/region_role\" rel=\"nofollow noopener\">role=\u201dregion\u201d<\/a> per segnalare eventuali cambi di visibilit\u00e0, che verranno quindi annunciati dagli screen reader. Al posto di questo role potremmo semplicemente usare il tag &lt;section&gt; che ha lo stesso valore<\/li>\n<li>I campi sono racchiusi in un <b>fieldset<\/b><\/li>\n<li>Cos\u00ec come avviene con i dropdown, cliccando o azionando il <b>button<\/b> questo modifica la sua propriet\u00e0 <b>aria-expanded<\/b> e mostra oppure nasconde il contenuto di conseguenza, usando Javascript e CSS<\/li>\n<\/ul>\n<h2>Analisi di un caso reale<\/h2>\n<p>Vediamo anche il codice di esempio di un caso pratico che ho preso da un sito che ho realizzato, dove nel caso specifico viene inserita una <b>sezione FAQ divisa per categorie<\/b>, quindi abbiamo una categoria di FAQ che presenta un <b>elenco fatto ad accordion<\/b>, dove <b>ogni accordion <\/b><b>\u00e8 una singola FAQ<\/b>. Questa la porzione di codice di esempio:<\/p>\n<pre class=\"language-markup\"><code>&lt;div class=\"posts-listing posts-listing-faq\"&gt;\r\n    &lt;h3 id=\"titolo-sezione-1-faq\" class=\"h4\"&gt;Titolo della sezione delle FAQ&lt;\/h3&gt;\r\n    &lt;ul class=\"accordion list-archive-faq\" id=\"accordion-66b0afcfe9800-\"&gt;\r\n        &lt;li class=\"accordion-item\"&gt;\r\n            &lt;article&gt;            \r\n                &lt;h4 class=\"accordion-header\" id=\"accordion-66b0afcfe9800-category-f12b5109cdb73872918fe9488fdb486b-element-1-heading\"&gt;\r\n                    &lt;button class=\"accordion-button\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-66b0afcfe9800-category-f12b5109cdb73872918fe9488fdb486b-element-1-content\" aria-expanded=\"true\" aria-controls=\"accordion-66b0afcfe9800-category-f12b5109cdb73872918fe9488fdb486b-element-1-content\"&gt;Titolo dell'accordion e quindi della singola FAQ&lt;\/button&gt;\r\n                &lt;\/h4&gt;\r\n                &lt;div id=\"accordion-66b0afcfe9800-category-f12b5109cdb73872918fe9488fdb486b-element-1-content\" class=\"accordion-collapse collapse show\" data-bs-parent=\"#accordion-66b0afcfe9800\" role=\"region\" aria-labelledby=\"accordion-66b0afcfe9800-category-f12b5109cdb73872918fe9488fdb486b-element-1-heading\"&gt;\r\n                    &lt;div class=\"accordion-body\"&gt;Contenuto testuale dell'accordion&lt;\/div&gt;\r\n                &lt;\/div&gt;\r\n            &lt;\/article&gt;\r\n        &lt;\/li&gt;\r\n    &lt;\/ul&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<p>Quest&#8217;ultimo esempio \u00e8 stato fatto usando <b>Bootstrap Italia e WordPress<\/b>, e gli elementi principali sono:<\/p>\n<ul>\n<li>L\u2019&lt;h3&gt; che contiene il <b>titolo della categoria di FAQ<\/b><\/li>\n<li>Un <b>&lt;<\/b><b>ul&gt; <\/b>che racchiude tutto l\u2019elenco di elementi accordion<\/li>\n<li>Gli &lt;li&gt; che rappresentano <b>ogni singolo accordion<\/b><\/li>\n<li>Un &lt;article&gt; che agisce da contenitore dell\u2019accordion<\/li>\n<li>Il <b>&lt;button&gt;<\/b> che aziona l\u2019accordion e, poich\u00e9 contiene il titolo della singola FAQ, \u00e8 racchiuso in un &lt;h4&gt;, visto che il livello di intestazione usato precedentemente \u00e8 un h3. Notare che il button usa anche <b>aria-controls<\/b> per definire quale elemento viene controllato da questo pulsante<\/li>\n<li>Il contenuto dell\u2019accordion, che \u00e8 un <b>&lt;section&gt;<\/b> ma potrebbe anche essere un <b>&lt;div&gt; con role=\u201dregion\u201d<\/b>, in questo caso usa le classi CSS \u201caccordion-collapse collapse show\u201d come da esempio di <a href=\"https:\/\/getbootstrap.com\/docs\/5.2\/components\/accordion\/\" rel=\"nofollow noopener\">Bootstrap 5<\/a>, inoltre usa <b>aria-labelledby<\/b> che fa riferimento all\u2019h4 precedente, cio\u00e8 il titolo della singola FAQ, per indicare alle tecnologie quale testo associare a questo elemento<\/li>\n<\/ul>\n<h2>Link utili<\/h2>\n<ul>\n<li>WAI-ARIA: <a href=\"https:\/\/www.w3.org\/WAI\/ARIA\/apg\/patterns\/accordion\/examples\/accordion\/\" rel=\"nofollow noopener\">Accordion Example<\/a><\/li>\n<li>Bootstrap 5.2: <a href=\"https:\/\/getbootstrap.com\/docs\/5.2\/components\/accordion\/\" rel=\"nofollow noopener\">Accordion<\/a><\/li>\n<li>MDN: <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Accessibility\/ARIA\/Attributes\/aria-controls\" rel=\"nofollow noopener\">aria-controls<\/a><\/li>\n<\/ul>\n<h2>Leggi anche<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.accessibilita.digital\/come-sviluppare-un-sito-web-accessibile\/\">Come sviluppare un sito web accessibile<\/a><\/li>\n<li><a href=\"https:\/\/www.accessibilita.digital\/come-realizzare-un-menu-di-navigazione-con-dropwn-accessibile\/\">Come realizzare un men\u00f9 di navigazione con dropwn accessibile<\/a><\/li>\n<li><a href=\"https:\/\/www.accessibilita.digital\/come-realizzare-un-componente-leggi-di-piu-read-more-accessibile\/\">Come realizzare un componente Leggi di pi\u00f9 (read more) accessibile<\/a><\/li>\n<li><a href=\"https:\/\/www.accessibilita.digital\/come-creare-popup-e-modali-accessibili\/\">Come creare popup e modali accessibili<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>L\u2019elemento comunemente chiamato \u201caccordion\u201d viene usato per mostrare e nascondere delle porzioni di contenuto. In genere il primo della lista \u00e8 aperto e mostra il testo, mentre i successivi sono nascosti. In alcuni casi, si preferisce far aprire un elemento alla volta chiudendo quello aperto in precedenza, mentre in altri casi si sceglie di permettere [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":260,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-181","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/posts\/181"}],"collection":[{"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/comments?post=181"}],"version-history":[{"count":3,"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/posts\/181\/revisions"}],"predecessor-version":[{"id":213,"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/posts\/181\/revisions\/213"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/media\/260"}],"wp:attachment":[{"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/media?parent=181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/categories?post=181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.accessibilita.digital\/wp-json\/wp\/v2\/tags?post=181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}