El posicionamiento absoluto se emplea para establecer de forma exacta la posición en la que se muestra la caja de un elemento. La nueva posición de la caja se indica mediante las propiedades top
, right
, bottom
y left
. La interpretación de los valores de estas propiedades es mucho más compleja que en el posicionamiento relativo, ya que en este caso dependen del posicionamiento del elemento contenedor.
Cuando una caja se posiciona de forma absoluta, el resto de elementos de la página se ven afectados y modifican su posición. Al igual que en el posicionamiento relativo, cuando se posiciona de forma absoluta una caja es probable que se produzcan solapamientos con otras cajas.
En el siguiente ejemplo, se posiciona de forma absoluta la caja 2:
La caja 2 está posicionada de forma absoluta, lo que provoca que el resto de elementos de la página modifiquen su posición. En concreto, la caja 3 deja su lugar original y pasa a ocupar el hueco dejado por la caja 2.
El estándar de CSS 2.1 indica que las cajas posicionadas de forma absoluta "salen del flujo normal de la página", lo que provoca que el resto de elementos de la página se muevan y en ocasiones, ocupen la posición original en la que se encontraba la caja.
Por otra parte, el desplazamiento de una caja posicionada de forma absoluta se controla mediante las propiedades top
, right
, bottom
y left
. A diferencia del posicionamiento relativo, la interpretación de los valores de estas propiedades depende del elemento contenedor de la caja posicionada.
Determinar la referencia utilizada para interpretar los valores de top
, right
, bottom
y left
de una caja posicionada de forma absoluta es un proceso complejo que se compone de los siguientes pasos:
- Se buscan todos los elementos contenedores de la caja hasta llegar al elemento
<body>
de la página. - Se recorren todos los elementos contenedores empezando por el más cercano a la caja y llegando hasta el
<body>
- El primer elemento contenedor que esté posicionado de cualquier forma diferente a
position: static
se convierte en la referencia que determina la posición de la caja posicionada de forma absoluta. - Si ningún elemento contenedor está posicionado, la referencia es la ventana del navegador, que no debe confundirse con el elemento
<body>
de la página.
Una vez determinada la referencia del posicionamiento absoluto, la interpretación de los valores de las propiedades top
, right
, bottom
y left
se realiza como sigue:
- El valor de la propiedad
top
indica el desplazamiento desde el borde superior de la caja hasta el borde superior del elemento contenedor que se utiliza como referencia. - El valor de la propiedad
right
indica el desplazamiento desde el borde derecho de la caja hasta el borde derecho del elemento contenedor que se utiliza como referencia. - El valor de la propiedad
bottom
indica el desplazamiento desde el borde inferior de la caja hasta el borde inferior del elemento contenedor que se utiliza como referencia. - El valor de la propiedad
left
indica el desplazamiento desde el borde izquierdo de la caja hasta el borde izquierdo del elemento contenedor que se utiliza como referencia.
En los siguientes ejemplos, se utiliza la página HTML que muestra la siguiente imagen:
A continuación, se muestra el código HTML y CSS de la página original:
div {
border: 2px solid #CCC;
padding: 1em;
margin: 1em 0 1em 4em;
width: 300px;
}
<div>
<img src="imagenes/imagen.png" alt="Imagen genérica" />
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus
ullamcorper velit eu ipsum. Ut pellentesque, est in volutpat cursus, risus
mi viverra augue, at pulvinar turpis leo sed orci. Donec ipsum. Curabitur
felis dui, ultrices ut, sollicitudin vel, rutrum at, tellus.</p>
</div>
En primer lugar, se posiciona de forma absoluta la imagen mediante la propiedad position
y se indica su nueva posición mediante las propiedades top
y left
:
div img {
position: absolute;
top: 50px;
left: 50px;
}
El resultado visual se muestra en la siguiente imagen:
La imagen posicionada de forma absoluta no toma como referencia su elemento contenedor <div>
, sino la ventana del navegador, tal y como demuestra la siguiente imagen:
Para posicionar la imagen de forma absoluta, el navegador realiza los siguientes pasos:
- Obtiene la lista de elementos contenedores de la imagen:
<div>
y<body>
. - Recorre la lista de elementos contenedores desde el más cercano a la imagen (el
<div>
) hasta terminar en el<body>
buscando el primer elemento contenedor que esté posicionado. - El posicionamiento de todos los elementos contenedores es el normal o estático, ya que ni siquiera tienen establecida la propiedad
position
- Como ningún elemento contenedor está posicionado, la referencia es la ventana del navegador.
- A partir de esa referencia, la caja de la imagen se desplaza
50px
hacia la derecha (left: 50px
) y otros50px
de forma descendente (top: 50px
).
Como la imagen se posiciona de forma absoluta, el resto de elementos de la página se mueven para ocupar el lugar libre dejado por la imagen. Por este motivo, el párrafo sube hasta el principio del <div>
y se produce un solapamiento con la imagen posicionada que impide ver parte de los contenidos del párrafo.
A continuación, se modifica el ejemplo anterior posicionando de forma relativa el elemento <div>
que contiene la imagen y el párrafo. La única propiedad añadida al <div>
es position: relative
por lo que el elemento contenedor se posiciona pero no se desplaza respecto de su posición original:
div {
border: 2px solid #CCC;
padding: 1em;
margin: 1em 0 1em 4em;
width: 300px;
position: relative;
}
div img {
position: absolute;
top: 50px;
left: 50px;
}
La siguiente imagen muestra el resultado obtenido:
En este caso, como el elemento contenedor de la imagen está posicionado, se convierte en la referencia para el posicionamiento absoluto. El resultado es que la posición de la imagen es muy diferente a la del ejemplo anterior:
Por tanto, si se quiere posicionar un elemento de forma absoluta respecto de su elemento contenedor, es imprescindible posicionar este último. Para ello, sólo es necesario añadir la propiedad position: relative
, por lo que no es obligatorio desplazar el elemento contenedor respecto de su posición original.