UC3M logo

WAI - Iniciativa de Accesibilidad Web

Vicente Luque Centeno vlc@it.uc3m.es
Departamento de Ingeniería Telemática
Universidad Carlos III de Madrid
www.it.uc3m.es/vlc/wai_intro
2003 Año Europeo de las Personas con Discapacidad 2004 Año Iberoamericano de las Pesonas con Discapacidad

| |

Agenda

  1. Ideas falsas
  2. Barreras
  3. Visión general del WAI
  4. Puntos de chequeo
  5. Conclusiones
  6. Bibliografía

Ideas falsas (1/2)

No soy discapacitado, luego no me interesa
  • WAI es para todos
  • 20% de población con algún tipo de problema
  • Las barreras afectan a varios dispositivos: (teléfonos móviles, PDA, TV digital, kioscos, sistemas de voz, ...)
Las personas discapacitadas no pueden usar ordenadores
  • Internet como un importante vehículo de integración
  • Existe Hw + Sw especializado (Braille, voz, magnificadores, ...)
  • Otras discapacidades temporales: conducción, brazo escayolado, ...

Ideas falsas (2/2)

Aburrida versión alternativa sólo texto
  • Discriminación (no todas las personas tienen los mismos problemas)
  • Replicación innecesaria de esfuerzos y recursos
  • Una versión sólo texto puede ser incluso menos accesible
  • Accesibilidad y belleza con CSS no son incompatibles
Especificar un diseño para cada tipo de usuario o dispositivo
  • Diseño para CUALQUIER tipo de usuario
  • Independencia del dispositivo

Visión

Vision

Daltonismo

Daltonismo

Oído

Sordera

Discapacidades físicas

Discapacidades físicas

Discapacidades cognitivas y neurológicas

Discapacidades cognitivas y neurológicas

Tecnología

Tecnología

Independencia del dispositivo

Independencia de Dispositivo en un teléfono móvil Independencia de Dispositivo en un Tablet PC Independencia de Dispositivo en Treo smartphone Independencia de Dispositivo en una PDA
Independencia de Dispositivo en un Communicator Independencia de Dispositivo en un Nokia 770

Discapacidad como una función de la edad

Discapacidad como una función de la edad

Fuente: U.S. Census Bureau Report on Americans with Disabilities: 1994-1995 (August 1997).

Heterogeneidad

Heterogeneidad de dificultades

Algunas barreras eliminables

Visión general de WCAG 1.0

Visión general de WCAG 1.0

Niveles de cumplimiento de los WCAG
1 2 3
OK
OK OK
OK OK OK

Puntos de chequeo

Puntos de chequeo

Prohibiciones prioridad 1: color (1/7)

[2.1] Prohibido confiar semántica en el color Semáforo

Los preferidos se muestran en verde → ∅

Prohibiciones prioridad 1: dependencia del cliente (2/7)

[6.1] Prohibido confiar en contenido o posicionamiento dependiente del lado del cliente Independencia del dispositivo

Marcado HTML degenerado para conseguir efectos presentacionales específicos → ∅

Prohibiciones prioridad 1: scripts necesarios (3/7)

[6.3] Prohibido scripts necesarios

<a href="javascript:loadUrl()">DEAD LINK</a> →

<a href="alternate.html" onclick="loadUrl(); return false" onkeypress="...">NON DEAD LINK</a> Dead end

Prohibiciones prioridad 1: scripts necesarios (4/7)

[6.3] Prohibido scripts necesarios

document.write("<input type='submit' />") → ∅

Prohibiciones prioridad 1: scripts necesarios (5/7)

[6.3] Prohibido scripts necesarios

<select name="Books" onchange="jump()"> <option> ... </option> ... →

<select name="Books" onsubmit="check()"> <option> ... </option> ...
</select> <input type="submit" />

Prohibiciones prioridad 1: destellos (6/7)

[7.1] Prohibido destellos en la pantalla Destellos

Molestos también para los no discapacitados

Prohibiciones prioridad 1: vocabulario (7/7)

[14.1] No usar vocabulario complejo o enrevesado Para niños

No sólo en el Web

Prohibiciones prioridad 2: contraste (1/10)

[2.2] No usar imágenes con bajos contrastes

Una imagen con alto contrasteUna imagen con bajo contraste

Prohibiciones prioridad 2: HTML anquilosado (2/10)

[3.3] No usar HTML anquilosado con equivalente CSS Anquilosado

HTML anquilosado y CSS equivalente
HTML anquilosado Correcto
<font> font-family, font-size, ...
&nbsp; or <blockquote> text-indent, margin
H E L L O letter-spacing
<big>H</big>ello :first-letter
<center> text-align
dots.gif border-style:dotted
px.gif margin, padding, ...
<table> border

Prohibiciones prioridad 2: tablas (3/10)

Prohibiciones prioridad 2: parpadeo (4/10)

[7.2] Prohibido contenido parpadeante Desprendimientos

blink → CSS → ∅ (o detenible)

Prohibiciones prioridad 2: movimiento (5/10)

[7.3] Prohibidos movimientos del contenido No hielo

(marquee, efectos DHTML, cambios inesperados de tamaño de ventanas, deshabilitación de scrolls o cambios de tamaño por el usuario ...) → ∅ (o detenibles)

Prohibiciones prioridad 2: eventos (6/10)

[6.4] No usar manejadores de eventos dependientes del dispositivo Para todo dispositivo

  • Independientes del dispositivo preferidos
    • @onfocus
    • @onblur
    • @onselect
  • Dependientes del dispositivo combinados
    • @onmousedown ↔ @onkeydown
    • @onmouseup ↔ @onkeyup
    • @onclick ↔ @onkeypress
  • No estándares rechazados
    • @onpaste
    • @onpropertychange
    • @onresizestart
    • @onselectstart

Prohibiciones prioridad 2: refrescos (7/10)

Prohibiciones prioridad 2: ventanas emergentes (8/10)

[10.1] Prohibida la aparición de nuevas ventanas no solicitadas¬ ∃ a/@target, ¬ ∃ window.open() Popups

<a href="new.htm" target="_blank">Popup</a> → ¡Que el usuario decida!

Prohibiciones prioridad 2: etiquetas de formularios (9/10)

[10.2] Prohibidas las etiquetas confusas en los formularios (∀ ff ∈ (input|select|textarea) $ff → label como una dependencia funcional) Complicado

Una etiqueta para cada control y un control para cada etiqueta

Prohibiciones prioridad 2: HTML anquilosado (10/10)

[11.2] Prohibido HTML anquilosado Anquilosado

HTML anquilosado y sus redefiniciones
Anquilosado Redefinición
<b>,<i> <strong>, <em>
<applet> <object>
<layer>, <ilayer> <iframe>
<isindex> <input>
<dir>, <xmp>

Prohibiciones prioridad 3

[2.2a] Prohibidos textos con bajos contrastes Both

Defina inseparablemente los colores del texto y del fondo → ¿blanco sobre blanco?, ¿negro sobre negro?

Obligaciones prioridad 1: imágenes (1/11)

[1.1] Alternativa textual para las imágenes (img/@alt) Textual

<img src="pic.gif" alt="Texto alternativo" title="Texto complementario" />

Obligaciones prioridad 1: multimedia (2/11)

[1.1b] Texto alternativo para otros elementos multimedia (vídeo, audio, applets, plugins, scripts, ...) noscript, object/* Textual

Que sea una alternativa real (imágenes en lugar de vídeo, transcripción de diálogos, narraciones, aplicaciones alternativas en el lado del servidor, ...)

Obligaciones prioridad 1: marcos (3/11)

[1.1e] Alternativa para los marcos (noframes) Oneway

  • <noframes>Your browser does not support frames!</noframes> → ∅
  • Marcos → ∅

Obligaciones prioridad 1: marcos (4/11)

[6.2a] El contenido de los marcos debe ser HTML ∀ f ∈ (frame|iframe) $f/@src → HTML

[12.1] Describir los marcos (frame/@title) Textual

<frame title="Navigation bar">

Obligaciones prioridad 1: mapas de servidor (5/11)

[1.2] Enlaces alternativos para mapas de imagen de servidor

Algunos dispositivos pueden tener problemas en especificar coordenadas

Obligaciones prioridad 1: temporización (6/11)

[1.4] Sincronización de eventos temporizados No pasarse de velocidad

SMIL, vídeos, scripts, audio, ...

Obligaciones prioridad 1: cambio de idioma (7/11)

[4.1] Especificación de idioma (@xml:lang, @hreflang) Aduana

  • <q xml:lang="fr">Bon jour</q>
  • <a href="italian.html" hreflang="it">Versión en italiano</a>

Obligaciones prioridad 1: cabeceras de tablas (8/11)

[5.1] Cabeceras en tablas (th)

No usarlas como celdas regulares de datos → <th></th> ≠ <td><strong></strong></td>

Obligaciones prioridad 1: actualización de alternativas (9/11)

[6.2] Actualización de alternativas de contenidos dinámicos Textual

<noscript>Your browser does not support JavaScript!</noscript> →

<noscript><a href="alternate.html">Server side alternate</a></noscript>

Obligaciones prioridad 1: multimedia (10/11)

[8.1] Los scripts, plugins y applets importantes deben ser asimismo accesibles Plugins

Obligaciones prioridad 1: versión alternativa (11/11)

[11.4] Mantener una versión alternativa accesible Versiones Trabajo

¡¡Como último recurso!!

Obligaciones prioridad 2: validación (1/12)

[3.2] Validar los documentos frente a una gramática reconocida (¿cuál?)

T ⊃ S ⊃

Contenido frente a presentación
Contenido ⇐ ⇒ Presentación
Transitional
Strict

Obligaciones prioridad 2: arte ASCII, cabeceras (2/12)

Obligaciones prioridad 2: listas, citas, ... (3/12)

Obligaciones prioridad 2: multimedia (4/12)

[8.1a] Los scripts plugins y applets no importantes deben ser asimismo accesibles Plugins

Los importantes en 8.1, prioridad 1

Obligaciones prioridad 2: formatos estándares (5/12)

[11.1] Usar las tecnologías del W3C Autopista

  • Incluso algunas que no estén contempladas por los navegadores actuales. Pensar en el futuro
  • Los navegadores deben adaptarse a los estándares
  • Los documentos no deben adaptarse a los navegadores

Obligaciones prioridad 2: descriptores de campos de formularios (6/12)

[12.4] Asociaciones explícitas entre etiquetas descriptoras y controles de formularios (label/@for) (con 10.2, esto se convierte en una correspondencia biyectiva) Asociaciones claras

<label for="login">User</label> <input type="text" id="login" />

Obligaciones prioridad 2: enlaces (7/12)

[13.1] Enlaces claros y únicos (∀ i ∈ (a|area) ($i/text(), $i/@title) → $i/@href como una dependencia funcional) Enlaces claros

<a href="page1.html">Read more</a> ... <a href="page2.html">Read more</a>

Obligaciones prioridad 2: cabecera (8/12)

[13.2] Metadatos para añadir semántica Metadata

Obligaciones prioridad 2: enlaces de cabecera (9/12)

[13.2a] Enlaces de contextualización en la cabecera (head/link/@rel)

<head>
<link rel="prev" href="1.htm" />
<link rel="contents" href="0.htm" />
<link rel="next" href="3.htm" />
</head>

Obligaciones prioridad 2: enlaces de cabecera (10/12)

Next in Opera

Obligaciones prioridad 2: enlaces de cabecera (11/12)

Next in Lynx

Obligaciones prioridad 2: orientación (12/12)

Obligaciones prioridad 3: mapas de cliente, barras de navegación (1/6)

[13.5] Barras de navegación Barras

[1.5] Enlaces alternativos para mapas de imagen de cliente

Obligaciones prioridad 3: acrónimos y abreviaturas (2/6)

[4.2] Declarar la explicación detallada de acrónimos y abreviaturas en su primera ocurrencia (acronym/@title, abbr/@title) Abreviar

Obligaciones prioridad 3: idioma del documento (3/6)

[4.3] Declarar idioma del documento (html/@xml:lang)

Obligaciones prioridad 3: tablas (4/6)

[5.5] Resúmenes de las tablas (table/caption, table/@summary) Textual

<table summary="Explicación sobre la tabla, el significado de sus columnas y filas ..."> <caption>...

Obligaciones prioridad 3: controles editables (5/6)

[10.4] Mantener caracteres visibles en los controles editables

Obligaciones prioridad 3: texto entre enlaces (6/6)

[10.5] Caracteres no enlazados e imprimibles entre enlaces

[<a href="1.html">1</a>] [<a href="2.html">2</a>] [<a href="3.html">3</a>]

Recomendaciones prioridad 1: descripciones largas (1/3)

[1.1a] Descripciones largas para imágenes (img/@longdesc) Textual

Si img/@alt no es suficiente
<img src="pic.gif" alt="Texto alternativo" longdesc="description.html" />

Recomendaciones prioridad 1: descripciones largas (2/3)

[12.2] Descripción larga para los marcos (frame/@longdesc) Textual

Recomendaciones prioridad 1: tablas (3/3)

[5.2] En tablas, asociaciones entre celdas de datos y de cabeceras (th/@axis, th/@scope, td/@headers, thead, tfoot, tbody, col, colgroup)

Un consejo útil: leer la tabla en voz alta como quisiéramos que nos la leyeran por teléfono Teléefono

Recomendaciones prioridad 2: matemáticas y tamaños (1/4)

[3.1] Fórmulas matemáticas:

Entidades HTML, MathML o TeX o otros equivalentes basados en texto mejor que imágenes

Recomendaciones prioridad 2: tamaños (2/4)

[3.4] Unidades de medida Medidas

absolutas (px, mm, cm, pt, ...) → relativas (%, em, ex)

Recomendaciones prioridad 2: consideraciones "mejor que" (3/4)

Recomendaciones prioridad 2: grupos (4/4)

[12.3] Agrupar contenidos (optgroup, fieldset, p, ...)

Agrupar contenidos en partes manejables

Recomendaciones prioridad 3: abreviación de celdas (1/9)

[5.6] Abreviaciones de las cabeceras de tablas (th/@abbr) Acelerado

Si th/text() es demasiado largo

Recomendaciones prioridad 3: orden de tabulación (2/9)

[9.4] Orden de tabulación lógico entre controles (@tabindex)

  • La mejor tabulación suele ser la de por defecto: @tabindex → ∅
  • Los botones de envío → al final del formulario

Recomendaciones prioridad 3: atajos de teclado (3/9)

[9.5] Atajos de teclado para controles importantes (@accesskey) Atajo

Recomendaciones prioridad 3: saltos intra-documento (4/9)

[13.6] Saltar grupos de enlaces

<div title="Navigation Bar"> <span class="skip"> [<a href="#how">Saltar barra de navegación</a>] </span>
[<a href="home.html">Principal</a>]
[<a href="sitemap.html">Mapa del sitio</a>] </div>
<h1 id="how">Formas de usar este Web</h1>

Recomendaciones prioridad 3: varios (5/9)

Recomendaciones prioridad 3: varios (6/9)

Recomendaciones prioridad 3: varios (7/9)

Recomendaciones prioridad 3: consistencia (8/9)

[14.3] Mantener estilos consistentes

Diseño inconsistente

Recomendaciones prioridad 3: estilos (9/9)

  • CSS externo + @class mejor que @style embebido
  • CSS embebido: los mismos errores (redundancia, inconsistencias, ...) que hicimos con HTML reescritos en otra tecnología
  • CSS embebido: conflictos con las hojas CSS del usuario (no las del autor)

¿Otras definidas de forma repetida?

Conclusiones

Conclusiones

¿Cómo hacer que un sitio Web existente sea conforme al WAI?

  1. Validar sus documentos frente a una gramática (DTD, Schema, ...). Cuanto más estricta, mejor.
  2. Analizar la estructura del documento
  3. Separar contenido relevante del marcado orientado a la presentación (requiere semántica)
  4. Reintroducir el contenido relevante dentro de un marcado adecuado
  5. Traducir reglas de presentación a un CSS externo
  6. ¡¡Varias horas para una única página HTML!!
  7. ¡Puede no verse igual que antes!
  8. Evaluar: navegadores, analizadores, gente ...

Evaluadores de accesibilidad

Bibliografía