Seguimos con las mismas tres cajas hermanas y el mismo HTML. Hasta ahora se repartían el espacio entre ellas; ahora se trata de mover una sola, o de hacerla desaparecer, y de observar qué les pasa a las otras dos.
La propiedad es position, y siempre va acompañada
de top, bottom, left o right, que
indican cuánto se desplaza y hacia dónde.
position: static
top ni
left: si se escriben, se ignoran. Conviene conocerlo porque es el
punto de partida de todos los demás.position: relative
top: 20px; left: 20px; se dibuja 20 px más abajo y 20 px
más a la derecha de su posición natural.absolute. En ese caso se escribe position: relative a
secas, sin top ni left, y no mueve nada.position: absolute
position distinta de
static. Si no encuentra ninguno, se coloca respecto a la página
entera, que casi nunca es lo que se quería.position: relative; en el contenedor.position: absolute; más top / right
en el elemento.position: fixed
relative.absolute: sale del flujo.position: sticky
relative
—en su sitio, conservando su hueco— hasta que al hacer scroll llega
al borde que se le ha marcado; a partir de ahí se queda pegada, como
fixed.position: sticky; top: 0; Sin esa segunda línea no hace nada, y es
el fallo más habitual.Lo que hay que retener: relative es el ancla y
absolute es el que se mueve. Y de las cuatro, solo
relative y sticky conservan su hueco; las otras dos salen del
flujo y dejan que los hermanos se recoloquen.
visibility: hidden
display: none
display: none y volver a mostrarlo después sin tener que crearlo de
nuevo: es el mecanismo de los menús desplegables.Lo que hay que mirar no es el elemento oculto: son sus hermanos. Con
display: none se expanden y ocupan su sitio; con
visibility: hidden no se mueven. Esa es toda la diferencia.
| Propiedad | ¿Se ve? | ¿Ocupa sitio? | Respecto a qué se coloca |
|---|---|---|---|
position: static | sí | sí | donde le toca en el flujo |
position: relative | sí | sí | donde debería estar |
position: absolute | sí | no | el contenedor posicionado más cercano |
position: fixed | sí | no | la ventana del navegador |
position: sticky | sí | sí | su sitio, y luego el borde marcado |
visibility: hidden | no | sí | — |
display: none | no | no | — |