Cómo mantener el footer en la parte inferior del navegador
La mayoría de los diseños actuales cuentan con un pie de página o footer, donde generalmente se suele añadir información de contacto, derechos de autor y otros datos relevantes. Por definición, el footer se muestra al final de la página, después de todo el contenido.
En muchas ocasiones el contenido de nuestra página no es suficiente como para que el footer se desplace hasta la parte inferior del navegador, dando una impresión de vacío bastante poco elegante, sobre todo si el pie de página tiene una imagen de fondo repitiéndose y no coincide con el fondo general del diseño.
A continuación vamos a describir una forma de solucionar esto. Obviamente este método no es el único, pero es el que hemos considerado más correcto.
Nuestra web para el ejemplo constará de las siguientes secciones diferenciables: cabecera, barra de navegación principal, columna izquierda, columna derecha y el famoso footer. De esta manera nuestro archivo XHTML, al cual llamaremos index.html, quedaría así:
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
<html xmlns=“http://www.w3.org/1999/xhtml” xml:lang=“en” lang=“en”>
-
<meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1″ />
-
<title>DEIDOS Blog :: Mantener el footer en la parte inferior.</title>
-
</head>
-
-
<div id=“cabecera”></div>
-
<div id=“navegacion”></div>
-
-
<div id=“columnaizquierda”></div>
-
<div id=“columnaderecha”></div>
-
-
<div id=“footer”></div>
-
</body>
-
</html>
Lo siguiente que haremos será añadir algo de contenido a las secciones: enlaces, títulos y algún texto de ejemplo:
-
<div id=“cabecera”>
-
<h1>Cabecera</h1>
-
</div>
-
<div id=“navegacion”>
-
</div>
-
-
<div id=“columnaizquierda”>
-
<h2>Columna izquierda</h2>
-
</div>
-
-
<div id=“columnaderecha”>
-
<h2>Columna derecha</h2>
-
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse dignissim accumsan mauris. In hac habitasse platea dictumst. Nulla ut massa. Nulla malesuada, pede quis sagittis mattis, tellus nunc feugiat massa, nec aliquam velit sem in lacus. Vivamus et arcu in lacus lobortis adipiscing. Nullam et diam et dolor laoreet convallis. Fusce eu erat quis lacus viverra adipiscing. Vestibulum tempus erat ullamcorper velit. Pellentesque porttitor ipsum a mi. Duis pulvinar, dolor non tempor posuere, augue enim malesuada nisi, in sodales erat lectus in erat. Donec eleifend. Sed rhoncus, metus eu pretium consequat, massa odio dapibus tellus, at suscipit orci tortor a ipsum. </p>
-
</div>
-
-
<div id=“footer”>
-
<h4>Footer</h4>
-
</div>
-
</body>
Si abrimos la web en el navegador no veremos gran cosa, ya que todavía nos faltan por definir los estilos para las distintas capas. Para ello creamos nuestro archivo CSS, el cual llamaremos general.css.
-
html, body {
-
height: 100%;
-
}
-
-
body {
-
margin: 0;
-
}
-
-
h1, h2, h3, h4 {
-
margin: 0;
-
}
-
-
#cabecera {
-
width: 100%;
-
height: 125px;
-
background: #d9d9d9;
-
}
-
-
#navegacion {
-
width: 100%;
-
height: 40px;
-
background: #a3a3a3;
-
}
-
-
#columnaizquierda {
-
float: left;
-
width: 25%;
-
}
-
-
#columnaderecha {
-
width: 70%;
-
margin-left: 25%;
-
background: #999;
-
}
-
-
#footer {
-
clear: left;
-
width: 100%;
-
height: 50px;
-
background: #666;
-
}
El siguiente paso es enlazar el archivo index.html con la hoja de estilos, para lo cual añadiremos la siguiente línea entre las etiquetas head. Si hemos guardado el archivo CSS en otra carpeta, deberemos indicar la ruta correspondiente en el atributo href.
-
<link rel=“stylesheet” type=“text/css” href=“general.css” />
Como podemos ver, el footer aparece justo después del contenido de la columna derecha, en vez de en la parte inferior del navegador. Una posible solución sería colocarlo abajo del todo utilizando posicionamiento absoluto, pero si lo hacemos y el contenido supera el alto del navegador, al bajar el scroll el footer seguirá “flotando” en la misma posición.
Para solucionar esto, primero deberemos añadir dos capas extra al archivo XHTML. Una capa que contendrá todos los elementos excepto el footer, a la que llamaremos contenedor, y otra que llamaremos clearfooter. Nuestro index.html quedaría así:
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
<html xmlns=“http://www.w3.org/1999/xhtml” xml:lang=“en” lang=“en”>
-
<meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1″ />
-
<title>DEIDOS Blog :: Mantener el footer en la parte inferior.</title>
-
<link rel=“stylesheet” type=“text/css” href=“general.css” />
-
</head>
-
-
<div id=“contenedor”>
-
<div id=“cabecera”>
-
<h1>Cabecera</h1>
-
</div>
-
<div id=“navegacion”>
-
</div>
-
-
<div id=“columnaizquierda”>
-
<h2>Columna izquierda</h2>
-
</div>
-
-
<div id=“columnaderecha”>
-
<h2>Columna derecha</h2>
-
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse dignissim accumsan mauris. In hac habitasse platea dictumst. Nulla ut massa. Nulla malesuada, pede quis sagittis mattis, tellus nunc feugiat massa, nec aliquam velit sem in lacus. Vivamus et arcu in lacus lobortis adipiscing. Nullam et diam et dolor laoreet convallis. Fusce eu erat quis lacus viverra adipiscing. Vestibulum tempus erat ullamcorper velit. Pellentesque porttitor ipsum a mi. Duis pulvinar, dolor non tempor posuere, augue enim malesuada nisi, in sodales erat lectus in erat. Donec eleifend. Sed rhoncus, metus eu pretium consequat, massa odio dapibus tellus, at suscipit orci tortor a ipsum. </p>
-
</div>
-
-
<div id=“clearfooter”></div>
-
</div>
-
-
<div id=“footer”>
-
<h4>Footer</h4>
-
</div>
-
</body>
-
</html>
A continuación definimos los estilos para las nuevas capas, además de cambiar el posicionamiento del footer a relative (por defecto viene en static).
Para que funcione correctamente en todos los navegadores, (concretamente en IE6) deberemos crear un archivo CSS exclusivo para el mismo, que llamaremos general_ie.css. La diferencia entre la hoja de estilos normal y la de Internet Explorer es que la propiedad min-height se sustituye por height. Podríamos haberlo solucionado mediante hacks, pero de esta manera no validaría, y queremos cumplir los estándares… ¿verdad?
-
/* Footer IE */
-
#footer {
-
position: relative;
-
clear: left;
-
width: 100%;
-
height: 50px;
-
background: #666;
-
}
-
-
/* Footer resto navegadores */
-
#footer {
-
position: relative;
-
clear: left;
-
width: 100%;
-
min-height: 50px;
-
background: #666;
-
}
Finalmente, para que la nueva hoja de estilos la lean IE6 e inferiores, modificaremos la cabecera de esta manera:
-
<meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1″ />
-
<title>DEIDOS Blog :: Mantener el footer en la parte inferior.</title>
-
<link rel=“stylesheet” type=“text/css” href=“general.css” />
-
<!–[if lt IE 7]>
-
<link rel=“stylesheet” type=“text/css” href=“general_ie.css” />
-
<![endif]–>
-
</head>
Voilà! Ya tenemos nuestro footer en la parte inferior del navegador, independientemente del contenido que tengan las capas superiores.






01/10/2008 a las 3:15 pm
compadre… me parece barbaro… muchas gracias… solo te falto un .rar para descargar el proyecto completo… saludos
24/02/2009 a las 1:11 am
¿Pero qué valores tienen los div clearfooter y contenedor?
17/03/2009 a las 6:02 pm
muchisimas gracias, excelente y super bien explicado!
14/08/2009 a las 10:10 am
[...] el método presentado anteriormente para mantener el footer en la parte inferior de la página VER, os presentamos otra variante que sí que funciona perfectamente en todos los [...]
28/06/2010 a las 3:48 pm
Gracias!! Me sirvió!
Saludos.