Accesibilidad (a11y)

Las extensiones permiten a los usuarios crear su experiencia de navegación ideal, adaptada a las capacidades y preferencias de cada persona. Las extensiones deben incluir componentes de accesibilidad que fomenten una base de usuarios inclusiva permitiendo que las personas con discapacidad visual, pérdida auditiva, motricidad limitada y otras discapacidades accedan a la extensión.

Todos, no solo los usuarios con necesidades especiales, pueden beneficiarse de las funciones de accesibilidad. Los usuarios avanzados, de poca destreza y personas con visión reducida se benefician de las combinaciones de teclas. Los subtítulos son esenciales para los usuarios sordos, pero también ayudan a los estudiantes de idiomas.

Las personas pueden interactuar con una extensión de varias maneras. Algunos usuarios tienen un monitor, teclado y mouse estándar, o pueden depender de una lupa y, posiblemente, un lector de pantalla. Si bien es imposible predecir qué herramientas usarán las personas para acceder a una extensión, hay pasos que cualquier desarrollador puede seguir para que una extensión sea lo más accesible posible.

Cómo integrar controles de IU accesibles

Si los usuarios no pueden acceder a los controles de la interfaz de usuario, no podrán usar una extensión. La manera más fácil de crear una IU accesible es usar un control de HTML estándar.

Controles estándar

Siempre que sea posible, usa los controles estándar de la IU de HTML. Se puede acceder a los controles de HTML estándar con el teclado, escalar con facilidad y, por lo general, los lectores de pantalla los entienden.

Capturas de pantalla y código para el botón, la casilla de verificación, la radio, el texto, la opción/opción y el vínculo

WAI-ARIA en controles personalizados

La Iniciativa de accesibilidad web: Aplicaciones de Internet enriquecidas accesibles, WAI-ARIA, es una especificación para hacer que los controles de IU sean accesibles para los lectores de pantalla mediante un conjunto estándar de atributos del DOM. Estos atributos proporcionan información al lector de pantalla sobre la función y el estado actual de los controles de una página web.

Para agregar compatibilidad con WAI-ARIA a los controles personalizados, se deberán modificar los elementos del DOM de una extensión para incluir los atributos que usa Chrome para generar eventos durante la interacción del usuario. Los lectores de pantalla responden a estos eventos y describen la función del control. Los atributos DOM que especifica WaI-ARIA se clasifican en roles, estados y propiedades.

<div role="toolbar">

La propiedad aria-activedescendant especifica qué elemento secundario de una barra de herramientas recibe el foco cuando la barra de herramientas lo recibe. El código tabindex="0" especifica que la barra de herramientas recibe el foco en el orden del documento.

Considera la especificación completa de una barra de herramientas de ejemplo a continuación:

<div role="toolbar" tabindex="0" aria-activedescendant="button1">
  <img src="buttoncut.png" role="button" alt="cut" id="button1">
  <img src="buttoncopy.png" role="button" alt="copy" id="button2">
  <img src="buttonpaste.png" role="button" alt="paste" id="button3">
</div>

Una vez que se agregan los roles, estados y propiedades de WAI-ARIA al DOM de un control, Google Chrome genera los eventos adecuados para el lector de pantalla. Debido a que la compatibilidad con WAI-ARIA aún es un trabajo en curso, es posible que Google Chrome no genere un evento para cada propiedad WAI-ARIA, y que los lectores de pantalla no reconozcan todos los eventos que se plantean.

Para obtener un instructivo rápido sobre cómo agregar controles WAI-ARIA a controles personalizados, consulta la presentación de Dave Raggett de WWW2010.

Enfocar en controles personalizados

El enfoque del teclado es fundamental para los usuarios que navegan por la Web sin un mouse. Asegúrate de que los controles de operación y navegación, como los botones, los cuadros de lista y las barras de menú, puedan recibir el foco del teclado.

De forma predeterminada, los únicos elementos del DOM HTML que pueden recibir el foco del teclado son los anclajes, los botones y los controles de formularios. Sin embargo, configurar el atributo HTML tabIndex en 0 coloca los elementos del DOM en la secuencia de pestañas predeterminada, lo que les permite recibir el foco del teclado.

element.tabIndex = 0
element.focus();

Si configuras tabIndex = -1, se quitará el elemento de la secuencia de pestañas, pero aún le permitirás que reciba el foco del teclado de manera programática.

Cómo admitir el acceso al teclado

Las extensiones se deben poder usar con solo un teclado, lo que permite que los usuarios que no pueden usar un mouse y los usuarios avanzados que simplemente no lo hacen accedan a ellas.

Comprueba que un usuario pueda navegar entre diferentes partes de una extensión sin usar el mouse. Comprueba que cualquier uso de una ventana emergente sea navegable con el teclado. Usa las combinaciones de teclas de Chrome para determinar si una extensión se puede navegar.

Asegúrate de que sea fácil ver qué partes de la interfaz tienen el foco del teclado. Por lo general, un contorno de enfoque se mueve por la interfaz; sin embargo, si se usa CSS demasiado, es posible que se suprima el contorno o que se reduzca el contraste.

Un esquema de enfoque en un botón de búsqueda

Un esquema de enfoque en uno de una serie de vínculos

Combinaciones de teclas

Si bien la estrategia de navegación con teclado más común implica el uso de la tecla Tab para rotar el enfoque a través de la interfaz de una extensión, no siempre es la opción más fácil o eficiente.

Un controlador de teclado JavaScript simple podría verse de la siguiente manera. Observa cómo se actualiza la propiedad aria-activedescendant de WAI-ARIA en respuesta a las entradas del usuario para reflejar el botón activo de la barra de herramientas actual.

 function optionKeyEvent(event) {
  var tb = event.target;
  var buttonid;

  ENTER_KEYCODE = 13;
  RIGHT_KEYCODE = 39;
  LEFT_KEYCODE = 37;
  // Partial sample code for processing arrow keys.
  if (event.type == "keydown") {
    // Implement circular keyboard navigation within the toolbar buttons
    if (event.keyCode == ENTER_KEYCODE) {
      ExecuteButtonAction(getCurrentButtonID());
      // getCurrentButtonID defined elsewhere
    } else if (event.keyCode == event.RIGHT_KEYCODE) {
      // Change the active toolbar button to the one to the right (circular).
      var buttonid = getNextButtonID();
      // getNextButtonID defined elsewhere
      tb.setAttribute("aria-activedescendant", buttonid);
    } else if (event.keyCode == event.LEFT_KEYCODE) {
      // Change the active toolbar button to the one to the left (circular).
      var buttonid = getPrevButtonID();
      // getPrevButtonID defined elsewhere
      tb.setAttribute("aria-activedescendant", buttonid);
    } else {
      return true;
    }
    return false;
  }
}
<div role="toolbar" tabindex="0" aria-activedescendant="button1" id="tb1"
     onkeydown="return optionKeyEvent(event);"
     onkeypress="return optionKeyEvent(event);">
  <img src="buttoncut" role="button" alt="cut" id="button1">
  <img src="buttoncopy" role="button" alt="copy" id="button2">
  <img src="buttonpaste" role="button" alt="paste" id="button3">
</div>

Las extensiones pueden crear combinaciones de teclas explícitas para elementos importantes de la IU de la extensión. Para implementar estas combinaciones de teclas, conecta los objetos de escucha de eventos del teclado a los controles. Proporciona a los usuarios los atajos disponibles en la página de opciones para informarlos.

Proporciona contenido accesible

Proporcionar contenido accesible es importante para todos los usuarios. Muchos de los siguientes lineamientos pueden resultar familiares, ya que reflejan prácticas recomendadas para todo el contenido web.

Texto

Las opciones de fuentes y el tamaño del texto afectan la legibilidad del contenido de una extensión. Es posible que los usuarios con problemas visuales deban aumentar el tamaño del texto de las extensiones. Si usas combinaciones de teclas, asegúrate de que no interfieran con las combinaciones de teclas de zoom integradas en Chrome.

Como indicador de flexibilidad de la IU de una extensión, aplica la prueba del 200%. Si el tamaño del texto o el zoom de página aumentan en un 200%, ¿aún se puede usar?

Evita integrar texto en imágenes. Los usuarios no pueden modificar el tamaño, y los lectores de pantalla no pueden interpretar imágenes. En su lugar, opta por fuentes para sitios web con estilo, como una de las fuentes que se encuentran en la API de Google Font. Las fuentes web pueden adaptarse a diferentes tamaños y las personas pueden acceder a ellas mediante lectores de pantalla.

Colores

Debe haber suficiente contraste entre el color de fondo y el color del texto en la extensión. Usa una herramienta de verificación de contraste para probar si los colores de fondo y de primer plano proporcionan un contraste adecuado.

Cuando evalúes el contraste, verifica que cada parte de la extensión que se basa en gráficos para transmitir información sea claramente visible. Para imágenes específicas, puedes usar herramientas como el simulador de daltonismo para ver cómo se ve una imagen con diversas formas de deficiencia de color.

Considera ofrecer diferentes temas de color o darle al usuario la posibilidad de personalizar el esquema de colores para crear un mejor contraste.

Sonido

Si una extensión se basa en el sonido o en el video para transmitir información, asegúrate de que haya subtítulos o transcripciones disponibles. Consulta los lineamientos del programa de medios con descripciones y subtítulos para obtener más información sobre los subtítulos.

Imágenes

Proporciona texto alternativo informativo para imágenes.

<img src="img.jpg" alt="The logo for the extension">

Usa el texto alternativo para indicar el propósito de la imagen en lugar de una descripción literal del contenido. Las imágenes espaciadores o las imágenes puramente decorativas deben tener un texto alternativo de "" en blanco, o bien se deben quitar por completo del HTML y colocarse en el CSS.

Si la extensión debe usar texto en una imagen, incluye el texto de la imagen en el texto alternativo. Un buen recurso al que puedes consultar es el artículo de WebAIM sobre el texto alternativo adecuado.

Más información

Si quieres obtener más información sobre la accesibilidad en Chrome, consulta el canal A11ycasts y lee la documentación técnica de accesibilidad de Chromium.