Position

La propiedad CSS position establece cรณmo se posiciona un elemento en un documento. Las propiedades top, right, bottom y left determinan la ubicaciรณn final de los elementos posicionados.

Por defecto, la propiedad position de todos los elementos HTML en CSS se establece como static. Esto significa que si no se especifica ningรบn otro valor de position o si la propiedad position no se declara explรญcitamente, serรก static.

Visualmente, todos los elementos siguen el orden del cรณdigo HTML, y de esa manera se crea el tรญpico flujo del documento.

top, right, bottom, left

Recordemos que cada elemento HTML contiene su propio sistema de coordenadas local (top, right, bottom y left). Estas propiedades empujara el elmentos hacia la direccion especificada.

Por ejemplo, si desea colocar un elemento hijo dentro de un elemento padre ya situado en algรบn lugar de su documento HTML, el hijo heredarรก el sistema de coordenadas del padre, que tiene su origen en la esquina superior izquierda del elemento padre (0x0).

Al mover un elementos este se mueve con respecto a su posicion inicial

position relative

position: relative funciona igual que position: static;, pero permite cambiar la posiciรณn de un elemento.

Sin embargo, escribir sรณlo esta regla CSS no cambiarรก nada.

Para modificar la posiciรณn, tendrรกs que aplicar las propiedades top, bottom, right y left mencionadas anteriormente y de esa manera especificar dรณnde y cuรกnto quieres mover el elemento.

Ahora, puedes mover el primer cuadrado a la izquierda actualizando el CSS asรญ:

position: relative; cambia la posiciรณn del elemento con respecto al elemento padre y con respecto a sรญ mismo y a donde estarรญa normalmente en el flujo regular del documento de la pรกgina. Esto significa que es relativo a su posiciรณn original dentro del elemento padre.

position absolute

El elemento es eliminado del flujo del documento y los demรกs elementos se comportarรกn como si no estuviera allรญ, mientras que todas las demรกs propiedades posicionales funcionarรกn en รฉl. Si lo mueves usarรก el elemento posicionado contenedor como referencia. Si no tiene ninguno, usara el elemento html como referencia.

Con position: absolute; el elemento pierde sus medidas, en vez de ocupar el 100% como un elemento de bloque, ocupa lo que ocupe su contenido ya que pierde su espacio reservado. Sin embargo, si le aplicas tu medidas con width y height este ocupara lo que le especifiques.

Para que quede mas claro observa lo que genera el siguiente codigo:

.one {
  background-color: powderblue;
  position: absolute;
}

Como puedes observar la caja 2 ha "desaparecido". Esto de debe a que como ya no esta en el flujo normal, los demas objetos se comportan como si no existiera y por ello suben todos una posicion hacia arriba.

Relacion entre posicion relativa y absoluta

Ambas posiciones, la relativa y la absoluta, funcionan de la misma manera excepto en un campo. Usamos relative para identificar las clases padre. Y usamos absolute para identificar las clases hijo.

Para que quede mas claro aqui tienes el siguiente ejemplo;

<body>
   <div class="caja-1">
    
       <div class="caja-2"> </div>	
        
   </div>
</body>
.caja-1{
	width: 300px;
	height: 300px;
	background-color: skyblue;
	border: 2px solid black;
    margin: auto;
}

.caja-2{
	width: 100px;
	height:100px;
	background-color: pink;
	border: 2px solid black;
}

Deberรญa verse asรญ:

Ahora, seleccionamos nuestras clases asรญ:

body{ }

.caja-1{ }

.caja-2{ }

Ahora, escribe esto en tu cรณdigo CSS:

body{
	
}

.caja-1{
/* Este es el padre */
	position: relative;
}
.caja-2{
/* Este es el hijo */
	position: absolute;
	left: 100px;
}

Aquรญ estรก el resultado:

Observa que la .caja-2 se moviรณ 100px a partir .caja-1.

Esto es porque .caja-1 es el padre y .caja-2 es el hijo.

Cambiรฉmoslo otra vez. Escribe esto en tu cรณdigo CSS:

body{
/* Este es el padre */
   position: relative;	
}

.caja-1{

}
.caja-2{
/* Este es el hijo */
   position: absolute;
    left: 100px;
}

Aquรญ tenemos el resultado:

Observa que .caja-2 se moviรณ 100px a partir el elemento body.

Esto es porque el body es el padre y .caja-2 es el hijo.

Position fixed

funciona parecido a position: absolute;, el elemento perdera su posicion y medidas y en el caso de que lo movamos usara el elemento html de referecia. Sin embargo la propiedad unica que tiene, es que aunque hagamos scroll, se quedara fijo en esa posicion de la pantalla

Con la apariciรณn de sticky ya casi no se usa, sobretodo esta para dar soporte a naavegadores antiguos

con un ejemplo visual quedara mas claro:

<div class="contenedor">
	<p>lorem200</p>   
	<div class="caja-1"> fixed </div>
	<p>lorem200</p>		
</div>
.contenedor{
	height: 3000px;
}

.caja-1{
	height: 120px;
	width: 120px;
	background-color: skyblue;
	border: 2px solid black;
	
	display: grid;
	place-content: center;
	
	position: fixed;
	top: 100px;
	left: 200px;
}

Aquรญ estรก el resultado:

Position sticky

Despuรฉs de desplazarnos a cierto punto de nuestra pantalla este valor, podrรก fijar la posiciรณn de nuestro elemento en la pantalla entonces no se moverรก.

position: sticky; coge como referencia el height del elemento padre, por ello si el padre no tiene un height establecido esta propiedad no funcionara.

.caja-1{
   position: sticky;
   top: 30px;
   left: 200px;
}

El elemento solo se queda pegado "sticky" mientras recorra el height del padre. Es decir si el padre tiene 200px, y le aplicamos a nuestra caja un top: 50px el elemento estara pegado a partir del pixel 50 durante 150px. Luego, si seguimos haciendo scroll si ira para arriba.

Con la propiedad overflow declarada no funciona

z-index

La propiedad z-index en CSS se utiliza para ordenar los elementos que se superpongan entre sรญ. Con la propiedad z-index podemos controlar quรฉ elemento irรญa encima y cual debajo, como si el documento tuviera profundidad, tres dimensiones en lugar de dos.

El valor predeterminado de z-index es auto. El navegador irรก ordenando los elementos en el orden en el que aparezcan, el primero quedarรก abajo y los siguientes elementos se irรกn apilando encima. Esta regla la aplica en este orden:

  1. Primero posiciona el elemento raรญz <html>

  2. Luego los elementos no posicionados (cualquiera con el valor predeterminado position: static)

  3. Luego los elementos posicionados (cualquiera con position: relative, position: absolute, position: fixed, position: sticky, o cualquier otro valor diferente a position: static).

Al tener dos elementos posicionados prevalece el orden del HTML

Vamos a ver como los elementos no posicionados son colocados primero aunque aparezcan los รบltimos en el HTML:

<style>
    .azul, .rojo, .verde {
        position: absolute;
    }
</style>
<div class="rojo">
    <div class="verde"></div>
</div>
<div class="gris"></div>
<div class="azul"></div>

El orden de apilamiento automรกtico darรญa lugar al siguiente resultado:

No es recomendable utilizar los valores de uno en uno, mejor hacerlo de diez en dize o de cien en cien, por si algun dia quieres meter un valor entre medias

Ahora utilizando z-index, queda el siguiente resultado

.gris, .rojo, .verde {
    position: absolute;
}
.gris {
    z-index: 2;
}
.verde {
    z-index: 3;
}
.azul {
    z-index: 100; // Sin efecto, es un elemento no-posicionado.
}

Un problema muy comรบn a la hora de utilizar z-index es intentar colocar un elemento padre por delante de un elemento hijo. Esto es totalmente imposible. Lo que si es posible y aunque parezca lo mismo, es colocar un elemento hijo por detrรกs del padre. Para esto tan solo hay que aplicarle la propiedad z-index negativa al hijo.

.verde {
    z-index: -1;
}

Sin embargo, en el momento en el que le demos un valor z-index al padre esto se rompera. Es decir que para que un hijo este por detrรกs de un padre, es necesario que el padre no tenga la propiedad z-index o que tenga declarado z-index: auto;.

Bibliografia

Last updated