Menú principal

Tema 7

Composición con CSS .

¿Cómo utilizamos CSS para distribuir la página en dos columnas?

Podemos hacerlo de distintas formas. Este es el código base sobre el que nos apoyamos para realizar los ejemplos:

<!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" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Chapter 12 - CSS Layouts (Method A)</title>

</head>
<body>

....ejemplos....

</body>
</html>

Método A

<div id="header">
...Aquí ponemos el texto de la cabecera...
</div>

<div id="sidebar">
...Aquí ponemos el texto del recuadro...
</div>

<div id="content">
...Aquí ponemos el contenido propiamente dicho...
</div>

<div id="footer">
...Aquí ponemos el texto de pie de página...
</div>

Usaremos la propiedad float. Dividimos nuestra página en elementos usanado la etiqueta <div>, cada una con su identificador único id.

#header: Contendrá un logo, la navegación, etc.
#sidebar: Información y links extra.
#content: El núcleo y cuerpo principal de nuestra página.
#footer: Copyright, créditos, etc.

Estilo de la cabecera y del pié de página

#header {
background: #ccc;
padding: 20px;
}

#footer {
background: #eee;
padding: 20px;
}

Comprobemos el resultado.

Apliquemos float al recuadro.

#header {
background: #ccc;
padding: 20px;
}

#sidebar {
float: right;
width: 30%;
background: #999;
}

#footer {
background: #eee;
padding: 20px;
}

Comprobemos el resultado.

Consigamos las dos columnas reales

#header {
background: #ccc;
padding: 20px;
}

#sidebar {
float: right;
width: 30%;
background: #999;
}

#content {
margin-right: 34%;
}


#footer {
clear: right;
background: #eee;
padding: 20px;
}

Resultado

Método B Doble float

<div id="header">
...Aquí ponemos el texto de la cabecera...
</div>

<div id="content">
...Aquí ponemos el contenido propiamente dicho...
</div>

<div id="sidebar">
...Aquí ponemos el texto del recuadro...
</div>

<div id="footer">
...Aquí ponemos el texto de pie de página...
</div>

#header {
background: #ccc;
padding: 20px;
}

#content {
float: left;
width: 66%;
}

#sidebar {
float: right;
width: 30%;
background: #999;
}

#footer {
clear: both;
background: #eee;
padding: 20px;
}

Comprobemos el resultado

Método C. Float en el contenido

<div id="header">
...Aquí ponemos el texto de la cabecera...
</div>

<div id="content">
...Aquí ponemos el contenido propiamente dicho...
</div>

<div id="sidebar">
...Aquí ponemos el texto del recuadro...
</div>

<div id="footer">
...Aquí ponemos el texto de pie de página...
</div>

#header {
background: #ccc;
padding: 20px;
}

#content {
float: left;
width: 66%;
}

#sidebar {
background: #999;
}

#footer {
clear: both;
background: #eee;
padding: 20px;
}

No necesitamos definir la anchura para sidebar, simplemente utilizará la anchura que el contenido <div> no está utilizando, en este caso el 34%.

Comprobemos el resultado

En algunos navegadores el código descrito en el paso anterior no funciona bien. El color de fondo de sidebar se muestra por debajo del área de contenido. Esto ocurre porque sidebar no tiene asignado un valor específico de anchura.

Para "corregir" este problema añadiomos un margen izquierdo igual a la anchura del área de content. Si ponemos un poco más de área conseguiremos un espacio en blanco entre las columnas.

#sidebar {
margin-left: 70%;
background: #999;
}

En el caso de que no necesitemos para nuestro diseño un color de fondo, no necesitaremos de margen izquiedo. Eliminamos la declaración #sidebar y reducimos el margen derecho del content <div>. Ambas columnas comparten el color de fondo especificado para la página.


#header {
background: #ccc;
padding: 20px;
}

#content {
float: left;
width: 60%;
margin-right: 6%;
}

#footer {
clear: left;
background: #eee;
padding: 20px;
}

Resultado

 

Método D. Posicionamiento (Positioning).

<div id="header">
...Aquí ponemos el texto de la cabecera...
</div>

<div id="content">
...Aquí ponemos el contenido propiamente dicho...
</div>

<div id="sidebar">
...Aquí ponemos el texto del recuadro...
</div>

<div id="footer">
...Aquí ponemos el texto de pie de página...
</div>

Necesitaremos un valor para la altura de header para posionar el sidebar más tarde. Usaremos un valor arbitral, todo dependerá de lo que vayamos a meter.

#header {
background: #ccc;
height: 40px;
}

#footer {
background: #eee;
padding: 20px;
}

El siguiente paso es conseguir un espacio para la columna derecha sin utilizar el atributo float.


#header {
background: #ccc;
padding: 20px;
}

#content {
margin-right: 34%;
}

#footer {
background: #eee;
padding: 20px;
}

Finalmente, utilizamos el posicionamiento absoluto para situar a la capa sidebar. Nos aseguramos que el cuerpo de la página tengan a "0" los márgenes y rellenos.

body {
margin: 0;
padding: 0;

font-family: verdana, sans-serif;
font-size: 12px;
}

#header {
height: 40px;
background: #ccc;
}

#content {
margin-right: 34%;
}


#sidebar {
position: absolute;
top: 40px;
right: 0;
width: 20%;
background: #999;

}

#footer {
padding: 20px;
background: #eee;
}

Comprobemos el resultado

Resolvamos el problema del pié de página (footer) con posicionamiento. Una solución es asignar el mismo margen derecho que tiene el área de "content".


body {
margin: 0;
padding: 0;
font-family: verdana, sans-serif;
font-size: 12px;
}

#header {
height: 40px;
background: #ccc;
}

#content {
margin-right: 34%;
}


#sidebar {
position: absolute;
top: 40px;
right: 0;
width: 20%;
background: #999;
}

#footer {
margin-right: 34%;
padding: 20px;
background: #eee;
}

¿Y si queremos tres columnas? Es muy fácil utilizando este método de poscionamiento. Lo que necesitamos es añadir un margen izquierdo para el "content" y el "footer"

body {
margin: 0;
padding: 0;
font-family: verdana, sans-serif;
font-size: 12px;
}

#header {
height: 40px;
background: #ccc;
}

#content {
margin-right: 24%;
margin-left: 24%;

}

#leftbar {
position: absolute;
top: 40px;
left: 0;
width: 20%;
background: #999;
}

#sidebar {
position: absolute;
top: 40px;
right: 0;
width: 20%;
background: #999;
}

#footer {
margin-right: 24%;
margin-left: 24%;

padding: 20px;
background: #eee;
}


Resultado