Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tamao
Por lo general, la maquetacin se realiza sobre elementos en bloque.
Normalmente divisiones, pero tambin lo podemos hacer con prrafos,
listas, o con el propio body. Por defecto los elementos de bloque ocupan
todo el ancho del elemento que lo contiene, y su alto se ajusta al contenido.
1
Con slo esto, podramos maquetar una pgina web que contenga una
columna central, con un ancho fijo o relativo. En el siguiente ejemplo, hemos
2
Desbordamiento
Al utilizar un elemento de bloque, como una capa, un prrafo, el body,
etc... el tamao depende del contenido. Pero al definir un tamao fijo nos
puede surgir un problema: qu pasa si el contenido del elemento (texto,
imgenes, etc...) no cabe? Entonces se produce un desbordamiento, que
podemos controlar desde el estilo con la propiedad overflow. Podemos
darle estos valores:
- visible. Es la opcin por omisin. El contenido sale de elemento,
y puede que se solape con los elementos que haya a continuacin.
- hidden. Lo que no quepa en el elemento, queda oculto.
- auto. Muestra las barras de desplazamiento en el elemento
cuando sea necesario.
- scroll. Siempre muestra las barras de desplazamiento.
Posicionamiento
El posicionamiento es el lugar donde el navegador coloca un elemento
HTML para visualizarlo.
Por defecto, los elementos se posicionan uno a continuacin de otro. Si se
trata de elementos de bloque, como capas, prrafos, listas, etc, se irn
colocando uno debajo del otro. A este posicionamiento se le denomina
esttico.
Utilizando CSS, con la propiedad position podemos cambiar el tipo de
posicionamiento de los elementos. Existen cuatro tipos de posicionamiento:
- static. Es el normal.
- relative. El posicionamiento relativo coloca el elemento en su
posicin normal. A partir de ah, podemos desplazar el elemento,
permaneciendo el hueco de su posicin original.
- absolute. Con el posicionamiento absoluto, especificamos la
posicin del elemento con respecto al elemento que lo contiene.
- fixed. Se establece la posicin del elemento de forma parecida al
absoluto, pero el elemento queda fijo en la pantalla, aunque utilicemos
barras de desplazamiento.
Al cambiar el desplazamiento de un elemento, es fcil que se solape sobre
otro. Esto produce que un elemento quede oculto. Para controlar esto,
disponemos de la propiedad CSS z-index, a la que podemos asignar un valor
numrico. Un elemento con un z-index mayor se ver por encima de otro
con un z-index menor.
Las cajas del siguiente ejemplo aparecen solapadas. Al pasar el cursor
sobre ellas, se le asigna z-index: 10;, lo que hace que se vean por encima
del resto.
Posicionamiento relativo
El posicionamiento relativo coloca el elemento en su posicin normal, y a
partir de ah lo desplaza la distancia que le indiquemos. Al desplazarlo deja
un "hueco" donde estara su posicin normal.
Posicionamiento absoluto
Al utilizar el posicionamiento absoluto indicamos de forma precisa la
posicin del elemento en la pgina.
Al contrario que con el posicionamiento relativo, el elemento al que le
hemos asignado un posicionamiento absoluto no deja un hueco en la pgina.
Podemos decir que el resto de elementos lo ignoran, y se colocan como si no
existiese.
Para aplicarlo, lo primero es declararlo en el estilo, utilizando position:
absolute;.
La posicin y tamao del elemento se indica siempre en relacin a otro
elemento que lo contiene. El elemento contenedor ser el ms cercano que
haya con posicionamiento no esttico. Si no hay ninguno, se utilizar el
body.
Para definir la posicin utilizamos top para referirnos a la distancia
entre el borde superior del elemento posicionado y el borde superior del
elemento contenedor. Por lo tanto left ser la distancia entre los lados
izquierdos, right entre los lados derechos y bottom entre los lados
inferiores.
Para posicionar un elemento del que conocemos sus dimensiones, basta
con indicar un punto en vertical (top o bottom) y un punto en horizontal
(right o left). En el siguiente elemento, todas las cajas tienen position:
absolute; witdth: 60px; height: 60px y un borde. Para cada una
hemos cambiado la posicin. Adems, a la caja que contiene a todas, le
hemos dado position: relative; para que las cajas de dentro tomen su
posicin a partir de ella.
div#columna_izquierda {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 50%;
}
div#columna_derecha {
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 50%;
}
Esto originara dos columnas, cada una con un ancho de la mitad del de la
pgina (o del elemento que las contenga).
Si queremos obtener dos columnas, una con un ancho fijo y la otra con lo
que sobre, lo haremos de otra forma. Por ejemplo, si la columna de la
izquierda la queremos con un ancho fijo, por ejemplo de 200px, lo que
haremos ser asignar a la columna de la derecha una distancia con el lado
izquierdo de esos 200px, y con el lado derecho de 0, en vez de indicar el
ancho.
div#columna_izquierda {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 200px;
}
div#columna_derecha {
position: absolute;
right: 0;
left: 200px;
top: 0;
height: 100%;
}
Hay que decir que esto no funciona correctamente en Internet Explorer
6, que no interpreta correctamente el ancho del elemento si definimos la
posicin de los dos lados, en vez de un lado y el ancho.
Podemos conseguir un efecto muy interesante controlando el desbordamiento de las
columnas. Podemos dejar una columna fija, por ejemplo con un men, y otra que muestre el
contenido, a la que damos la propiedad overflow: auto;. Esto har que nos podamos
desplazar por el contenido de la pgina manteniendo el men siempre visible. Como por
defecto, Internet Explorer siempre muestra la barra de desplazamiento en la etiqueta
html, queda mejor si lo quitamos html {overflow:hidden;}. Todo esto lo veremos
mejor con un ejemplo:
<!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">
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type" />
<title>Columna sin scroll a la izquierda</title>
<style type="text/css">
html {
overflow: hidden;
}
div#columna_izquierda {
position: absolute;
top:0; left: 0;
height: 100%;
width:20%;
background-color:#FFE9D7;
}
div#columna_derecha {
position: absolute;
top:0; right: 0;
height: 100%;
width: 80%;
10
overflow: auto;
background-color:#DDF2F9;
}
</style>
</head>
<body>
<div id="columna_izquierda">
<ul>
<li><a href="#ap1">Apartado 1</a></li>
<li><a href="#ap2">Apartado 2</a></li>
<li><a href="#ap3">Apartado 3</a></li>
</ul>
</div>
<div id="columna_derecha">
<h2> Columna fija a la derecha</h2>
<h3 id="ap1"> Apartado 1</h3>
<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed
facilisis nulla et risus.
In eleifend sapien a neque. Etiam fermentum. Sed
diam. Praesent non nisi ac leo
dapibus suscipit
ultricies sit
commodo purus et
rhoncus
et,
pellentesque turpis.
11
malesuada
tristique diam vitae ligula. Nulla tincidunt, metus sit amet congue
porttitor, purus pede commodo
odio, vel varius mauris nulla id augue. Mauris pellentesque volutpat
lacus. Maecenas erat. </p>
<p>Vestibulum ante ipsum primis in faucibus orci luctus et
ultrices posuere cubilia Curae;
Vestibulum volutpat, lacus non mattis vulputate,
odio, in venenatis ante augue quis
ut ligula
ultricies sit
commodo purus et
rhoncus
et,
pellentesque turpis.
12
malesuada
tristique diam vitae ligula. Nulla tincidunt, metus sit amet congue
porttitor, purus pede commodo
odio, vel varius mauris nulla id augue. Mauris pellentesque volutpat
lacus. Maecenas erat. </p>
<p>Vestibulum ante ipsum primis in faucibus orci luctus et
ultrices posuere cubilia Curae;
Vestibulum volutpat, lacus non mattis vulputate,
odio, in venenatis ante augue quis
ut ligula
Recuerda que podemos anidar las capas. Por ejemplo, podramos subdividir una de las
capas en otras dos dentro de ella, utilizando el mismo sistema.
13
div#encabezado {
position: absolute;
top:0; left: 0;
height:10%;
width:100%;
background-color:RoyalBlue;
}
div#columna_izquierda {
position: absolute;
top:10%; left: 0;
height: 90%;
width:20%;
background-color:SandyBrown;
}
div#columna_derecha {
position: absolute;
top:10%; right: 0;
bottom: 0;
width: 80%;
background-color:LightGreen;
}
14
Posicionamiento
flotante
15
direccin indicada, hasta encontrar el lmite del elemento contenedor, u otro elemento
tambin flotante. Adems hace que todos los elementos fluyan alrededor de l.
Es muy comn utilizarlo en imgenes, para que el texto fluya alrededor de ellas. En el
siguiente ejemplo, todas las cajas contienen un prrafo con una imagen al principio
(<p><img /> Texto</p>). Slo cambia el float de la imagen.
Observa que el texto puede quedar demasiado pegado a la imagen. Para solucionarlo, no
hay ms que aplicar un pequeo margin a la imagen, hacia el lado que est el texto.
Existen algunos inconvenientes al utilizar el posicionamiento flotante. Un elemento que
contiene a otro flotante, no lo tiene en cuenta para su tamao a lo alto. Por ejemplo, el
siguiente prrafo tiene un borde, y vemos que si la imagen es flotante, "se sale".
Adems, si por ejemplo hay varios prrafos con elementos flotantes al mismo lado, hace
que se "amontonen":
16
Con el posicionamiento flotante, podemos por ejemplo colocar elementos uno al lado del
otro. En el siguiente ejemplo, hemos utilizado cajas, todas con float:left; y un pequeo
margen para que no se peguen. Observa cmo se comportan cuando cambias el tamao de la
ventana:
div#columna_izquierda {
float: left;
width: 30%;
height: 100%;
background-color:SandyBrown;
}
17
div#columna_derecha {
float: left;
width: 69.5%;
height: 100%;
background-color:LightGreen;
}
Para aadir una cabecera al principio, no hay ms que poner una capa antes de las
columnas, con todo el ancho. Y para poner un pie, haramos lo mismo, pero colocndolo
despus de las columnas, y rompiendo el flotamiento con clear:both;.
div#cabecera {
width: 99.5%;
height: 10%;
background-color:RoyalBlue;
}
div#columna_izquierda {
float: left;
width: 30%;
height: 80%;
background-color:SandyBrown;
}
div#columna_derecha {
float: left;
width: 69.5%;
height: 80%;
background-color:LightGreen;
}
18
div#pie {
clear: both;
width: 99.5%;
height: 10%;
background-color:Violet;
}
Posicionamiento fijo
El posicionamiento fijo (position: fixed;) se define igual que el
posicionamiento absoluto, con las propiedades top, bottom, left y right.
Pero su comportamiento es distinto: el posicionamiento fijo se refiere
siempre a la ventana del navegador, independientemente de que el
elemento posicionado est dentro de otro elemento con posicionamiento,
como pasaba con el absoluto. Adems, el elemento siempre se muestra en
la misma posicin, aunque la pgina sea larga y nos desplacemos hacia abajo
o hacia un lado.
19
21
22
Diseo lquido
En el diseo lquido, en vez de unidades absolutas se utilizan relativas al tamao de la
ventana. Esto hace que la pgina sea ms flexible a los distintos dispositivos de
visualizacin.
Por contra, es ms difcil controlar el diseo, sobre todo si se basa en muchas imgenes,
porque hay que pensar en qu ocurre si la ventana es muy pequea o muy grande, y que no se
descoloque todo al cambiar de tamao. Tambin puede producir lneas de texto muy largas,
lo que incomoda la lectura. Aunque el usuario siempre tiene la opcin de hacer ms pequea
su ventana.
Para intentar controlar un poco el tamao de los elementos, existen las propiedades de
estilo max-width (ancho mximo), min-width (ancho mnimo), max-height (alto mximo)
y min-height (alto mnimo).
Un ejemplo de diseo lquido puede ser la pgina de este curso.
Diseo elstico
ltimamente, se ha acuado el trmino "diseo elstico" para el diseo en el que el
tamao de los objetos, no es ni fijo ni en relacin al tamao de la ventana, si no al tamao
del texto (basado en em), dando al usuario la posibilidad de cambiar su tamao, y en
proporcin, el de todos los elementos. Aunque permite que el texto se controle, sigue sin
adaptarse a las distintas ventanas, y resulta difcil controlar las imgenes.
Actualmente, la mayora de las pginas ofrecen un diseo fijo, sobre todo si tienen un
diseo ms elaborado. Las que ofrecen un diseo ms elstico, suelen mostrar una columna
central elstica, que se adapta a la pantalla, y columnas con un ancho fijo, para mens o
para la publicidad.
23