TextpatternMania

CSS background bottom 100%

En algunas ocasiones se diseña una imagen que ‘cierra’ nuestra página. En tanto los contenidos producen una altura para su contenedor (div) mayor que la ventana de lectura, no hay problema: si hacemos correr la barra de desplazamiento hacia abajo, el background-bottom aparece en el lugar adecuado.

Pero esto no siempre sucede así: a veces la entrada, o toda la página, se nos quedan cortas, y la imagen de ‘cierre’ de nuestro diseño se nos subleva y aparece en mitad de la pantalla.

Para evitar esta circunstancia es posible emplear la estructura y el CSS que se muestra a continuación:


<html>
<head>
<style>

*{margin: 0; padding: 0;}

/* se establece una altura mayor que la pantalla para asegurar la aparición de la barra de desplazamiento vertical y evitar así el desplazamiento horizontal de la página según sea su altura */
body, html {height:100.1%;}

#pagina {
/* determina la imagen, su posición y tipo de repetición de la imagen de abajo */
background-image: url(fondo.gif);
background-repeat: repeat-x;
background-position: 0 100%;
/* firefox lee la altura mínima del div */
min-height:100%;
}

*html #pagina {
/* explorer necesita ayuda */
height:100%;
}

#cabecera {
/* establece la altura de la imagen: recuerda descontar los padding arriba y abajo de las etiquetas que contenga */
height: 70px;
/* determina la imagen, su posición y tipo de repetición de la imagen de arriba */
background-image: url(cabecera.gif);
background-repeat: repeat-x;
background-position: 0 0;
}

</style>
</head>

<body>

<div id='pagina'>
<div id='cabecera'></div>
<!-- contenido -->
</div>

</body>

</html>

Puedes ver cómo funciona en este ejemplo.

Comentarios
1 Jorge
8 marzo 2006, 16:28

Creo que lo complicas mogollón, o es que no pillo el problema, pero el caso es que con poner algo así el fondo no se mueve de la parte inferior tengas mucho o poco contenido en la página:

body {

background-position: bottom;

background-attachment: fixed;

background-repeat: repeat-x;

background-image: url(fondo.gif);

}

La clave está en el background-attachment:fixed. Con eso lo dejas bien amarradito a bottom.


2 efb
8 marzo 2006, 19:42

si trabajas sobre el body, casi basta con el código que citas, pero cuando lo haces sobre un contenedor, como se refiere en la entrada (un div por ejemplo), los resultados no son los mismos. haz la prueba: verás que firefox y explorer no tratan igual ese fixed ni siquiera en el body.

el truco intenta que se vea y funcione igual en ambos navegadores, y que se pueda trabajar a cualquier tamaño sin tener que redimensionar el body.


3 Jorge
8 marzo 2006, 20:13

Bueno, si quieres usar un contenedor para hacerlo, la cosa efectivamente se complica. Lo que me despistaba es que en el ejemplo que pones, no creo que el floridobyte necesite para nada ese div: “cabecera” te da el degradadito de fondo superior, y con body puedes pintar el color de fondo liso y cerrar con la imagen de olas como fondo del body.

Para otros casos sí me parece una técnica interesante, por ejemplo, si quisieras tener los típicos enlaces de pié de página en la posición de las olas, entonces necesitas un contenedor por narices y tu método aplica muy bien.


4 efb
8 marzo 2006, 21:00

Yo no entiendo mucho de esto, pero acabo de hacer una prueba y si cierro el body con un fixed bottom se me solapan los textos con la imagen de fondo cuando la entrada es larga y su altura rebasa el alto de pantalla.

Seguramente existirá un método mejor. En el florido byte surgió la cuestión al hacer la página de contacto, que quedaba cortita, y por no alterar la estructura general del sitio, o sea, que el css sirviera tanto para las entradas largas como para las cortas, dimos con ése y funcionó.

Claro que ahora mismo el florido está caído, pero prometo que no es culpa de el css. Palabrita. Voy a ver qué pasa.


5 Jorge
8 marzo 2006, 23:06

En eso no había caído, tienes toda la razón. Por el camino del body estás atado a la ventana, y con tu método, sólo manda la altura de ventana cuando el texto no la llena, ahora lo veo claro. Con mi método las olas “no hacen scroll” y queda fatal en casi todos los casos, salvo en páginas como la de ejemplo que no se llenan de texto.


6 efb
8 marzo 2006, 23:52

Ésa es la razón de tener que usar un div: los contenidos son de chicle.

saludos.


7 mar canet
9 abril 2006, 17:16

En pc IE y mozilla perfecto, pero si lo ves en safari 1.0 mac os X jaguar se ve a la mitad de pagina, la imagen que tendria que estar en bottom. Me estoy actualizando a safari 1.2, porque llevo dias para solucionar un tema de diseño similar.

saludos.


8 efb
9 abril 2006, 18:46

lo siento. no te puedo ayudar. ojalá pudiera mirarme el os x o el linux, pero… qué va.

suerte.


9 diezko
18 diciembre 2008, 05:12

muy buen articulo.
Me fue muy útil, gracias.


10 nexo
19 agosto 2009, 04:20

Gracias! no lo podia encontrar por ningun lado