Mostrando entradas con la etiqueta CSS. Mostrar todas las entradas
Mostrando entradas con la etiqueta CSS. Mostrar todas las entradas

domingo, 4 de octubre de 2020

Etiquetas, atributos y estilos HTML / CSS que no debes usar o debes usar bien

Alambre de espino en una valla

En cada fila de la siguiente tabla encontrarás una etiqueta, atributo o estilo y las observaciones al respecto. Están listados alfabéticamente y agrupados por tipo.

Etiquetas, atributos y estilos que no debes usar o debes usar bien
Etiquetas HTML Observaciones
<b>

El estándar HTML5 mantiene la etiqueta <b> para marcar texto resaltado pero que no transmite mayor importancia, pero en la práctica se sigue usando de manera incorrecta para resaltar contenido relevante en negrita. Se debe separar el diseño de la presentación y evitar las etiquetas no semánticas.

Si quieres destacar una palabra, o conjunto de palabras, importante usa <strong>.

No destaques demasiada cantidad de texto o, de lo contrario, no solo no se destacará sino que producirá fatiga y ralentizará la velocidad de lectura.

<basefont>

Obsoleta. Usa estilos para definir las fuentes.

<blink>

Obsoleta. No se debe provocar parpadeos en pantalla.

<br>

Usa estilos para definir la separación entre líneas y párrafos. Puede usarse en <address>

<center>

Obsoleta. Usa estilos para centrar.

<font>

Obsoleta. Usa estilos para definir las fuentes.

<i>

Puedes usarlo con su verdadero valor semántico, es decir, para marcar una designación taxonómica, un término técnico o un término en otro idioma (sin olvidar acompañarlo de lang). En castellano puede sustituirse por el uso de comillas.

No debe usarse para simular un encabezado. Tampoco debe usarse para enfatizar el texto, para ello se usa en su lugar <em>. No uses <i> con background-image para incluir iconos. Si se quiere formatear el texto en itálica por diseño, se deben usar estilos, pero recuerda que el texto en itálica se lee peor y debería evitarse.

<marquee>

Obsoleta. No provoques movimiento si no puede pararse.

<s>

Su función semántica en el estándar HTML5 es marcar texto que ya no es preciso o relevante. Si lo que quieres es indicar texto corregido, debes usar <del> y <ins>

<strike>

Obsoleto. En HTML 4 definía texto tachado.

<u>

Puede usarse con su verdadero valor semántico en HTML5, es decir, para marcar un texto con una anotación no textual, por ejemplo, con un estilo diferente para reflejar una falta ortográfica:

<p>Un error ortográfico común es <u>llendo</u>

Un error ortográfico común es llendo

Pero no debe usarse para subrayar un texto simplemente para resaltarlo o para simular un encabezado. Solo deberías subrayar de manera estándar los enlaces, pues cualquier texto subrayado se tiende a identificar como enlace.

Atributos HTML Observaciones
align

No uses <p align="center"> sino el estilo CSS text-align

bgcolor

No uses <p bgcolor="#000"> sino el estilo CSS background-color

border

No uses <table border="1"> sino el estilo CSS border

cellspacing

No uses <table cellspacing="1"> sino el estilo CSS border-spacing / border-collapse

cellpadding

No uses <table cellpadding="1"> sino el estilo CSS padding

frameborder

No uses <frame frameborder="1"> sino el estilo CSS border

height

Es mejor que definas el alto en los estilos.

summary

Obsoleto en HTML5. Consultar artículo Descripción de las tablas en HTML5. Alternativa a "summary"

width

Es mejor que definas el ancho en los estilos.

Estilos CSS Observaciones
::after/::before content:

No debes usarlos para incluir contenido informativo en la página, por ejemplo, el asterisco de los campos obligatorios, pues sin CSS o con CSS personales no estará disponible esa información.

outline:0/none

No debes ocultar el foco visual de los elementos de interacción.

Artículos relacionados:

lunes, 27 de julio de 2020

Ocultar contenido visualmente y/o para el lector de pantalla (tabla resumen)

Ejemplos de diferentes maneras de ocultar el contenido con etiquetas y atributos HTML y sus consecuencias. Se pueden consultar en la tabla de este artículo.

En HTML/CSS existen muchas técnicas para ocultar contenido, pero no todas tienen las mismas consecuencias. Este artículo muestra un cuadro resumen que sirve de consulta rápida sobre las consecuencias de usar una u otra técnica para ocultar el contenido.

Las posibles consecuencias de las técnicas para ocultar el contenido son tres:

  • Oculto visualmente- Disponible para el lector de pantalla: unas técnicas ocultan el contenido visualmente, pero este contenido sigue estando disponible para los productos de apoyo. Por ejemplo, es útil para incluir alguna información destinada a clarificar el acceso para los usuarios de lector de pantalla o línea braille (productos de apoyo utilizados fundamentalmente por las personas invidentes). Podría servir para ocultar un texto explicativo en los enlaces: Leer más <span class="ocultovisual">sobre el artículo "Accesibilidad y HTML5"</span>).
  • Oculto visualmente - Oculto para el lector de pantalla: otras técnicas ocultan el contenido visualmente pero también para el lector, por ejemplo, es útil para ocultar un menú plegado.
  • Visible - Oculto para el lector de pantalla: en otros casos, la técnica permite que el contenido se vea pero el lector de pantalla lo ignore y no lo anuncie, por ejemplo, es útil para evitar contenido redundante y repetitivo al usuario de lector de pantalla.

Tabla resumen de las consecuencias de ocultar el contenido con diferentes técnicas

En cada fila de la siguiente tabla se incluye una técnica para ocultar el contenido, indicando si oculta visualmente el contenido y si el lector de pantalla lo anuncia. La respuesta puede ser: Sí (visto verde); No (cruz roja); o una Advertencia (exclamación naranja) que se explicará en una nota.

Consecuencias de ocultar contenido con diferentes técnicas
Técnica para ocultar contenido Tipo de técnica ¿Se ve el contenido? ¿El lector anuncia el contenido?
display:none (1) CSS No No
visibility:hidden (1) CSS No Advertencia
height:0 (2) CSS No Advertencia
aria-hidden=true (3) atributo ARIA Sí No
hidden (3) atributo HTML5 No No
role=presentation / role=none (4) rol ARIA Sí
  • Si es una imagen: No
  • Cualquier otro contenido lo lee como texto plano (5): Advertencia
text-indent:-999em CSS No Sí
clip: rect (...) CSS No Sí
opacity:0 CSS No Sí
transform: scale (0) CSS No Sí

Si necesitáis saber las consecuencias de ocultar el contenido con otra técnica, dejadme un comentario y lo añadiré a la tabla.

Notas de interés sobre el cuadro resumen

(1) display:none oculta el elemento y sus descendientes no solo visualmente, sino también para los lectores de pantalla. Aunque es el comportamiento habitual, no es cierto para todos los lectores de pantalla, en todos los casos y con todos los navegadores. Por su parte, el contenido con el estilo visibility:hidden no se anuncia en muchos contextos, pero la aplicación de esta técnica en determinadas etiquetas y con cierta combinación de navegadores y lectores de pantalla, provoca que el lector sí anuncie el contenido. Como el lector de pantalla no interpreta igual ambas técnicas, se pueden usar combinadas para mayor soporte. 

Artículos de interés: 

(2) Esta técnica se aplicaría por ejemplo así: .element-invisible { height: 0; overflow: hidden; position: absolute;}. Los lectores de pantalla NVDA y Jaws leerán el contenido, pero Voice Over (en dispositivos Apple) no lo lee. Por tanto, es mejor usar otras técnicas con un soporte más homogéneo, por ejemplo, text-indent:-999em si lo que se quiere es ocultar contenido visualmente pero no para el lector de pantalla. 

Artículo de interés:

(3) Artículo de interés: Screen reader support for hidden content

(4) WAI-ARIA 1.1 añade un nuevo role=none que es sinónimo de role=presentation y al que espera sustituir cuando esté ampliamente soportado. Mientras esto no ocurra es preferible seguir usando role=presentation. Artículo relacionado: Novedades WAI-ARIA 1.1).

(5) La consecuencia de aplicar role=presentation es diferente según el elemento al que se aplica. En una imagen (<img role=presentation ...>) el lector ignorará la imagen y no la anunciará. En cualquier otro elemento, lo leerá solo como texto, ignorando la información semántica. Por ejemplo, <h1 role="presentation">Ventas</h1> será anunciado como "Ventas", en vez de como "Ventas encabezado de nivel 1". Este rol es muy útil para aplicarlo a las tablas de presentación.

Artículos relacionados

Créditos: los iconos utilizados son de Freepik

miércoles, 28 de marzo de 2012

Descripción extensa de una imagen: accesible con lector de pantalla y visible sin imágenes activas

El objetivo de este artículo es explicar cómo podemos tener una descripción extensa de una imagen en la propia página, de tal manera que:

  • sea accesible para los lectores de pantalla
  • se visualice cuando la imagen no esté cargada (bien porque tenemos las imágenes desactivadas, bien porque ya no se encuentra disponible, etc.)

Todo ello sin depender del atributo longdesc, que no siempre es soportado, ni de los típicos enlaces [D] junto a la imagen (conocidos como D-Link); y asegurando que no dé problemas cuando se deshabilita el javascript o las CSS.

Este artículo se me ocurrió después de leer el artículo de Steve Faulkner Detecting if images are disabled in browsers, en el cual explicaba cómo podemos detectar por javascript si las imágenes están deshabilitadas o no se han cargado.

Ver la página de ejemplo

Descargar el ejemplo (RAR, 13Kb)

La descarga y uso del ejemplo es completamente libre, pero os agradecería mucho que compartierais mejoras que se os ocurran o problemas que detectéis.

He probado su funcionamiento con NVDA, Explorer 7, Explorer 8, Explorer 9, Firefox 1.5, Firefox 2, Firefox 3, Firefox 11, Chrome 17, Opera 11, Safari 5 (para Windows) y desde una BlackBerry y una iPad. En Explorer 6 no hay problema para visualizar la descripción, pero se ve siempre presente como si el javascript estuviera deshabilitado.

HTML

El código HTML es XHTML 1.0 Strict válido y es el siguiente. En primer lugar tenemos la cabecera:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Ejemplo descripción extensa accesible de imágenes</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta name="author" content="Olga Carreras" />
<meta name="description" content="Descripciones extensas de imágenes accesibles con lectores de pantalla y sin imágenes activas" />

<link href="estilos.css" type="text/css" rel="stylesheet" media="all" />
<script type="text/javascript" src="utils.js"></script>
</head>

Como se ve, estoy llamando a una CSS y a un JS que explico más adelante.

A continuación tenemos el cuerpo de la página:


<body>
<h1>Ejemplo de descripción extensa de una imagen: accesible con lector de pantalla y sin imágenes activas</h1>
<p>Olga Carreras. Ejemplo del artículo <a href="http://olgacarreras.blogspot.com">"Descripción extensa de una imagen: accesible con lector de pantalla y sin imágenes activas"</a></p>

Después de lo que es el título de la página y el enlace al artículo tenemos ya la imagen:


<div>
<img src="razones_uso_tecnologia_accesible.gif" alt="Razones de uso de la tecnología accesible" id="image1" class="images" />
<p><a href="#descripcion" title="Mostrar la descripción de la imagen Razones de uso de la tecnología accesible" id="linkDescripcion" class="oculto">Ver descripción de la imagen</a></p>
</div>

La imagen es un gráfico, por tanto el atributo ALT no es suficiente, necesitamos una descripción detallada la imagen.

Imagen compleja de un gráfico con un enlace bajo la misma Mostrar descripción de la imagen

Os preguntaréis la razón por la cuál he incluido a continuación de la imagen un enlace "Ver descripción de la imagen".

Ese enlace no es necesario puesto que si la imagen no está cargada se verá la descripción detallada y los lectores de pantalla no van a tener problemas para acceder a dicha descripción.

Sin embargo, puede darse el caso de usuarios con vista cansada o que accedan desde un dispositivo móvil y el tamaño de letra de la imagen les resulte pequeño (y no sepan o no puedan hacer zoom de la imagen)

En ese caso les puede ser de utilidad pulsar el enlace para ver la descripción.

El enlace es un ancla al comienzo de la descripción, después veremos que mediante javascript no intrusivo se le ha asignado una función que permite mostrar/ocultar la descripción detallada y personalizar el texto y el TITLE del enlace en función de si se visualiza o no la descripción.


<div id="descripcion" class="visible">
<h2><abbr title="Flechas que señalan a la imagen">< <</abbr> Descripción de la imagen: Razones de uso de la tecnología accesible</h2>
<h3>Por entorno laboral</h3>
<ul>
<li>Con discapacidad severa: 4%</li>
<li>Con discapacidad moderada: 3%</li>
<li>Sin discapacidad: 6%</li>
</ul>
[el resto de la descripción larga, no la pongo aquí toda]
</div>

Como vemos, a continuación se incluye la descripción detallada correctamente maquetada. Esta descripción se oculta una vez cargada la página mediante javascript no intrusivo, por tanto estará disponible tanto sin javascript activo como sin CSS activas.

Con CSS activas, tanto si pulsas el enlace como si no se carga la imagen, la descripción se posiciona a la derecha de la imagen.

Imagen compleja de un gráfico, con un enlace bajo la misma Ocultar descripción de la imagen y la descripción detallada de la imagen al lado de la misma

Por otro lado veremos que la descripción extensa se está ocultando de forma accesible, así que los usuarios que usan un lector de pantalla (podéis probarlo con NVDA) escuchan la descripción a continuación de la imagen y el enlace.


<div class="pie">
<p>Probad a deshabilitar javascript, css o imágenes. Para ver sin imágenes cargadas o sin javascript activo acordaros de recargar la página una vez que los desactivéis.</p>
<p>Para facilitaros verla sin la imagen cargada os dejo una copia de la misma página pero donde se ha escrito mal el nombre de la imagen y por tanto no la encuentra: <a href="descripcion_imagenes_accesibles_sinimg.html">Probar esta página cuando no se encuentra la imagen.</a></p>
</div>
</body>
</html>

En el pie de la página os recuerdo que si deshabilitáis el javascript, las CSS o las imágenes mientras visualizáis la página deberéis recargarla. Para facilitaros comprobar que, efectivamente, cuando no se carga la imagen se muestra por defecto la descripción a su lado, os pongo un enlace a una copia de la página donde he escrito mal el nombre de la imagen para comprobar cómo se ve la página sin la imagen cargada.

Hueco donde debería estar la imagen con un texto en su interior. A su derecha la descripción detalla de la imagen

Como se observa, cuando la imagen no se ha podido mostrar, se ve en el hueco que ocuparía la imagen su ALT, y junto a la imagen aparece por defecto la descripción detallada. Ya no se muestra el enlace "Ver descripción de la imagen" porque no es necesario.

Me parece importante destacar que se ha separado:

  • el contenido: eso es únicamente lo que vemos en la página HTML
  • la presentación: no se especifica ningún estilo en la página, todos están recogidos en la CSS
  • el código javascript: no hay ningún evento, ninguna función, nada que haga sospechar que esta página incluye javascript (salvo la llamada al JS en el HEAD). Todo el javascript, incluso las funciones que se llaman en el onLoad de la página, están definidas de forma no intrusiva.

CSS

La CSS es CSS 2.1 válida. No pongo toda la CSS, sólo aquello que es relevante para el ejemplo.


.oculto{
position:absolute;
left:-999em;
}

Con esta clase general "oculto" oculto aquellos elementos que me interesa:

  • al cargarse la página compruebo si la imagen se ha cargado, en cuyo caso oculto por javascript la descripción. Sin javascript activo, por tanto, la descripción se verá.
  • el enlace "Ver descripción de la imagen" tiene esta clase "oculto" por defecto y una vez cargada la página lo hago visible. De esta manera, sin javascript activo, el enlace no se muestra puesto que ya no es necesario.

La forma de ocultar (mediante posicionamiento fuera de pantalla) permite que los lectores de pantalla sí puedan acceder al contenido oculto, algo que no ocurre con display:none. Más detalles en "Ocultar contenido sin comprometer la accesibilidad ni el posicionamiento de la página"

Otros estilos que me interesa comentar son los de la imagen:


.images{
width:auto;
height:auto;
}
.widthImage1{
width:393px;
height:363px;
}

Por defecto indico que el ancho de las imágenes sea "auto". No puedo poner por defecto el tamaño real de la imagen porque el script se basa en comprobar si el ancho de la imagen es diferente del ancho que debería tener, en cuyo caso es que la imagen no está cargada.

Sin embargo tengo una clase con el tamaño real de la imagen porque en Safari y Chrome, si la imagen no tiene especificado su ancho y alto real, no se muestra su atributo ALT. Así que veremos que en el script, tras comprobar el ancho de la imagen para saber si la imagen está cargada, le aplico la clase "widthImage1", y de este modo en Safari y Chrome vemos su ALT.

JS


function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}

La función "addLoadEvent" es la que nos permite llamar a funciones en el onLoad de la página de forma no intrusiva.

¿Qué funciones estamos llamando? Primero a addLoadEvent(noimage)


var Image1Width=393;
function noimage(){
var objImagen = document.getElementById('image1');
var objDescripcion = document.getElementById('descripcion');
var linkDescripcion = document.getElementById( 'linkDescripcion' );
objDescripcion.className = 'oculto';
linkDescripcion.className = 'visible';
if (objImagen.offsetWidth != Image1Width)
{
objDescripcion.className = 'visible';
objImagen.className = 'widthImage1';
linkDescripcion.className = 'oculto';
}
}

Lo primero que hago, como ya he comentado, es ocultar la descripción larga de la imagen y mostrar el enlace "Ver descripción de la imagen".

A continuación compruebo si el ancho de la imagen es diferente del ancho que debería tener, en cuyo caso es que la imagen no se ha cargado.

En la propuesta de S.Faulkner se comparaba si era igual a 1, pero esto no me funcionaba en todos los navegadores. Por eso lo comparo con el ancho real "393". Es más "sucio" porque no me sirve para todas las imágenes como el compararlo con 1, sino que he de personalizarlo para cada una, pero funciona en todos los navegadores.

Nota: Faulkner lo comparaba con 1 porque no le ponía ALT a las imágenes. Entonces el hueco de la imagen no se adaptaba al ALT y por eso su ancho era 1 cuando no estaba cargada. Como se debe poner ALT tenemos que hacerlo comparándolo con su ancho real. Por otro lado, indicar el ancho y alto de la imagen ayuda a las personas que ven la página sin la imagen cargada a hacerse una idea del tamaño que esta tenía.

En el caso de que la imagen no se haya cargado muestro la descripción, cambio la clase de la CSS aplicada a la imagen (ya he explicado en la CSS que es para que en Chrome y Safari se vea el atributo ALT dentro de la zona de la imagen) y oculto el enlace "Ver descripción de la imagen" porque el enlace ya no es necesario.

La otra función que llamo en el onLoad de la página es la siguiente:


addLoadEvent (function(){
var linkDescripcion = document.getElementById( 'linkDescripcion' );
var objDescripcion = document.getElementById('descripcion');
linkDescripcion.onclick = function(){
if (objDescripcion.className == 'oculto')
{
objDescripcion.className = 'visible';
linkDescripcion.innerHTML="Ocultar descripción de la imagen";
linkDescripcion.title="Ocultar la descripción de la imagen Razones de uso de la tecnología accesible"
}else{
objDescripcion.className = 'oculto';
linkDescripcion.innerHTML="Ver descripción de la imagen";
linkDescripcion.title="Mostrar la descripción de la imagen Razones de uso de la tecnología accesible"
}
}
}
)

Esta función añade al evento "onClick" del enlace "Ver descripción de la imagen" una función que:

  • Si la descripción de la imagen está oculta, al pulsar el enlace la mostraremos. Y a continuación cambiaremos el texto del enlace por su nueva acción "Ocultar descripción de la imagen" y cambiaremos también el TITLE de la imagen para que esté acorde con su nueva función de ocultar la descripción.
  • Si la descripción de la imagen está visible, al pulsar el enlace la ocultaremos. Y a continuación cambiaremos en texto del enlace por su nueva acción "Ver descripción de la imagen" y cambiaremos también el TITLE de la imagen para que esté acorde con su nueva función de mostrar la descripción.

Algo que no he hecho para que se viera más claro lo que hacían las funciones y que se debería hacer para separar el código javascript del texto concreto que queremos personalizar, sería definir esos literales en un fichero diferente de variables para que nos sean más sencillos de modificar. Así en el código sólo incluiriamos variables y no texto concreto.


Os animo ha que dejéis en los comentarios cualquier sugerencia de mejora o problema que detectéis.



Artículos relacionados:

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 (&nbsp;).

    • 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>