HTML: Una bona base per l'accessibilitat

Es pot fer accessible una gran quantitat de contingut web només assegurant-se que els elements d'HTML correctes s’utilitzin en tot moment amb el propòsit correcte. Aquest article analitza detalladament com es pot utilitzar HTML per garantir la màxima accessibilitat.

Requisits previs:

Alfabetització bàsica en informàtica, comprensió bàsica d’HTML (vegeu Introducció a l’HTML) i comprensió de què és l’accessibilitat.

Objectiu: Familiaritzar-vos amb les funcions d’HTML que tenen avantatges d’accessibilitat i com utilitzar-les adequadament als vostres documents web.

HTML i accessibilitat

A mesura que apreneu més sobre HTML —llegiu més recursos, mireu més exemples, etc.— anireu veient un tema comú: la importància d’utilitzar HTML semàntic (de vegades anomenat POSH o Plain Old Semantic HTML). Això significa utilitzar els elements HTML correctes per al propòsit previst en la mesura del possible.

Us podeu preguntar per què és tan important. Al cap i a la fi, podeu utilitzar una combinació de CSS i JavaScript per fer que qualsevol element HTML es comporti de la manera que vulgueu. Per exemple, es podria marcar un botó de control per reproduir un vídeo al vostre lloc així:

<div>Reproduir vídeo</div>

Però, com veureu amb més detall més endavant, té sentit utilitzar l'element correcte per a aquest objectiu:

<button>Reproduir vídeo</button>

Els <button>s HTML no només tenen un estil adequat aplicat per defecte (que probablement voldreu substituir), sinó que també tenen accessibilitat de teclat integrada: els usuaris poden navegar entre els botons mitjançant la tecla Tab i activar la seva selecció mitjançant Retorn o Enter.

No costa més escriure HTML semàntic que etiquetatge no semàntic (i incorrecte) si ho feu de manera constant des de l’inici del projecte. Encara millor, l’etiquetatge semàntic té altres avantatges més enllà de l’accessibilitat:

  1. Més fàcil de desenvolupar: com es va esmentar anteriorment, obtindreu algunes funcions de forma gratuïta, a més, és possiblement més fàcil d’entendre.
  2. Millor en dispositius mòbils: l’HTML semàntic és, sens dubte, més lleuger en mida de fitxer que el codi espagueti no semàntic i és més fàcil de fer responsive.
  3. Bo per al SEO: els motors de cerca donen més importància a les paraules clau dels encapçalaments, enllaços, etc. que les paraules clau incloses als <div> no semàntics, etc., de manera que els vostres clients podran trobar més fàcilment els vostres documents.

Continuem i vegem l'HTML accessible amb més detall.

Nota: És una bona idea tenir instal·lat un lector de pantalla a l'ordinador local perquè pugueu provar els exemples que es mostren a continuació. Consulteu la nostra Screen readers guide per obtenir més informació.

Bona semàntica

Ja hem parlat de la importància d'una semàntica adequada i de per què hauríem d'utilitzar l'element HTML adequat per a cada cosa. Això no es pot ignorar, ja que és un dels principals llocs on l'accessibilitat es trenca greument si no es gestiona correctament.

Al web, la veritat és que la gent fa coses molt estranyes amb el marcatge HTML. Alguns abusos d'HTML es deuen a pràctiques heretades que no s'han oblidat completament, i algunes són simplement ignorància. En qualsevol cas, hauríeu de substituir aquest codi tan dolent.

De vegades no esteu en condicions de desfer-vos del marcat terrible: les vostres pàgines podrien ser generades per algun tipus de framework del servidor sobre el qual no teniu el control total, o bé podríeu tenir contingut de tercers a la vostra pàgina (com ara banners publicitaris) sobre els quals no teniu control.

L'objectiu no és "tot o res". Tot i això, totes les millores que pugueu fer ajudaran a la causa de l’accessibilitat.

Contingut textual

Una de les millors ajudes d’accessibilitat que pot tenir un usuari de lector de pantalla és una estructura de contingut excel·lent amb encapçalaments, paràgrafs, llistes, etc. Un exemple semàntic excel·lent pot semblar-se al següent:

<h1>El meu encapçalament</h1>

<p>Aquesta és la primera secció del meu document.</p>

<p>Aquí hi afegiré un paràgraf també.</p>

<ol>
  <li>Aquí tenim</li>
  <li>una llista</li>
  <li>per llegir</li>
</ol>

<h2>El meu sotsencapçalament</h2>

<p>Aquesta és la primera subsecció del document. M'encantaria que tothom pogués trobar aquest document!</p>

<h2>El meu 2n sotsencapçalament</h2>

<p>Aquesta és la segona subsecció del meu contingut. Crec que és més interessant que l'anterior.</p>

Hem preparat una versió amb text més llarg per provar-la amb un lector de pantalla (vegeu good-semantics.html). Si proveu de navegar-hi, veureu que és bastant fàcil:

  1. El lector de pantalla llegeix cada capçalera a mesura que avança pel contingut i us notifica què és un encapçalament, què és un paràgraf, etc.
  2. S'atura després de cada element, deixant-te anar al ritme que sigui més còmode per a tu.
  3. Podeu passar a l’encapçalament següent / anterior en molts lectors de pantalla.
  4. També podeu mostrar una llista de tots els encapçalaments a molts lectors de pantalla, cosa que us permetrà utilitzar-los com una taula de contingut útil per trobar contingut específic.

De vegades, la gent escriu encapçalaments, paràgrafs, etc. mitjançant HTML de presentació i salts de línia, com ara el següent:

<font size="7">El meu encapçalament</font>
<br><br>
Aquesta és la primera secció del meu document.
<br><br>
Aquí hi afegiré un paràgraf també.
<br><br>
1. Aquí tenim
<br><br>
2. una llista
<br><br>
3. per llegir
<br><br>
<font size="5">El meu sotsencapçalament</font>
<br><br>
Aquesta és la primera subsecció del document. M'encantaria que tothom pogués trobar aquest document!
<br><br>
<font size="5">El meu 2n sotsencapçalament</font>
<br><br>
Aquesta és la segona subsecció del meu contingut. Crec que és més interessant que l'anterior.

Si proveu la nostra versió més llarga amb un lector de pantalla (vegeu bad-semantics.html), no tindreu una experiència molt bona: el lector de pantalla no té res a utilitzar com a indicador, de manera que no podeu recuperar una útil taula de continguts i tota la pàgina es veu com un bloc gegant únic, de manera que només es llegeix d’una sola vegada, tot alhora.

Hi ha altres qüestions més enllà de l’accessibilitat: és més difícil donar estils al contingut mitjançant CSS o manipular-lo amb JavaScript, per exemple, perquè no hi ha elements que s’utilitzin com a selectors.

Utilitzar un llenguatge clar

El llenguatge que utilitzeu també pot afectar l'accessibilitat. En general, heu d’utilitzar un llenguatge clar que no sigui massa complex i que no faci servir termes d’argot innecessaris. Això no només beneficia les persones amb discapacitats cognitives o d’altres; beneficia els lectors per als quals el text no està escrit en la seva primera llengua, la gent més jove... tothom, de fet! A part d'això, heu d'intentar evitar l'ús de llenguatge i caràcters que el lector de pantalla no llegeixi amb claredat. Per exemple:

  • No utilitzeu guions si podeu evitar-ho. En lloc d’escriure 5-7, escriviu 5 a 7.
  • Amplieu les abreviatures: en lloc d’escriure Gen, escriviu gener.
  • Amplieu les sigles, almenys una o dues vegades. En lloc d’escriure HTML en primera instància, escriviu Hypertext Markup Language.

Disposicions de pàgina

Antigament, la gent solia crear dissenys de pàgines amb taules HTML: utilitzaven diferents cel·les de taula per contenir la capçalera, el peu de pàgina, la barra lateral, la columna de contingut principal, etc. No és una bona idea perquè els lectors de pantalla faran lectures confuses, sobretot si el disseny és complex i té moltes taules imbricades.

Proveu el nostre exemple table-layout.html, que té un aspecte semblant a aquest:

<table width="1200">
      <!-- main heading row -->
      <tr id="heading">
        <td colspan="6">

          <h1 align="center">Header</h1>

        </td>
      </tr>
      <!-- nav menu row  -->
      <tr id="nav" bgcolor="#ffffff">
        <td width="200">
          <a href="#" align="center">Home</a>
        </td>
        <td width="200">
          <a href="#" align="center">Our team</a>
        </td>
        <td width="200">
          <a href="#" align="center">Projects</a>
        </td>
        <td width="200">
          <a href="#" align="center">Contact</a>
        </td>
        <td width="300">
          <form width="300">
            <input type="search" name="q" placeholder="Search query" width="300">
          </form>
        </td>
        <td width="100">
          <button width="100">Go!</button>
        </td>
      </tr>
      <!-- spacer row -->
      <tr id="spacer" height="10">
        <td>

        </td>
      </tr>
      <!-- main content and aside row -->
      <tr id="main">
        <td id="content" colspan="4" bgcolor="#ffffff">

          <!-- main content goes here -->
        </td>
        <td id="aside" colspan="2" bgcolor="#ff80ff" valign="top">
          <h2>Related</h2>

          <!-- aside content goes here -->

        </td>
      </tr>
      <!-- spacer row -->
      <tr id="spacer" height="10">
        <td>

        </td>
      </tr>
      <!-- footer row -->
      <tr id="footer" bgcolor="#ffffff">
        <td colspan="6">
          <p>©Copyright 2050 by nobody. All rights reversed.</p>
        </td>
      </tr>
    </table>

Si intenteu navegar-hi mitjançant un lector de pantalla, probablement us dirà que hi ha una taula que cal mirar (tot i que alguns lectors de pantalla poden endevinar la diferència entre els dissenys amb taules i les taules de dades). És probable que (depenent del lector de pantalla que utilitzeu) hàgeu de baixar a la taula com a objecte i mirar-ne les cel·les una a una i tornar a sortir de la taula per continuar navegant pel contingut.

Els dissenys de taules són una relíquia del passat: tenien sentit quan el suport de CSS no estava estès als navegadors, però ara només creen confusió per als usuaris de lectors de pantalla. A més, el seu codi font requereix més marcatge, cosa que els fa menys flexibles i més difícils de mantenir. Podeu verificar aquestes afirmacions comparant la vostra experiència anterior amb un exemple d’estructura de lloc web més modern, que podria semblar-se a:

<header>
  <h1>Header</h1>
</header>

<nav>
  <!-- main navigation in here -->
</nav>

<!-- Here is our page's main content -->
<main>

  <!-- It contains an article -->
  <article>
    <h2>Article heading</h2>

    <!-- article content in here -->
  </article>

  <aside>
    <h2>Related</h2>

    <!-- aside content in here -->
  </aside>

</main>

<!-- And here is our main footer that is used across all the pages of our website -->

<footer>
  <!-- footer content in here -->
</footer>

Si proveu el nostre exemple d’estructura més modern amb un lector de pantalla, veureu que l’etiquetatge de disseny ja no s’interposa i confon la lectura del contingut. També és molt més lleuger i reduït pel que fa a la mida del codi, cosa que significa que és més fàcil mantenir el codi i que necessita menys amplada de banda per a l'usuari (especialment important per a aquells que tenen connexions lentes).

Una altra consideració a l’hora de crear dissenys és l’ús d’elements semàntics HTML5 tal com es veu a l’exemple anterior (vegeu seccionat de contingut): podeu crear un disseny utilitzant només elements <div>) imbricats, però és millor utilitzar elements adequats per marcar la vostra navegació principal (<nav>), peu de pàgina (<footer>), unitats de contingut (<article>), etc. Aquests proporcionen una semàntica addicional per als lectors de pantalla (i altres eines) per donar a l'usuari pistes addicionals sobre el contingut que navega (vegeu Screen Reader Support for new HTML5 Section Elements per fer-vos una idea de com és el suport en els lectors de pantalla).

Nota: A més de tenir una bona semàntica i un disseny atractiu, el vostre contingut hauria de tenir un sentit lògic en el seu ordre de codi; sempre podeu col·locar-lo allà on vulgueu mitjançant CSS, però hauríeu de crear un ordre de codi correcte de sortida, de forma que el que es llegeixi als usuaris de lectors de pantalla tingui sentit.

Controls d'interfície d'usuari

Per controls d’interfície d’usuari ens referim a les parts principals dels documents web amb les quals interactuen els usuaris, normalment botons, enllaços i controls de formulari. En aquesta secció analitzarem les qüestions bàsiques d’accessibilitat que cal tenir en compte a l’hora de crear aquests controls. Articles posteriors sobre WAI-ARIA i multimèdia examinaran altres aspectes de l'accessibilitat de la interfície d'usuari.

Un aspecte clau de l’accessibilitat dels controls d’interfície d’usuari és que, per defecte, els navegadors permeten manipular-los mitjançant el teclat. Podeu provar-ho amb el nostre exemple native-keyboard-accessibility.html (consulteu el codi font). Obriu-lo en una pestanya nova i proveu de prémer la tecla de tabulació; després de prémer algunes vegades, hauríeu de veure com el focus de la pestanya comença a moure's pels diferents elements enfocables. Els elements enfocats tenen un estil predeterminat ressaltat en tots els navegadors (difereix lleugerament entre els diferents navegadors) de manera que pugueu saber quin element està enfocat.

A continuació, podeu prémer Enter / Return per seguir un enllaç enfocat o prémer un botó (hem inclòs una mica de JavaScript per fer que els botons llancin un missatge) o començar a escriure per introduir text en una camp de formulari. Altres elements del formulari tenen controls diferents, per exemple, l'element <select>} pot mostrar les seves opcions i circular entre elles amb les tecles de fletxa amunt i avall.

Nota: Els diferents navegadors poden tenir diferents opcions de control de teclat disponibles. Consulteu Using native keyboard accessibility per obtenir més informació.

Essencialment, obteniu aquest comportament gratis només fent servir els elements adequats, p.ex:

<h1>Enllaços</h1>

<p>Això és un enllaç a <a href="https://www.mozilla.org">Mozilla</a>.</p>

<p>Un altre enllaç, a la <a href="https://developer.mozilla.org">Mozilla Developer Network</a>.</p>

<h2>Botons</h2>

<p>
  <button data-message="Això és del primer botó">Fes-me clic!</button>
  <button data-message="Això és del segon botó">Fes-me clic també!</button>
  <button data-message="Això és del tercer botó">I a mi!</button>
</p>

<h2>Formulari</h2>

<form>
  <div>
    <label for="nom">Entra el teu nom:</label>
    <input type="text" id="nom" name="nom">
  </div>
  <div>
    <label for="edat">Entra la teva edat:</label>
    <input type="text" id="edat" name="edat">
  </div>
  <div>
    <label for="mood">Tria el teu humor:</label>
    <select id="humor" name="humor">
      <option>Feliç</option>
      <option>Trist(a)</option>
      <option>Enfadat/da</option>
      <option>Preocupat/da</option>
    </select>
  </div>
</form>

Això vol dir utilitzar adequadament enllaços, botons, elements de formulari i etiquetes (inclòs l'element <label>) per als controls de formulari).

Tanmateix, es torna a donar el cas que la gent de vegades fa coses estranyes amb HTML. Per exemple, de vegades veieu botons marcats amb <div>s, per exemple:

<div data-message="Això és del primer botó">Fes-me clic!</div>
<div data-message="Això és del segon botó">Fes-me clic també!</div>
<div data-message="Això és del tercer botó">I a mi!</div>

Però no s’aconsella l’ús d’aquest codi: perdeu immediatament l’accessibilitat nativa de teclat que hauríeu tingut si acabeu d’utilitzar elements <button>), a més de no obtenir cap estil CSS predeterminat.

Tornar a afegir l'accessibilitat de teclat

Afegir aquests avantatges requereix una mica de feina (podeu veure un exemple al nostre exemple fake-div-buttons.html; també podeu veure el codi font). Aquí hem donat als nostres botons falsos amb <div> la possibilitat d'agafar el focus (inclòs mitjançant la tecla de tabulació) donant a cadascun l'atribut tabindex="0":

<div data-message="Això és del primer botó" tabindex="0">Fes-me clic!</div>
<div data-message="Això és del segon botó" tabindex="0">Fes-me clic també!</div>
<div data-message="Això és del tercer botó" tabindex="0">I a mi!</div>

Bàsicament, l'atribut tabindex està pensat principalment per permetre que els elements tabulables puguin tenir un ordre de tabulació personalitzat (especificat en ordre numèric positiu), en comptes del seu ordre de codi per defecte. Aquesta és gairebé sempre una mala idea, ja que pot provocar confusions importants. Utilitzeu-la només si ho necessiteu de debò; per exemple, si el disseny mostra les coses en un ordre visual molt diferent al codi font i voleu que les coses funcionin de manera més lògica. Hi ha dues opcions més per a tabindex:

  • tabindex = "0": tal com s'ha indicat anteriorment, aquest valor permet que els elements que normalment no són tabulables passin a ser tabulables. Aquest és el valor més útil de tabindex.
  • tabindex = "- 1": això permet que els elements no tabulables normalment puguin rebre el focus per programació, per exemple, mitjançant JavaScript o com a objectiu dels enllaços.

Tot i que l’addició anterior ens permet arribar als botons amb lña tecla de tabulació, no ens permet activar-los mitjançant la tecla Enter / Retorn. Per fer-ho, hem hagut d'afegir el següent truc amb JavaScript:

document.onkeydown = function(e) {
  if(e.keyCode === 13) { // La tecla Enter/Return
    document.activeElement.click();
  }
};

Aquí afegim un 'listener' (oient) a l'objecte document per detectar quan s'ha premut un botó al teclat. Comprovem quin botó s'ha premut mitjançant la propietat keyCode de l'objecte d'esdeveniment; si és el codi de tecla que coincideix amb Return / Enetr, executem la funció emmagatzemada al controlador onclick del botó mitjançant document.activeElement.click(). activeElement ens proporciona l'element que té actualment el focus a la pàgina.

Això suposa un munt de molèsties addicionals per recuperar la funcionalitat. I segurament hi haurà altres problemes. Millor utilitzar l’element adequat per al treball adequat en primer lloc.

Etiquetes de text significatives

Les etiquetes de text dels controls de la interfície d’usuari són molt útils per a tots els usuaris, però fer-les correctament és particularment important per als usuaris amb discapacitat.

Assegureu-vos que les etiquetes de text del botó i de l'enllaç siguin comprensibles i distintives. No només utilitzeu "Feu clic aquí" per a les etiquetes, ja que els usuaris del lector de pantalla de vegades obtenen una llista de botons i controls de formulari. La següent captura de pantalla mostra el que VoiceOver llista els nostres controls en Mac.

Form controls. Click me! button. Click me too! button. And me! button. Fill me in: edit text. Fill me in: edit text. Happy collapsed pop up button. Happy menu item. Sad menu item. Angry menu item. Worried menu item.

Assegureu-vos que les vostres etiquetes tinguin sentit fora del context, llegides per si mateixes, així com en el context del paràgraf en què es troben. Per exemple, el següent mostra un exemple de text de bon enllaç:

<p>Les balenes són criatures realment fantàstiques. <a href="whales.html">Aprèn més sobre les balenes</a>.</p>

Però això és mal text d'enllaç:

<p>Les balenes són criatures realment fantàstiques. Per tal d'aprendre més sobre les balenes, <a href="whales.html">fes clic aquí</a>.</p>

Nota: Podeu trobar molt més sobre la implementació d’enllaços i les pràctiques recomanades al nostre article Creació d’enllaços. També podeu veure alguns exemples bons i dolents a good-links.html i bad-links.html.

Les etiquetes del formulari també són importants per donar-vos una idea del que heu d’introduir a cada entrada del formulari. El següent sembla un exemple prou raonable:

Entra el teu nom: <input type="text" id="nom" name="nom">

Tot i això, això no és tan útil per a usuaris amb discapacitat. No hi ha res a l’exemple anterior per associar l’etiqueta sense ambigüitats amb l’entrada del formulari i deixar clar com emplenar-la si no la podeu veure. Si hi accediu amb alguns lectors de pantalla, podria ser que només se us donés una descripció seguint la línia de "edita text".

El següent és un exemple molt millor:

<div>
  <label for="nom">Entra el teu nom:</label>
  <input type="text" id="nom" name="nom">
</div>

Amb un codi com aquest, l'etiqueta s'associarà clarament a l'entrada; la descripció serà més semblant a "Entra el teu nom nom: editeu text".
 

Com a avantatge addicional, a la majoria de navegadors si associeu una etiqueta amb una entrada de formulari, podeu fer clic a l’etiqueta per seleccionar o activar l’element de formulari. Això proporciona a l’entrada una zona d’èxit més gran, cosa que facilita la selecció.

Nota: podeu veure alguns exemples de formularis bons i dolents a good-form.html i bad-form.html.

Taules de dades accessibles

Es pot escriure una taula de dades bàsica amb un marcatge molt senzill, per exemple:

<table>
  <tr>
    <td>Nom</td>
    <td>Edat</td>
    <td>Gènere</td>
  </tr>
  <tr>
    <td>Gabriel</td>
    <td>13</td>
    <td>Masculí</td>
  </tr>
  <tr>
    <td>Elva</td>
    <td>8</td>
    <td>Femení</td>
  </tr>
  <tr>
    <td>Freida</td>
    <td>5</td>
    <td>Femení</td>
  </tr>
</table>

Però això té problemes: un usuari del lector de pantalla no pot associar files o columnes juntes com a agrupacions de dades. Per fer-ho, hauria de saber quines són les cel·les amb capçaleres i si encapçalen files, columnes, etc. Això només es pot fer visualment per a la taula anterior (consulteu bad-table.html i proveu l'exemple vosaltres mateixos).

Vegeu ara el nostre exemple de taula de grups de punk: podeu veure algunes ajudes d’accessibilitat en funcionament:

  • Les capçaleres de les taules es defineixen mitjançant elements <th>); també podeu especificar si són capçaleres per a files o columnes mitjançant l'atribut scope. Això us proporciona grups complets de dades que els lectors de pantalla poden consumir com a unitats individuals.
  • L'element <caption>} i l'atribut summary de <table> fan tasques similars: actuen com a text alternatiu per a una taula, donant a l'usuari de lector de pantalla un resum ràpid i útil del contingut de la taula. Generalment es prefereix l'element <caption>, ja que fa que el seu contingut és accessible també per als usuaris vidents, que també poden trobar-los útils. Realment no necessiteu les dues coses.

Nota: Consulteu l'article sobre funcions avançades i accessibilitat de la nostra taula HTML per obtenir més informació sobre les taules de dades accessibles.

Nota: Consulteu el nostre article Taules HTML: característiques avançades i accessibilitat per saber més sobre les taules de dades accessibles.

Alternatives de text

Mentre que el contingut textual és intrínsecament accessible, no es pot dir el mateix necessàriament del contingut multimèdia: les persones amb discapacitat visual no poden veure el contingut d’imatges ni de vídeo i les persones amb discapacitat auditiva no poden sentir l'àudio. Cobrim detalladament el contingut de vídeo i àudio a Accessible multimedia, però per a aquest article analitzarem l'accessibilitat de l'humil element <img>.

Tenim un exemple senzill escrit, accessible-image.html, que inclou quatre còpies de la mateixa imatge:

<img src="dinosaur.png">

<img src="dinosaur.png"
     alt="A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.">

<img src="dinosaur.png"
     alt="A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth."
     title="The Mozilla red dinosaur">


<img src="dinosaur.png" aria-labelledby="dino-label">

<p id="dino-label">The Mozilla red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.</p>

La primera imatge, quan la veu un lector de pantalla, no ofereix realment molta ajuda a l'usuari: VoiceOver, per exemple, llegeix "/dinosaur.png, imatge". Es llegeix el nom del fitxer per intentar proporcionar ajuda. En aquest exemple, l'usuari almenys sabrà que és un dinosaure d'alguna mena, però sovint es poden penjar fitxers amb noms de fitxers generats automàticament (per exemple, des d'una càmera digital) i és probable que aquests noms de fitxers no proporcionin context al contingut de la imatge.

Nota: és per això que no heu d’incloure mai contingut de text dins d’una imatge; els lectors de pantalla simplement no hi poden accedir. També hi ha altres desavantatges: no podeu seleccionar-lo ni copiar-lo / enganxar-lo. Simplement no ho feu!

Quan un lector de pantalla troba la segona imatge, llegeix l’atribut alt complet: "Un tiranosaure vermell Rex: un dinosaure de dues potes dret com un humà, amb braços petits i un cap gran amb moltes dents afilades".

Això posa de manifest la importància d’utilitzar no només noms de fitxers significatius en cas que l’anomenat text alternatiu no estigui disponible, sinó també assegurar-se que el text alternatiu s’ofereixi en atributs alt sempre que sigui possible. Tingueu en compte que el contingut de l'atribut alt sempre ha de proporcionar una representació directa de la imatge i del que transmet visualment. Aquí no s’hi hauria d’incloure cap coneixement personal ni cap descripció addicional, ja que no és útil per a persones que no s’han trobat amb la imatge abans.

Una cosa a tenir en compte és si les vostres imatges tenen significat dins del vostre contingut o si són exclusivament per a la decoració visual i, per tant, no tenen cap sentit. Si són decoratives, és millor escriure un text buit com a valor de l'atribut alt (ho veurem més endavant en aquest mateix article) o simplement incloure'ls a la pàgina com a imatges de fons CSS.

Nota: Llegiu Imatges en HTML i Imatges responsives per obtenir molta més informació sobre la implementació d'imatges i les pràctiques recomanades.

Si voleu proporcionar informació contextual addicional, l'heu de posar al text que envolta la imatge o dins d'un atribut de títol, tal com es mostra a continuació. En aquest cas, la majoria de lectors de pantalla llegiran el text alternatiu, l'atribut title i el nom del fitxer. A més, els navegadors mostren el text del títol quan es passa el ratolí per sobre.

Fem una altra ullada ràpida al quart mètode:

<img src="dinosaur.png" aria-labelledby="dino-label">

<p id="dino-label">The Mozilla red Tyrannosaurus ... </p>

En aquest cas, no utilitzem en absolut l’atribut alt; en canvi, hem presentat la nostra descripció de la imatge com a paràgraf de text normal, li hem donat un id i, a continuació, hem utilitzat l’atribut aria-labelledby per referir-nos a aquest id, que fa que els lectors de pantalla utilitzin aquest paràgraf com a text alternatiu / etiqueta per a aquesta imatge. Això és especialment útil si voleu utilitzar el mateix text com a etiqueta per a diverses imatges, cosa que no és possible amb alt.

Nota: aria-labelledby forma part de l'especificació WAI-ARIA, que permet als desenvolupadors afegir semàntica addicional al seu marcatge per millorar l'accessibilitat del lector de pantalla quan sigui necessari. Per obtenir més informació sobre com funciona, llegiu el nostre article WAI-ARIA Basics.

D'altres mecanismes de text alternatiu

Les imatges també tenen un altre mecanisme disponible per proporcionar text descriptiu. Per exemple, hi ha un atribut longdesc destinat a apuntar a un document web independent que conté una descripció ampliada de la imatge, per exemple:

<img src="dinosaur.png" longdesc="dino-info.html">

Sembla una bona idea, especialment per a infografies i grans gràfics amb molta informació, que potser es podrien representar com una taula de dades accessible (n'hem parlat en aquest mateix article). No obstant això, longdesc no és compatible amb tots els lectors de pantalla i el contingut és completament inaccessible per als usuaris que no utilitzin lectors de pantalla. Sens dubte, és molt millor incloure la descripció llarga a la mateixa pàgina que la imatge o enllaçar-la amb un enllaç normal.

HTML5 inclou dos elements nous: <figure> i <figcaption> que se suposa que associen una figura d'algun tipus (pot ser qualsevol cosa, no necessàriament una imatge) amb un títol de figura:

<figure>
  <img src="dinosaur.png" alt="The Mozilla Tyrannosaurus">
  <figcaption>A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.</figcaption>
</figure>

Malauradament, la majoria dels lectors de pantalla sembla que encara no associen els subtítols de figures amb les seves figures. Dit això, l'estructura de l'element és útil per a aplicar-hi estil CSS; a més, proporciona una manera de col·locar una descripció de la imatge al costat al codi font.

Atributs alt buits

<h3>
  <img src="article-icon.png" alt="">
  Tyrannosaurus Rex: the king of the dinosaurs
</h3>

Pot haver-hi ocasions en què s’inclogui una imatge al disseny d’una pàgina, però el seu propòsit principal sigui la decoració visual. Notareu a l’exemple de codi anterior que l’atribut alt de la imatge és buit: es tracta de fer que els lectors de pantalla reconeguin la imatge, però no intentin descriure-la (en lloc d’això, només dirien “imatge” o alguna cosa similar).

La raó per utilitzar un alt buit en lloc de no incloure'l és perquè molts lectors de pantalla anuncien tota la URL de la imatge si no es proporciona cap alt. A l'exemple anterior, la imatge actua com a decoració visual de l'encapçalament amb què s'associa. En casos com aquest, i en els casos en què una imatge només sigui decorativa i no tingui cap valor de contingut, hauríeu d'incloure un alt buit als elements img. Una altra alternativa és utilitzar l'atribut aria role="presentation", ja que també impedeix que els lectors de pantalla llegeixin el text alternatiu.

Nota: si és possible, heu d’utilitzar CSS per mostrar imatges només decoratives.

Més sobre els enllaços

Els enllaços (l'element <a> amb un atribut href), en funció de com s'utilitzin, poden ajudar o perjudicar l'accessibilitat. Per defecte, els enllaços són accessibles en aparença. Poden millorar l’accessibilitat ajudant l’usuari a navegar ràpidament a les diferents seccions d’un document. També poden perjudicar l’accessibilitat si s’elimina l’estil accessible o si JavaScript fa que es comportin de manera inesperada.

Estil d’enllaç

Per defecte, els enllaços són visualment diferents de la resta del text en color i en decoració de text, amb els enllaços de color blau i subratllats per defecte, de color porpra i subratllats si s'han visitat, i amb un anell de focus quan reben el focus del teclat.

No s’ha d’utilitzar el color com a únic mètode per distingir els enllaços del contingut que no enllaça. El color del text de l’enllaç, com tot el text, ha de diferir significativament del color de fons (un contrast de 4,5:1). A més, els enllaços han de ser significativament diferents del text que no enllaça. Amb un requisit de contrast mínim de 3:1 entre el text de l'enllaç i el text circumdant i entre els estats predeterminat, visitat i focus / actiu i un contrast de 4:5 entre tots els colors d'estat i el color de fons.

Esdeveniments onclick

Sovint s'abusa de les etiquetes d'ancoratge amb l'esdeveniment onclick per crear pseudo-botons configurant href a "#" o "javascript:void(0)" per evitar que la pàgina s'actualitzi.

Aquests valors causen un comportament inesperat en copiar o arrossegar enllaços, en obrir enllaços en una pestanya o finestra nova, en afegir adreces d'interès i, quan el JavaScript encara s'està descarregant, es produeix un error o es desactiva. Això també transmet una semàntica incorrecta a les tecnologies d'assistència (per exemple, lectors de pantalla). En aquests casos, es recomana utilitzar un <button>. En general, només heu d'utilitzar un àncora per a la navegació mitjançant un URL adequat.

Enllaços externs i enllaços a recursos no HTML

Els enllaços que s'obrin en una nova pestanya o finestra mitjançant la declaració target="_ blank" i els enllaços el valor href dels quals apunti a un recurs de fitxer han d'incloure un indicador sobre el comportament que es produirà quan s'activi l'enllaç.

Les persones amb problemes de visió baixa, que naveguen amb l'ajut de tecnologies de lectura de pantalla o que tenen problemes cognitius, poden confondre's quan s'obre inesperadament la nova pestanya, finestra o aplicació. És possible que versions antigues del programari de lectura de pantalla ni tan sols anunciïn el comportament.

Enllaç que obre una nova pestanya o finestra

<a target="_blank" href="https://www.wikipedia.org/">Wikipedia (opens in a new window)</a>

Enllaç a un recurs no HTML

<a target="_blank" href="2017-annual-report.ppt">2017 Annual Report (PowerPoint)</a>

Si s'utilitza una icona en comptes de text per assenyalar aquest tipus de comportament d'enllaç, assegureu-vos que inclou una descripció alternativa.

Enllaços de salt

Un enllaç de salt, també conegut com a "skipnav", és un element situat tan a prop com sigui possible de l'element d'obertura <body> que enllaça amb el començament del contingut principal de la pàgina. Aquest enllaç permet saltar el contingut que es repeteix en diverses pàgines d’un lloc web, com ara la capçalera d’un lloc web i la navegació principal.

Els enllaços de salt són especialment útils per a les persones que naveguen amb l'ajuda de tecnologies d'assistència, com ara controls de commutació, ordres de veu o les varetes de cap / boca, on el fet de moure's per enllaços repetitius pot ser una tasca laboriosa.

Proximitat

Les grans quantitats de contingut interactiu (incloses les àncores) situades molt a prop les unes de les altres haurien de tenir espai inserit  per separar-les. Aquest espaiat és beneficiós per a les persones que pateixen problemes de control motor fi i poden activar accidentalment el contingut interactiu equivocat durant la navegació.

Es pot crear espai mitjançant propietats CSS com ara margin.

Posa a prova les teves habilitats!

Heu arribat al final d’aquest article, però recordeu la informació més important? Consulteu Test your skills: HTML Accessibility per verificar que heu conservat aquesta informació abans de continuar.

Resum

Ara hauríeu de tenir un bon coneixement de l’escriptura d’HTML accessible per a la majoria de les ocasions. El nostre article de fonaments de WAI-ARIA ajudarà a omplir els buits d’aquest coneixement, però aquest article s’ha ocupat dels conceptes bàsics. A continuació, explorarem CSS i JavaScript i com es veu afectada l’accessibilitat pel seu bon o mal ús.

In this module