Volver a la página principal
sábado 13 julio 2024
27

Diferencias entre position: relative; y position: absolute; en CSS

position: relative;

La propiedad position: relative; posiciona un elemento en relación con su posición original en el flujo del documento. Es decir, el elemento se mantiene en el flujo normal de la página, pero puede ser movido de su posición original utilizando las propiedades de desplazamiento (top, right, bottom, left).

Características de position: relative;

1. Mantiene el espacio original en el flujo del documento:

  • Aunque se mueva el elemento, el espacio que ocupaba originalmente se conserva, afectando el diseño de los elementos adyacentes.
  • Esto es útil cuando se necesita ajustar la posición de un elemento sin alterar el flujo general del diseño.

2. Referencias de desplazamiento:

  • Las propiedades top, right, bottom, left permiten mover el elemento relativo a su posición original.
  • Por ejemplo, top: 10px; desplazará el elemento 10 píxeles hacia abajo desde su posición original.

3. No afecta a los elementos hijos:

  • Los elementos secundarios no se ven afectados directamente por la propiedad position: relative; del elemento padre.

Ejemplo de position: relative;

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ejemplo de Position Relative</title>
<style>
  .contenedor {
    width: 200px;
    height: 200px;
    background-color: lightblue;
    position: relative;
  }

  .contenido {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
    position: relative;
    top: 20px;
    left: 30px;
  }
</style>
</head>
<body>
  <div class="contenedor">
    <div class="contenido"></div>
  </div>
</body>
</html>

En este ejemplo, el div con la clase contenido se desplaza 20 píxeles hacia abajo y 30 píxeles a la derecha de su posición original dentro del contenedor, pero el espacio original que ocupaba se mantiene.

position: absolute;

La propiedad position: absolute; posiciona un elemento en relación con el ancestro más cercano que tenga una posición distinta de static (puede ser relative, absolute, fixed o sticky). Si no hay ningún ancestro posicionado, el elemento se posiciona en relación con el contenedor inicial del documento (generalmente el html o body).

Características de position: absolute;

1. Remoción del flujo del documento:

  • Un elemento con position: absolute; se elimina del flujo normal del documento.
  • No afecta ni es afectado por la disposición de los elementos adyacentes.

2. Posicionamiento basado en el contenedor posicionado más cercano:

  • Las propiedades de desplazamiento (top, right, bottom, left) son relativas al contenedor posicionado más cercano.
  • Si no hay ningún contenedor posicionado, se usa el contenedor inicial del documento.

3. Afecta a los elementos hijos:

  • Los elementos secundarios se posicionan en relación con el elemento posicionado absoluto si estos tienen position: absolute; o position: fixed;.

Ejemplo de position: absolute;

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ejemplo de Position Absolute</title>
<style>
  .contenedor {
    width: 200px;
    height: 200px;
    background-color: lightblue;
    position: relative;
  }

  .contenido {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
    position: absolute;
    top: 20px;
    left: 30px;
  }
</style>
</head>
<body>
  <div class="contenedor">
    <div class="contenido"></div>
  </div>
</body>
</html>

En este ejemplo, el div con la clase contenido se posiciona 20 píxeles hacia abajo y 30 píxeles a la derecha del contenedor posicionado (contenedor). El espacio original que ocupaba no se mantiene, ya que se elimina del flujo del documento.

Comparación Directa

Efecto en el Flujo del Documento

  • position: relative;: Mantiene el espacio original en el flujo del documento. Útil para hacer pequeños ajustes sin romper la estructura general.
  • position: absolute;: Elimina el elemento del flujo del documento. Ideal para superponer elementos o para layouts que no dependen del flujo estándar.

Referencia de Desplazamiento

  • position: relative;: Los desplazamientos (top, right, bottom, left) son relativos a la posición original del elemento.
  • position: absolute;: Los desplazamientos son relativos al contenedor posicionado más cercano. Si no hay ninguno, se refiere al contenedor inicial del documento.

Uso Común

  • position: relative;: Ajustes menores en la posición del elemento, creación de contextos de posicionamiento para elementos secundarios.
  • position: absolute;: Creación de layouts complejos, overlays, modales, menús flotantes.

Ejemplos Combinados

Es común usar position: relative; en un contenedor padre y position: absolute; en un elemento hijo para control preciso de la posición.

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ejemplo Combinado</title>
<style>
  .contenedor {
    width: 300px;
    height: 300px;
    background-color: lightblue;
    position: relative;
  }

  .contenido {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }
</style>
</head>
<body>
  <div class="contenedor">
    <div class="contenido"></div>
  </div>
</body>
</html>

En este ejemplo, el div con la clase contenido está centrado en el contenedor usando position: absolute; y transform: translate(-50%, -50%);, aprovechando que el contenedor tiene position: relative;.

Conclusión

Entender las diferencias entre position: relative; y position: absolute; es esencial para dominar el posicionamiento de elementos en CSS. Cada una tiene sus usos específicos y ventajas en diferentes escenarios. Mientras position: relative; es útil para ajustes menores y para mantener el flujo del documento, position: absolute; es potente para layouts complejos y superposiciones. La combinación de ambas propiedades permite a los desarrolladores crear interfaces de usuario precisas y adaptables.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer