Armonía | En definitiva...

Reemplazo accesible de textos por imágenes

Muchas veces, principalmente por motivos de diseño, necesitamos sustituir un pequeño párrafo, o un título, o cualquier pieza de texto por una imagen. Como ya sabemos, si la imagen no añade información al documento, lo ideal es colocarla mediante CSS, ya que dicha imagen formará parte del aspecto visual de la página y no de su contenido.

Para conseguir esto hay muchas técnicas, la primera en hacerse "popular" fue la ya conocidísima FIR, (Fahrner Image Replacement), que consiste en ocultar mediante CSS con un display:none; un elemento span contenido dentro de un elemento en bloque, normalmente un div, y posteriormente colocarle a dicho div la imagen que queramos a modo de background.

Esta técnica tiene algunos problemas, algunos más importantes que otros, pero en cuestión de accesibilidad los dos más importantes son dos. El primero es que los lectores de pantalla no leerán el texto, ya que lo hemos ocultado mediante display:none;, y la mayoría de lectores obvian los elementos ocultados de esta manera. El segundo, y no menos importante, es que en escenarios donde el navegador tenga activado el soporte CSS, pero desactivado el soporte para las imágenes, (o que por cualquier motivo la imagen no se haya podido cargar), no se mostrará nada, ya que el texto está oculto totalmente mediante CSS.

Aparte de esta técnica existen otras muchas, (Dave Shea hizo un gran resumen de ellas), cada cual con sus ventajas y sus beneficios, aunque la mayoría de ellas fallan en lo mismo que lo último que hemos comentado sobre FIR, cuando la imagen no se carga, el texto no puede verse.

Es por esto que, según mi modesta opinión, la mejor forma de conseguir un reemplazo de textos por imágenes de manera accesible es jugando con el posicionamiento de los elementos, y luego colocar un orden de aparición correcto mediante z-index. Esto que puede sonar un tanto confuso en realidad no lo es tanto. Veamos cómo conseguirlo.

Comenzaremos por el marcado XHTML. Para poder usar esta técnica vamos a necesitar tres elementos, (esto nos obligará muchas veces a tener que usar un span "extra" muy poco elegante, pero es el precio que hay que pagar). En nuestro caso vamos a usar un párrafo, un enlace, y el feo span:

<p class="reemplazado">
	<a href="#" title="Enlace de ejemplo"><span>¡Voy a ser sustituido!</span></a>
</p>

Para conseguir el reemplazo vamos a tener que jugar con el posicionamiento, tanto relativo como absoluto, de alguno de nuestros elementos. Lo primero que vamos a hacer es precisamente eso, posicionar y colocar nuestra imagen. Para ello vamos a colocar lo siguiente a nuestros elementos:

p.reemplazado {
	position: relative;
}

p.reemplazado a {
	background: url(imagen.png) no-repeat 0 0;
	display: block;
	height: 200px;
	width: 200px;
}

p.reemplazado a span {
	position: absolute;
}

Lo que hemos hecho ha sido lo siguiente. Primero hemos posicionado nuestro párrafo de manera relativa, lo que significa que vamos a poder posicionar sus elementos hijos, (en este caso el enlace), de forma absoluta pero desde la posición del párrafo y no de la ventana. Suena un poco complicado, ¿verdad? Para entender mejor las propiedades de posicionamiento de CSS recomiendo leer este tutorial de BarelyFitz Design.

Lo siguiente que hemos hecho ha sido colocar la imagen en nuestro enlace. Nuestra imagen tiene 200 pixels de alto y 200 de ancho, por lo que le hemos especificado esas medidas al enlace, y para que tengan efecto lo hemos transformado en un elemento en bloque, ya que por defecto los enlaces son elementos en línea. Una vez hecho esto solo nos queda colocar la imagen de fondo en nuestro enlace con la propiedad background.

Ahora le toca el turno a nuestro feo span. A este lo que le hemos hecho es simplemente posicionarlo de forma absoluta con position:absolute;. La posición top y left vamos a dejarla intacta, aunque podríamos modificarla al gusto siempre que no hagamos que se salga de las medidas de nuestra imagen.

Si probamos esto veremos como la imagen esta colocada perfectamente, y nuestro texto esta situado por encima de la imagen... Mmmm, un momento, ¡esto no es lo que queríamos! ¡Me han timado! A ver, veamos, ¿qué puede estar ocurriendo? ¡Ah, ya veo, falta el "toque mágico"!

p.reemplazado {
	position: relative;
	z-index: 1;
}

p.reemplazado a {
	background: url(imagen.png) no-repeat 0 0;
	display: block;
	height: 200px;
	width: 200px;
}

p.reemplazado a span {
	position: absolute;
	z-index: -1;
}

Ahí está lo importante del asunto, usar los z-index para determinar el orden de visualización de los elementos posicionados. Con esto lo que hemos hecho es decir que nuestro feo span con el texto quede por detrás del párrafo, y consecuentemente de la imagen que hemos usado.

Por último cabría recordar que podemos, (o debemos, según se mire), estilizar el texto del enlace, para que, dado el caso, se muestre de una manera agradable a aquellos usuarios que no puedan ver la imagen.

A mi modo de ver esta es la mejor forma de conseguir un reemplazo de textos por imágenes, aunque usemos un span tan poco elegante. Es una manera sencilla y accesible de conseguirlo, aunque bien es cierto que no es válida para todas las circunstancias, pero bueno, hay muchas técnicas estupendas por ahí, y si no para eso están los expertos, para conseguir técnicas nuevas.

Avisos, (trackbacks)

Los avisos para este post están cerrados.

Comentarios

[ Hacer un Comentario ]

  1. #551 - Escrito por stan, el Miércoles 19 Abril 2006 a las 23:00 CET.

    Muy interesante articulo, lo he leido de principio a fin. Hace poco comence a realizar un sitio con la h3 y la tecnica del display: none.

    Esta tecnica que mencionas no ocaciona problemas con elementos float?

    Bueno, una felicitacion, de hecho imprimi el articulo, hay unos comentarios adicionales a la impresion que ya te estare haciendo por mail.

  2. #553 - Escrito por Jorge, el Miércoles 19 Abril 2006 a las 23:29 CET.

    Lo cierto es que no veo yo que exista un método perfecto para estas cosas.

    La pena de tu método es que si desactivo las imágenes en mi navegador (Ffox) no puedo ver el título de tu blog que veo que aplica la técnica que comentas.

    Yo por ahora me decanto por poner simplemente la imagen con un alt que contenga el texto y así sí que puedes leer el texto aunque desactives las imágenes. (supongo que un lector de pantalla también lo cazará). Pero tampoco es perfecto, porque pierdes el marcado y con él la jerarquía.

    Lo ideal sería que uno pudiera usar la tipografía que quisiera para maquetar y nos ahorraríamos el tener que hacer estas piruetas, pero en todo el tiempo que llevo mirando este tema y no hay nada sólido más allá de algún intento fallido como el que hizo Microsoft con Weft. (www.microsoft.com/typogra...

    En fin, que me lo apunto en del.icio.us y si encuentro alguna otra técnica con tan buena pinta como esta ya te avisaré.

  3. #555 - Escrito por Juan G. Hurtado, el Jueves 20 Abril 2006 a las 08:14 CET.

    En realidad aquí en el blog no he usado esa técnica, por eso el título no se lee con las imágenes desactivadas.

    Otro problema de esta técnica ocurre cuando la imagen que queremos usar tiene partes transparentes, ya que entonces el texto que está detrás se vería por algún lado, y quedaría bastante mal.

    Con respecto al tema de los float, pues sinceramente tendría que estudiarlo. Cuando le eche un ojo si eso actualizo el artículo y comento algo más :)

    Un saludo!

  4. #556 - Escrito por Juan G. Hurtado, el Jueves 20 Abril 2006 a las 08:17 CET.

    Por cierto, se me ha olvidado comentar que yo no usaría esta técnica simplemente para poder usar otras tipografías. El texto no cambiaría de tamaño, etc. Es un gran problema del diseño web, el tema de las tipografías, pero no creo que la solución sea usar imágenes.

    Saludos.

  5. #557 - Escrito por Jorge, el Jueves 20 Abril 2006 a las 14:08 CET.

    Pues mirando el HTML parecía que sí la usabas. Si se ven los textos sin imágenes cojonudo.
    Sólo para usar tipografía no, pero en gran medida suele ser la aplicación que tienen estas cosas, si no ¿para qué meter una imagen que reemplaza un texto? con un logotipo por ejemplo no tienes más remedio, pero para poner bonitos h2, h3... suele aplicarse mucho y poder usar tipografía resolvería el problema la mayoría de las veces, por eso lo decía.

    Saludos.

Hacer un comentario

Los comentarios para este post están cerrados.

Búsqueda

Acerca de este blog

Armonía es el blog personal de Juan G. Hurtado, (C. V.). Aquí se tratarán muchos temas, pero sobre todo los relacionados con la programación, la tecnología, el desarrollo y los estándares en la World Wide Web.

Si quieres puedes visitar también las galerias de fotos guardadas en su cuenta Flickr, o su colección de enlaces en del.icio.us.

Velas en la oscuridad Mano del autor del blog en blanco y negro Trozo del paisaje desde la ventana del autor del blog Palma de la mano del autor del blog en blanco y negro

Lectura

CSS Mastery, de Andy Budd
Portada del libro Bulleproof Web Design
Muy buen libro, escrito por Andy Budd en el que nos muestra un repaso muy bien detallado por infinidad de técnicas ingeniosas para conseguir que nuestras hojas de estilo "hagan magia"
[Leer revisión]
Bulletproof Web Design, de Dan Cedelhorm
Portada del libro Bulleproof Web Design
Un libro genial en el que Dan Cedelhorm nos enseña cómo blindar nuestras páginas para evitar que se "rompan" ante configuraciones no habituales de los navegadores de los visitantes, (aparte de otras muchas cosas)
[Leer revisión]
Agile Web Development With Rails, de Dave Thomas y David Heinemeier
Portada del libro Agile Web Development With Rails
Una perfecta introducción a Ruby on Rails, el framework de desarrollo Web que está causando furor en estos momentos...
[Leer revisión]

Contacto

  • e-Mail: juan.g.hurtado@gmail.com
  • Jabber: juan.g.hurtado@jabberes.org
  • Skype: juan.g.hurtado
  • Messenger: the_micro_cuts@hotmail.com