6 de Julio, 2005

Ocultando capas para mostrar información

El otro día me encontré con el problema de mostrar demasiada información, que necesariamente tenía que proporcionar al usuario.

En este caso no era una opción hacer una vista de detalle del elemento, así que se me ocurrió que esos datos de consulta rápida se pudieran ver de ser necesario, pero que por defecto no molestaran haciendo la página demasiado larga.

Nos vamos a valer de CSS para meter el contenido en una capa 'invisible' de tamaño 0 pixeles (para que no se vea y no ocupe espacio), y con una sencilla función en Javascript cambiaremos entre ese estado y 'visible' con tamaño igual al elemento que contiene la capa encapsulada.

Veamos un ejemplo encapsulando una zona de código: [ mostrar / ocultar ]

La capa contenedora tiene que tener las propiedades: visibility:hidden y height:0px (o no si queremos que por defecto la zona sea visible).

Además hay que tener en cuenta que es el contenido lo que nos indica el tamaño de la capa contenedora, así que será necesario que empleemos otra capa extra para agrupar el contenido en caso de que sean varios elementos. En el ejemplo es solo un elemento pre, así que no ha sido necesario.

La verdad es que es muy sencillo, aunque no sé si es la mejor forma de hacerlo ;).

Funciona en Firefox, y no veo porqué no debería funcionar en otros navegadores modernos (a ver si los lectores de este blog me lo confirman :P).

Actualización: Como me cuentan aquí, una forma más límpia de hacerlo sería usando display con none y block (o inline, según corresponda).

Anotación por Juan J. Martínez, clasificada en: css, javascript.

Hay 5 comentarios

Gravatar

Además es bastante rápido...
:)

por GVenom, en 2005-07-06 09:58:47

Gravatar

Hola,

Para ocultar el contenido de una etiqueta desde CSS y que este no ocupe espacio en la página la mejor opción es utilizar la propiedad CSS "display" con el valor "none".

Para restaurar su contenido basta con volverla a establecer a "block" o "inline" dependiendo del caso.

Ej:

#contenido0 {
display: none;
}

document.getElementById('contenido'+item).style.display='block';

Esto es la idea básica. Lo mejor para hacer estas cosas es utilizar javascript no intrusivo y diferentes clases CSS para los cambios de estado.

Aquí te dejo un enlace: http://www.onlinetools.org/articles/unobtrusivejavascript/

por O Doutor, en 2005-07-06 10:59:01

Gravatar

c881: Gracias O Doutor, ya me imaginaba yo que podía no ser la mejor forma :D Recordaba haber hecho esto con un timer para hacer aparecer la capa progresivamente (modificando el valor de height), por eso no busqué si existía un atributo más acorde con el problema.

Respecto al javascript no intrusivo y el uso de clases, estoy de acuerdo. En el caso en el que he usado este código se trata de una solución a medida, así que el uso de Javascript es requisito de la aplicación y punto ;)

por Juanjo, en 2005-07-06 11:51:36

Gravatar

Suponía que conocías lo del javascript no intrusivo y que esto era un ejemplo rápido o algo así, pero ya que estaba metido en harina decidí comentarlo.

por O Doutor, en 2005-07-07 10:24:57

Gravatar

Funciona en opera, safari y además navegador interno del navegador de rss atom newsreader.
Aprovecho para felicitarte por el artículo porque no sé si será la mejor forma de hacerlo, pero funciona y es tremendamente útil.

por bitebit, en 2005-07-07 16:13:37

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: