Otro blog más de diseño

Después de haber navegado mucho buscando la versión perfecta – que pienso que no existe – yo hago mi pequeña y humilde propuesta. Yo desde luego que le voy a sacar mucho provecho. Si desde luego a alguien más le sirve y le evita tener que darle a la cabeza, otra alegría que me llevo.
La idea se basa en una estrucura similar a esta
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Layout al 100% de alto</title> <link type="text/css" href="layout.css" rel="stylesheet" /> </head> <body> <div id="layout"> <div id="cabecera">capa cabecera</div> <div id="lateral">capa lateral</div> <div id="contenido">capa contenido</div> <div id="pie">capa pie</div> </div> </body> </html>
Y la hoja de estilos pretende ser algo como esto, y después intento explicar el porqué y como.
html,body {
height:100%;
/* necesario para las sub-alturas */
}
body {
margin:0;
padding:0;
overflow-x: hidden;
/* Para evitar el feo scroll horizontal de explorer 7 */
background:#fff;
}
body, div, p {
font-family: verdana;
font-size:12px;
color:#000;
}
div#layout {
position:relative;
/* necesario para el posicionamiento */
margin:0 auto;
/* lo centramos, aunque no funciona para explorer 5 */
width:750px;
height:auto !important;
/* para los navegadores de verdad */
height:100%;
/* Para que explorer lo interprete como alto mínimo */
min-height:100%;
/* para los navegadores de verdad */
background:#f0f0f0;
}
div#cabecera {
background:#cc0000;
height: 80px;
padding:10px;
color: #fff;
}
div#lateral {
float: left;
width: 150px;
padding: 10px;
padding-bottom: 50px;
/* Este padding debe ser igual a la altura del footer */
background: #ccc;
}
div#contenido {
padding: 10px;
padding-bottom: 50px;
/* Este padding debe ser igual a la altura del footer */
margin-left: 170px;
/* 150px del ancho del lateral
más 20px del padding del mismo */
background: #eeeAA0;
}
div#pie {
position:absolute;
width:730px;
/* 750px del ancho del layout menos 20px del padding */
height: 30px;
padding:10px;
color: #fff;
bottom:0;
/* lo encajamos al fondo de todo */
background:#006699;
}
Lo primero de todo es permitir alcanzar un 100% de altura a la entidad más importante de la estructura, y en este caso me refiero a las etiquetas <html> y <body>, por lo que les damos una altura del 100%.
Acto seguido a la capa “layout” que es la que va a contener el resto de elementos, la posicionamos de forma relativa. Esto nos permite posicionar otros elementos con respecto al contenedor principal, es decir, a la capa “layout“. Después le aplicamos el famoso truco dándole un mínimo de altura del 100%, altura automática declarándola como !important, y para hacerlo compatible con los navegadores de mentira, volvemos a declarar la altura al 100%. Esto evidentemente no anula la altura anterior para los navegadores buenos, ya que hemos puesto el !important.
La cabecera y las columnas contenido y lateral, no tienen nada fuera del otro mundo, a no ser un “padding-bottom” que es igual a la altura de nuestro footer. Esto se debe a que el footer lo posicionamos de forma absoluta, a 0px del fondo (bottom:0px;) por lo que siempre estará pegado al fondo y puede llegar a tapar con su altura parte del texto de las capas citadas.
Espero haberme explicado del porqué de determinados estilos, aunque como dice un conocido
No me enteré de lo que dijo, pero si funciona me vale
Pués eso. Solo apuntar para terminar, que las capas lateral y contenido no se estiran con el resto del layout – eso sería otra historia. Lo que pretendía con este tutorial era que el footer se mantenga siempre abajo de todo e independiente del tamaño de la ventana y del contenido del mismo, que se mantuviera igual.
Alguien me preguntaba por la mañana si esto sirve para el caso en que el lateral necesite tener un color de fondo que alcance hasta el footer. Mi respuesta es si. Simplemente crearíamos un fondo del ancho deseado, y lo colocaríamos de fondo en la capa layout repitiéndose verticalmente.
Qué puedo decir de mi que no se haya dicho ya antes.
r0sk
junio 27th, 2008 el 12:36 am
¡Gran post!, me ha gustado la explicación. Enhorabuena.
cmacias
junio 27th, 2008 el 7:45 am
Tengo que decir que cierto layout de cierta web de cierto conocido nuestro fué fuente de mi inspiración
Martin
junio 27th, 2008 el 1:27 pm
Ahora vas a tener que decir quien es! hay muy buenos layouts en http://www.cssplay.co.uk (incluido uno de alto 100%)
Saludos!!
cmacias
junio 27th, 2008 el 6:47 pm
La persona en cuestión es un antiguo compañero de trabajo y amigo al que le estoy echando una mano con el diseño de su web, la cuál publicaré cuando esté online.
Mauro
marzo 23rd, 2010 el 6:19 pm
Hola, me parece a mi o, ni el div#lateral ni el div#contenido se pegan en al footer?
lo vi en el chrome, en el IE 6 y en el IE7..
podrias decirme como hacer?
cmacias
marzo 23rd, 2010 el 6:33 pm
Hola Mauro, ni el #lateral ni el #contenido se pegan con el footer. Estas dos capas deben tener un padding-bottom igual o mayor a la altura dell footer, de forma que cuando crezcan, no se solaparan por debajo.
Mauro
marzo 23rd, 2010 el 6:37 pm
ha.. bien pero.. me pareció que se deberían pegar al footer, o al menos eso entendí con la imagen que ilustra el post. sabes como hacer para que se peguen?
gracias.
cmacias
marzo 23rd, 2010 el 6:45 pm
Una de los métodos que utilizo es añadir a la capa #layout un gráfico con el fondo repetido verticalmente imitando al que debería tener el #lateral, de forma que a simple vista el efecto sea el deseado. Un ejemplo sería http://www.rimset.org/.
El lateral realmente no llega hasta el #fotter aunque lo parezca por el fondo de color gris y los puntos que se estiran hasta el final.
Con ese efecto conseguimos compatibilidad en todos los navegadores incluído explorer 6.
Mauro
marzo 23rd, 2010 el 6:52 pm
HA!!, FantastiC!
, nos vemos.
Muchas gracias genio, … derecho a mi rss reader
cmacias
marzo 23rd, 2010 el 7:16 pm
Un saludo y gracias a ti por leerme
listillo
octubre 15th, 2010 el 12:01 am
Hola, he estado probando tu código, y he logrado que el pie permaneza abajo del todo, he aplicado padding-bottom a la capa contenido equivalente a la altura del pie, pero no hay manera de que la capa contenido, independientemente de la cantidad de contenido que tenga, llegue siempre hasta abajo, u ocupe el 100% de la altura de la ventana.
listillo
octubre 15th, 2010 el 12:10 am
He probado el truco del “html,body {height:100%;
}” en todos los navegadores que se me han ocurrido, y sin recurrir a efectos visuales como el de la web rimset, he visto que dicho truco sólo funciona sólo en Opera, e IE5.5, IE6…, NO funciona ni en Firefox, ni en Safari, ni en Chrome, ni en IE7, ni en IE8, etc…
¿Conoces alguna solución de verdad que no sea el efecto visual de la web rimset?
¡Un saludo!
cmacias
octubre 15th, 2010 el 7:40 am
Debería funcionarte correctamente ya que lo estoy utilizando en los últimos proyectos en los que he trabajado. Estás colocando correctamente el fondo repetido ? Has comprobado si te funciona el ejemplo que pongo para descarga ?
Federico
noviembre 25th, 2010 el 6:24 pm
Con este “truco” el problema surge cuando el CONTENIDO del sitio debe superar el 100% de la ventana…
Al poner el footer en posición ABSOLUTA respecto del body/html, el contenido “extra” le pasa por encima (o por debajo, dependiendo de la ubicación de los divs en el html)
cmacias
noviembre 25th, 2010 el 6:49 pm
Efectivamente, Federico tienes razón. La solución – mea culpa por no publicarlo – es meterle un
<br style="clear:both" />justo debajo de la capa con id=”contenido”
<div id="contenido"></div>
<br style="clear:both" />
Hay otras soluciones como añadirle un "overflow:hidden" tanto a la capa "lateral" como a la "contenido" o incluso circulan por internet variantes de la clase "clearFix" que también podrían solucionar el rebase de texto.
Federico
noviembre 26th, 2010 el 5:25 pm
Genial compañero, si yo suelo usar la clearFix, y con eso se acomoda.
Otra solucion interesante que encontre al respecto está aquí: http://www.araudi.net/ejemplos/conjunta.html
Es prácticamente igual a tu ejemplo, en lo que a posicionamiento de capas se refiere.
Así que muchas gracias por compartir esta excelente solución
cmacias
noviembre 26th, 2010 el 7:26 pm
Gracias a ti por leerme
Con respecto al ejemplo que comentas, yo tengo algo similar :
http://www.cmacias.com/emulando-a-los-iframes-con-css/
Ale Photoshop
abril 24th, 2011 el 6:09 am
Macias! tanto tiempo sin pasar por esta web, hoy por necesidad de hacerle una consulta aun experto es que te hago esta consuta relacionada a Css y a este tema:
Tengo una imagen de fondo de pagina que mide 1600×1200. Quiero que aparezca centrada, ya que la imagen complementa al layer que aparece en el centro del sitio. La idea es que en un monitor con 1024×768 se vea centrado y en uno con 1600×1200 tambien… pero como hago para mantenerlo centrado?
Me sugirieron ponerlo en un div, pero claro, si lo pongo en un div, por atras del div contenedor, me van a aparecer los scroll… tiene que ser un background…
¿tendrias alguna sugerencia? gracias de antemano y espero que andes bien!
cmacias
abril 25th, 2011 el 2:50 am
Muy buenas y re-bienvenido
Has probado con lo siguiente ?
body {background: url(tuimagen) 50% 50% no-repeat}
También habrían otras alternativas, como la que explico en http://www.cmacias.com/positionfixed-compatible-con-todos-los-navegadores/
De esa forma te aseguras que independientemente de la cantidad de contenido que tengas, la imagen de fondo se verá siempre centrada
Un saludo !
Ale Photoshop
abril 25th, 2011 el 4:01 am
Sabés que si, habia probado con
body {background: url(tuimagen) center center no-repeat}
y se ve que e slo miso que 50% 50%…
La cosa es que me lo centra a lo ancho pero no a lo alto… asi que bueno… lo voy a dejar en ves de center center, “center top” que safa mas…
Bueno gracias por el intento! voy a volver mas seguido…
cmacias
abril 25th, 2011 el 4:12 am
Y añadiendo esto a tu hoja de estilos ?
html, body { height: 100%;}
Ale Photoshop
abril 25th, 2011 el 4:17 am
Una maravillaaaa neneeee!!! Ahora si funciona!… era eso!…
Te debo una Macias! (mas muchas otras!)
cmacias
abril 25th, 2011 el 4:33 am
Un placer, amigo !!