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.

Screenshot-2021-08-30-at-2.00.39-PM

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Γ­:

Screenshot-2021-08-30-at-2.14.15-PM

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.

circle-exclamation

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

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.

relab

Para que quede mas claro aqui tienes el siguiente ejemplo;

DeberΓ­a verse asΓ­:

Ahora, seleccionamos nuestras clases asΓ­:

Ahora, escribe esto en tu cΓ³digo CSS:

AquΓ­ estΓ‘ el resultado:

Frame-14
The result is that the pink box has moved right 100px

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:

AquΓ­ tenemos el resultado:

El resultado es que la caja rosa se moviΓ³ 100px desde el body.
The result is that the pink box has moved 100px from the body

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:

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Γ‘.

circle-info

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

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.

circle-exclamation

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:

El orden de apilamiento automΓ‘tico darΓ­a lugar al siguiente resultado:

circle-info

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

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.

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