Día 22: Usar listas reales (o simularlas de manera correcta)
Suponga que tiene un blogroll de tres vínculos: Slashdot, The Register, y dive into mark. En vez de usar una aburrida viñeta negra, quiere usar una lujosa imagen al lado de cada uno. Como hacerlo. La solución más sencilla es usar etiquetas de <img>
junto a cada vínculo. Esto funciona, y puede hacerse fácilmente más accesible por medio de la adición de texto alt
apropiado para cada imagen.
Sin embargo, puede ir mas allá y usar un marcaje de lista real (etiquetas <ul>
y <li>
), y luego usar CSS para cambiar la aburrida viñeta negra a una imagen. Además de ser "la manera correcta de hacerlo" en algún sentido académico que podría o no importarle, esta técnica tiene beneficios de accesibilidad adicionales.
Les daré ejemplos de ambas técnicas en un instante.
Quién se beneficia?
Marcus se beneficia. Como vimos ayer, Lynx muestra el nombre de archivo de cualquier imagen que no tiene un atributo
alt
.Michael se beneficia. Links nunca muestra imágenes, pero por defecto no muestra nada en lugar de las imágenes si estas no poseen texto
alt
. Esto era aceptable ayer, cuando queríamos ignorar las imágenes espaciadoras, pero hoy queremos asegurarnos de que exista alguna indicación de que esto es una lista, así que necesitamos el textoalt
.También, cuando Michael navega con las imágenes desactivadas, Opera muestra el texto
alt
en lugar de un bloque perteneciente a la "imagen faltante". Y si usa la técnica avanzada, Opera lo hará mucho mejor, ya que se revierte y muestra la viñeta negra tradicional en lugar del bloque de la "imagen faltante".Jackie se beneficia. Como vimos ayer, JAWS lee el nombre de archivo de cualquier imagen que no tenga un atributo
alt
. Los vínculos terminan perdiéndose en un mar de nombres de archivos sin importancia. Esto es lo que escucha Jackie:fancy punto punto gif vínculo slashdot, fancy punto punto gif vínculo the register, fancy punto punto gif vínculo dive into mark
Proveer un asterisco como texto
alt
ayuda enormemente. JAWS notará que la imagen se está usando como una viñeta, y no la anunciará. Sin embargo, Home Page Reader anunciará el asterisco explícitamente, y los usuarios escucharan esto:asterisco vínculo slashdot, asterisco vínculo the register, asterisco vínculo dive into mark
Usar el marcaje de lista real es lo mejor. Ya que toda la presentación visual está en las declaraciones de CSS, ninguna abarrota la página, y tanto JAWS como Home Page Reader leen simplemente su lista por lo que es: una lista. Ahora se escucharía así:
vínculo slashdot, vinculo the register, vinculo dive into mark
Como hacerlo
Si tiene un blogroll que se ve así:
<img src="/images/fancydot.gif" width="8" height="8"> <a href="http://www.slashdot.org/">Slashdot</a> <br>
<img src="/images/fancydot.gif" width="8" height="8"> <a href="http://www.theregister.co.uk/">The Register</a> <br>
<img src="/images/fancydot.gif" width="8" height="8"> <a href="http://diveintomark.org/">dive into mark</a> <br>
Debe proveer atributos alt
para todas las imágenes de viñetas. Use un asterisco como texto alt
, para simular como se vería la lista si estuviera usando marcaje real (Para prevenir que esto se muestre como una información de herramientas en los navegadores visuales, debería proveer también un atributo title
vacío).
<img alt="*" title="" src="/images/fancydot.gif" width="8" height="8"> <a href="http://www.slashdot.org/">Slashdot</a> <br>
<img alt="*" title="" src="/images/fancydot.gif" width="8" height="8"> <a href="http://www.theregister.co.uk/">The Register</a> <br>
<img alt="*" title="" src="/images/fancydot.gif" width="8" height="8"> <a href="http://diveintomark.org/">dive into mark</a> <br>
Como hacerlo: avanzado
La técnica avanzada (y preferida) usa CSS para definir la imagen que se va a usar como viñeta en la lista.
<style type="text/css">
ul.blogroll {
list-style: url(/images/fancydot.gif) disc;
}
</style>
Luego en su plantilla, puede escribir su lista usando marcaje real:
<ul class="blogroll">
<li><a href="http://www.slashdot.org/">Slashdot</a></li>
<li><a href="http://www.theregister.co.uk/">The Register</a></li>
<li><a href="http://diveintomark.org/">dive into mark</a></li>
</ul>
Resultados:
- Los navegadores modernos mostraran la imagen como la viñeta de la lista.
- Los navegadores con imágenes desactivadas mostrarán la monótona viñeta negra.
- El Netscape 4 mostrará siempre la monótona viñeta negra.
- Los navegadores exclusivamente de texto ignorarán siempre el CSS, así que mostrarán la lista de la manera en que muestran las listas normalmente (usualmente usando un asterisco como viñeta para la lista).
Comentario: listas sin viñetas
Otra forma común de crear un listado de vínculos es sin usar imágenes de ningún tipo, solo un conjunto de vínculos, posiblemente alineados a la derecha, así:
<div align="right">
<a href="http://www.slashdot.org/">Slashdot</a><br>
<a href="http://www.theregister.co.uk/">The Register</a><br>
<a href="http://diveintomark.org/">dive into mark</a><br>
</div>
Esto también se puede hacer con CSS y con marcaje de lista real:
<style type="text/css">
ul.blogroll {
list-style: none;
text-align: right;
}
</style>
O, si quiere vínculos alineados a la izquierda, puede hacerlo así:
<style type="text/css">
ul.blogroll {
list-style: none;
margin-left: 0;
padding-left: 0;
}
</style>
De cualquier modo, el marcaje de la lista no ha cambiado en relación con el del ejemplo anterior:
<ul class="blogroll">
<li><a href="http://www.slashdot.org/">Slashdot</a></li>
<li><a href="http://www.theregister.co.uk/">The Register</a></li>
<li><a href="http://diveintomark.org/">dive into mark</a></li>
</ul>
La línea "list-style: none
" suprime la viñeta negra habitual de los navegadores visuales. Esto funciona en todos los navegadores, inclusive en Netscape 4. Gracias a Tobias Schmidt por recordarme esta técnica.
Lectura añadida
- Tobias Schmidt: Estilizar listas con CSS (Styling lists with CSS), artículo en inglés.
- W3Schools: Propiedades relativas a las listas en CSS (CSS List Properties), artículo en inglés.
- Eric Meyer: Listas y Sangría (Lists and Indentation), artículo en inglés.
- Eric B. Bednarz: Manipular las Propiedades Margen y Padding de Listas en CSS (Manipulating Margin and Padding of Lists With CSS), artículo en inglés.