jueves, 9 de julio de 2009

25 reglas para hacer CSS accesibles

o "25 Normas de accesibilidad relativas a las CSS".

"Técnicas CSS para las Pautas de Accesibilidad al Contenido en la Web 1.0" del W3C:


Este documento describe unas técnicas para la creación de hojas de estilo en cascada (CSS) accesibles.
[...]
Aunque las técnicas descritas en este documento ayudarán a crear CSS conforme a las "Pautas de Accesibilidad al Contenido en la Web 1.0", estas técnicas no garantizan la conformidad y no son la única manera de crear contenidos conformes.

[Cita literal de dicho documento]


Este artículo recoge un resumen de las técnicas descritas. Se puede consultar el original para profundizar en cada punto.



  1. Use un número mínimo de hojas de estilo en su sitio.

  2. Use hojas de estilo vinculadas en vez de estilos incrustados (directamente en las etiquetas) y evite hojas de estilo incrustadas (directamente en la página).

  3. Si tiene más de una, use el mismo nombre de clase ("class") para el mismo concepto en todas las hojas de estilo.

  4. Use la unidad "em" para fijar el tamaño de letra.

  5. Utilice unidades de medida relativas y porcentajes. Utilice medidas absolutas de longitud sólo cuando las características físicas del medio de salida sean conocidas, por ejemplo con imágenes de mapa de bits.

  6. Proporcione un equivalente textual para cualquier imagen o texto importantes generados por la hoja de estilo (por ejemplo, mediante las propiedades "background-image", "list-style", o "content").

  7. CSS2 permite a los usuarios acceder a representaciones alternativas de los contenidos especificadas en valores de los atributos cuando se emplean juntos los siguientes:

    • selectores de atributos.

    • la función attr() y la propiedad "content"

    • los seudo-elementos :before (antes) y :after (después)


  8. Asegúrese de que todo contenido importante aparezca dentro del objeto del documento. El texto generado por las hojas de estilo no forma parte del código fuente del documento y no estará disponible para las ayudas técnicas que acceden al Modelo de Objeto del Documento Nivel 1 ([DOM1]).

    CSS2 incluye diferentes mecanismos que permiten generar contenido desde la hoja de estilo:

    • Los seudo-elementos :before y :after y la propiedad "content". Cuando éstos se emplean conjuntamente, permiten la inserción de marcadores antes o después del contenido del elemento.

    • Las propiedades "cue", "cue-before", y "cue-after". Estas propiedades permiten a los usuarios reproducir un sonido antes o después del contenido de un elemento.


  9. Especifique siempre un tipo de letra genérico por defecto.

  10. Use las siguientes propiedades CSS2 para controlar la información de la fuente: "font", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", y "font-weight", en lugar de los siguientes elementos y atributos de tipo de letra desaconsejados en HTML: FONT, BASEFONT, "face", y "size".

  11. Si tiene que usar los elementos HTML para controlar la información sobre el tipo de letra, utilice BIG y SMALL, que no están desaconsejados.

  12. Las siguientes propiedades CSS2 se pueden emplear para dar estilo al texto:

    • Mayúsculas/minúsculas: "text-transform" (para mayúsculas, minúsculas y primera letra mayúscula).

    • Efectos de sombra: "text-shadow"

    • Subrayado: "text-decoration".


  13. No use los elementos BLINK o MARQUEE. Estos elementos no aparecen en ninguna especificación W3C para HTML (es decir, son elementos no estándares)

    Si se emplea contenido parpadeante (por ejemplo, un titular que aparece y desaparece a intervalos regulares), proporcione un mecanismo para detener el parpadeo. Con CSS, "text-decoration: blink" producirá el efecto de parpadeo y además permitirá al usuario detener el efecto desactivando las hojas de estilo o redefiniendo la regla en una hoja de estilo de usuario.

  14. Utilice hojas de estilo para dar estilo al texto, mejor que representar el texto con imágenes. Usar texto en lugar de imágenes significa que la información estará disponible para un mayor número de usuarios y permitirá a los usuarios redefinir los estilos del autor y cambiar los colores o los tamaños de letra más fácilmente.

    Si es necesario utilizar un mapa de bits para crear un efecto de texto (letra especial, transformación, sombras, etc.) el mapa de bits debe ser accesible.

  15. Las siguientes propiedades CSS2 pueden ser usadas para controlar el formateo y posición del texto:

    • Sangría: "text-indent". No utilice BLOCKQUOTE o cualquier otro elemento estructural para hacer sangrías en el texto.

    • Espaciado de letras o palabras: "letter-spacing", "word-spacing". Por ejemplo, en lugar de escribir "H O L A" (que los usuarios generalmente reconocen como la palabra "hola", pero que un lector de pantalla leería como letras independientes) los autores pueden crear el mismo efecto visual aplicando a "HOLA" la propiedad "word-spacing". Los textos sin espacios serán transformados en discurso más fácilmente.

    • Espacio en blanco: "white-space". Esta propiedad controla la interpretación del espacio en blanco del contenido de un elemento.

    • Dirección del texto: "direction", "unicode-bidi".

    • Los pseudoelementos: first-letter y :first-line permiten a los autores hacer referencia a la primera letra o línea de un párrafo del texto.


  16. Use números en vez de nombres, para especificar colores.

    Use estas propiedades CSS para especificar colores:

    • "color", para el color de primer plano del texto.

    • "background-color", para el color de fondo.

    • "border-color", "outline-color" para colores de bordes.

    • Para colores de vínculos, haga referencia a las pseudo-clases :link, :visited, y :active.


  17. Asegúrese de que los colores de primer plano y de fondo tienen buen contraste. Si especifica el color de primer plano, siempre debe especificar también el color de fondo (y viceversa).

  18. Asegúrese de que la información no se transmite sólo a través del color.

  19. Emplee UL para listas sin ordenar y OL para las ordenadas (por ejemplo, utilizar marcadores de forma apropiada) conjuntamente con CSS para proporcionar indicaciones contextuales.(1)

  20. Hasta que CSS2 sea ampliamente utilizada por las aplicaciones de usuario o éstas permitan al usuario controlar la interpretación de las listas a través de otros medios, los autores deberían considerar el proporcionar pistas contextuales en las listas anidadas no numeradas. (Ver ejemplo en el documento original)

  21. Los contenidos deben ser maquetados, ubicados, colocados en capas y alineados mediante hojas de estilo (sobre todo mediante las propiedades CSS de float y colocación absoluta) y no mediante tablas:

    • Las propiedades "text-indent", "text-align", "word-spacing" y "font-stretch", permiten a los usuarios controlar el espaciado sin añadir espacios adicionales. Utilice 'text-align:center' en lugar del elemento desaconsejado CENTER.

    • Con las propiedades 'margin', 'margin-top', 'margin-right', 'margin-bottom' y 'margin-left', los autores pueden crear espacios en los cuatro lados del contenido de un elemento, en lugar de añadir espacios de no separación ( ).

    • Con las propiedades "float", "position", "top", "right", "bottom" y "left", el usuario puede controlar la posición visual de casi cualquier elemento con independencia de donde aparezca el elemento en el documento. Las propiedades de ubicación pueden ser usadas para crear notas marginales (que se numerarán automáticamente), barras laterales, efectos similares a los marcos, encabezamientos y pies simples y otras más.

    • La propiedad "empty-cells" permite a los usuarios dejar vacías celdas de tablas y poder proporcionarles bordes en la pantalla o en papel. Una celda de datos que debe estar vacía no debería ser llenada con un espacio en blanco o un espacio "non-breaking" sólo para lograr un efecto visual.


  22. Proporcione textos equivalentes para todas las imágenes, incluyendo las imágenes invisibles o transparentes. Si los diseñadores de contenido no pueden usar hojas de estilo y deben utilizar imágenes invisibles o transparentes (por ejemplo, con IMG) para diseñar con imágenes en las páginas, deberían especificar alt="" para ellas.

  23. Utilice las hojas de estilo para crear líneas y bordes. Las líneas y bordes pueden transmitir la noción de "separación" a los usuarios que pueden ver, pero este sentido no puede ser deducido fuera de un contexto visual.

    Utilice las propiedades CSS para especificar los estilos de los bordes:

    • "border", "border-width", "border-style", "border-color".

    • Para las tablas, "border-spacing" y "border-collapse".

    • Para contornos dinámicos, "outline", "outline-color", "outline-style" y "outline-width".


  24. Asegúrese de que la presentación del contenido es comprensible cuando no se aplican hojas de estilo. Los autores deberían diseñar siempre documentos que tengan sentido sin hojas de estilo (por ejemplo, el documento debería escribirse en un orden "lógico") y entonces aplicar hojas de estilo para lograr efectos visuales.

  25. Estudie la necesidad de utilizar propiedades auditivas de CSS2, las cuales proporcionan información para usuarios invidentes y usuarios de navegadores de voz de manera parecida al tipo de letra que proporciona información visual.

    Las siguientes propiedades forman parte de hojas de estilo en cascada de CSS2.

    • "volume" controla el volumen del texto hablado.

    • "speak" determina si el contenido se pronunciará y, en caso afirmativo, si se debe deletrear o leer como palabras.

    • "pause", "pause-before", y "pause-after" controla las pausas antes y después de anunciar el contenido. Permite a los usuarios separar los contenidos para mejorar la comprensión.

    • "cue", "cue-before", y "cue-after" especifican un sonido que se reproducirá antes y después del contenido, lo que puede ser valioso para la orientación (parecido a una imágen visual).

    • "play-during" controla los sonidos de fondo durante la presentación del elemento (parecido a un imagen de fondo).

    • "azimuth" and "elevation" proporcionan una dimensión al sonido, lo que permite a los usuarios distinguir las voces, por ejemplo.

    • "speech-rate", "voice-family", "pitch", "pitch-range", "stress", y "richness" controlan las cualidades de los contenidos hablados. Cambiando estas propiedades para diferentes elementos, los usuarios pueden ajustar con detalle la presentación sonora-auditiva de los contenidos.

    • "speak-punctuation" y "speak-numeral" controlan la forma de decir los números y la puntuación, lo que afecta la calidad de la experiencia para la navegación por voz.

    • la propiedad "speak-header" describe cómo se debe decir la información sobre los encabezados antes de una celda de tabla.


  26. Cree distintas hojas de estilo para adaptar la presentación del documento a diferentes dispositivos de salida (Braille, sintetizadores de voz o dispositivos TTY, pantalla, móvil, etc.) mediante los "tipos de medios" de CSS2 (empleados con las reglas @media) Las reglas "@media" también pueden reducir los tiempos de descarga porque permiten a las aplicaciones de usuario ignorar reglas inapropiadas.



Notas
(1) La siguiente hoja de estilo CSS2 muestra cómo especificar números compuestos para listas anidadas creadas tanto con elementos UL como OL. Los ítems están numerados como "1", "1.1", "1.1.1", etc.

Ejemplo.

<style type="text/css">
ul, ol { counter-reset: item }
li { display: block }
li:before {
content: counters(item, ".");
counter-increment: item;
}
</style>

12 comentarios :
Jorge dijo...

En general son pautas razonables, pero yo puntualizaría que la mayoría son para optimizar el uso de las hojas de estilo y garantizar la compatibilidad, e incluso, para evitar barreras de accesibilidad, pero no para hacer más accesibles las CSS (las CSS no son accesibles ni inaccesibles pues sólo aportan estilo. Pueden afectar en la accesibilidad, pero no pueden ser accesibles porque no deben tener contenido). Las que se relacionan directamente con la accesibilidad son unas pocas (unidades relativas, contrastes, etc.). Cosas como que no se utilice determinado marcado, o que se empleen listas no serían reglas para hacer CSS accesibles, sino los documentos.
A lo que voy es que creo que titular el artículo como "25 reglas para hacer css accesibles" no ha sido lo más acertado.
Además creo que algunas de las reglas están un poco forzadas para aumentar el número. Me refiero a casos como la 4 y la 5, que se resumen en utilizar unidades relativas, o la 6, que si afirmar que hace falta incluir equivalente textual en el documento, está de forma indirecta aceptando el que en la CSS haya contenido.
Un saludo

Jorge dijo...

Tengo que corregir un error en mi comentario. Hacia el final, donde puse "...que si afirmar que hace falta incluir..." en realidad es "que al afirmar que hace falta incluir...".

Otro saludo

Marcos Calatayud dijo...

Ciertamente Jorge tiene razón. Utilizar CSS para la visualización de la página, (separando el contenido de ésta) es ya una muestra de accesibilidad.

Roberto dijo...

Hola, me gusta el artículo. Pero veo muchas cosas que no son soportadas por todos los navegadores, y su uso es limitado o casi desierto.

También le cambiaría el titulo al post ya que hablas de muy buenas prácticas de HTML tambien no sólo CSS...

Me gusta el artículo!

julio dijo...

Muy buenas pautas, tienes razon tiene que ser usable y accesible asi como toda web.
Que opinas de la pagina que he creado Insotec
espero tus criticas constructivas :).

Olga Carreras dijo...

Hola, primero gracias por vuestros comentarios. Lo segundo supongo que queda claro que simplemente resumo un documento del W3C.

Este documento comineza así "Este documento describe unas técnicas para la creación de hojas de estilo en cascada (CSS) accesibles"

de ahí el título del artículo, que estoy de acuerdo, hubiera sido mejor algo como "normas de accesibilidad relativas a las CSS", lo voy a añadir al título.

"Además creo que algunas de las reglas están un poco forzadas para aumentar el número", dice Jorge

El título lo puse después de redactar el artículo, no antes, no tengo mayor interés en que salgan más o menos. Me hubiera dado igual llamarlo 23 o 28 reglas... :-)

"Me refiero a casos como la 4 y la 5, que se resumen en utilizar unidades relativas"

Las he separado, además de porque en el original están separados, porque no hablan de lo mismo. La primera habla del tamaño del texto, la segunda de otros elementos.

"la 6, que si afirmar que hace falta incluir equivalente textual en el documento, está de forma indirecta aceptando el que en la CSS haya contenido."

En el documento original pone como ejemplo:

div.example:after {
content: Fin Ejemplo
}

Así, que sí, el documento del W3C (que repito, me limito a reproducir) acepta contenido en la CSS, algo que yo desde luego no recomendaría personalmente, a no ser que esos textos no los tengas directamente en la CSS y los recojas de un fichero de literales.

con Marcos estoy de acuerdo, evidentemente lo primero es tener una CSS :)

Con Roberto discrepo, todos los puntos están relacionados con CSS y están tomados del original.

lush dijo...

"Proporcione textos equivalentes para todas las imágenes, incluyendo las imágenes invisibles o transparentes. Si los diseñadores de contenido no pueden usar hojas de estilo y deben utilizar imágenes invisibles o transparentes (por ejemplo, con IMG) para diseñar con imágenes en las páginas, deberían especificar alt="" para ellas."

Disculpa me pero esto me parece un poco estupido - esta traducido incorectamente desde W3C - si una imagen no transmite ningun mensaje y no esta util de ninguna manera, no debe tener texto equivalente. Deja el alt tag vacio.

Por ejemplo, como habian antes las imagenes spacer.gif - imaginate teniendo todas un alt="imagen inutil" - como seria? Una pagina con 100 alt tags "imagen inutil"?

Asi que, por favor, utilice alt tag solo cuando una imagen transmite un mensaje. Si no, dejalo sin texto.

De todos modos, un articulo interesante.

Olga Carreras dijo...

Estás diciendo lo mismo que la norma, las imágenes decorativas deben ir en la CSS, pero si se ponen en la página deben tener un alt, y ese alt debe ser "".

Desarrollo web dijo...

Totalmente de acuerdo, a veces un piensa que está siendo muy exagerado cuando las va implementando ;) pero repercute directamente en el mantenimiento y ampliación de la web.

A mi me resulta muy útil los plugings de validación de Firefox.

informacion ssl dijo...

Un listado largo que finalmente sirve como repaso para quien de forma cotidiana emplea HTML-CSS y está consciente del tema de validación. Creo que para el usuario avanzado de ambos lenguajes cabe más el tema de práctica y experiencia, sobre todo en el tema de compatibilidad con navegadores y la solución de problemas cotidianos. Sobre el título, propiamente no serían accesibles, más bien válido o conforme a la norma. Se agradece el aporte. Un saludo-

Fuentes dijo...

Soy una obsesa de la limpieza en las hojas de estilo, me gusta que estén clarísimas. Me ha gustado lo que has contado, alguna cosa no la sabía y creía que si eran estándares.

Un saludo!
Alicia

Angel Benites dijo...

Gracias por la recomendaciones de sus reglas, hay muchas que debo implementar... ultimamente estoy usando Less que se me hace mucho mas fácil, accesible y ordenado cuando trabajamos una página web desde cero.

Publicar un comentario en la entrada