En esta página
Display y posicionamiento en CSS
La propiedad display
La propiedad display es una de las más fundamentales en CSS. Define como un elemento participa en el flujo del documento y como se comportan sus hijos.
Valores clasicos de display
| Valor | Comportamiento | Ejemplo por defecto |
|---|---|---|
block |
Ocupa todo el ancho, genera salto de linea | <div>, <p>, <h1> |
inline |
Fluye con el texto, no acepta width/height | <span>, <a>, <strong> |
inline-block |
Fluye en linea pero acepta dimensiones | <img>, <button> |
none |
Elimina el elemento del flujo y renderizado | - |
block vs inline: la diferencia fundamental
Un elemento block se comporta como un párrafo: empieza en una nueva linea y se estira hasta el ancho completo de su contenedor. Puedes controlar su width, height, margin y padding en todas las direcciones.
Un elemento inline se comporta como una palabra dentro de una oracion: fluye horizontalmente con el contenido circundante. No respeta width ni height, y solo acepta margin y padding horizontales.
inline-block: lo mejor de ambos mundos
inline-block permite que un elemento fluya en linea junto a otros elementos, pero a diferencia de inline, si acepta dimensiones (width, height) y margin/padding en todas las direcciones.
Posicionamiento con position
La propiedad position controla como se coloca un elemento en la página. Trabaja junto con las propiedades top, right, bottom y left.
static (por defecto)
El elemento sigue el flujo normal del documento. Las propiedades top, right, bottom, left y z-index no tienen efecto.
relative
El elemento mantiene su espacio en el flujo, pero se puede desplazar visualmente respecto a su posición original.
.desplazado {
position: relative;
top: 10px; /* Se mueve 10px hacia abajo */
left: 20px; /* Se mueve 20px a la derecha */
}El espacio original del elemento se conserva, los demas elementos no se mueven.
absolute
El elemento sale del flujo y se posiciona respecto a su ancestro posicionado más cercano (con position distinto de static). Si no hay ninguno, se posiciona respecto al <html>.
.padre {
position: relative; /* Crea el contexto */
}
.hijo-absoluto {
position: absolute;
top: 0;
right: 0; /* Esquina superior derecha del padre */
}fixed
Similar a absolute, pero se posiciona respecto al viewport (la ventana del navegador). No se mueve al hacer scroll.
Usos comunes: barras de navegación fijas, botones flotantes, modales.
sticky
Combina relative y fixed. El elemento se comporta como relative hasta que el scroll alcanza un umbral definido con top, y entonces se "pega" como fixed.
.nav-sticky {
position: sticky;
top: 0; /* Se pega cuando llega al tope */
}Requisito: el contenedor padre debe tener suficiente altura para que el efecto sticky sea visible.
El contexto de apilamiento (z-index)
Cuando los elementos se superponen (con position: absolute, fixed, etc.), z-index controla cual aparece encima. Valores mayores se renderizan por delante.
.modal-overlay { z-index: 100; }
.modal-contenido { z-index: 101; }
.tooltip { z-index: 200; }Stacking context
Un nuevo contexto de apilamiento se crea cuando un elemento tiene:
position+z-indexdistinto deautoopacitymenor a 1transform,filterobackdrop-filterisolation: isolate
Dentro de cada contexto, los z-index son independientes. Un z-index: 9999 dentro de un contexto no supera un z-index: 1 fuera de el.
Propiedad inset (atajo moderno)
En lugar de escribir top, right, bottom y left por separado, puedes usar inset:
.overlay {
position: fixed;
inset: 0; /* Equivale a top:0 right:0 bottom:0 left:0 */
}Con display y position dominados, estas listo para aprender Flexbox, el sistema de layout que revoluciono la forma de construir interfaces.
Práctica
- Compara block, inline e inline-block: Crea tres elementos, uno con cada valor de display, y verifica cuales aceptan
widthyheighty cuales generan salto de linea. - Crea un badge con position absolute: Construye una tarjeta con
position: relativey coloca un badge de notificacion en la esquina superior derecha usandoposition: absolute. - Implementa un header sticky: Crea una pagina con contenido largo y un header que se pegue al tope al hacer scroll usando
position: sticky.
/* Comportamiento block */
.bloque {
display: block;
width: 100%;
padding: 1rem;
background: #e8f4f8;
margin-block-end: 0.5rem;
}
/* Comportamiento inline */
.en-linea {
display: inline;
padding: 0.25rem 0.5rem;
background: #ffeaa7;
/* width y height NO funcionan en inline */
}
/* Lo mejor de ambos mundos */
.en-linea-bloque {
display: inline-block;
width: 150px;
height: 50px;
padding: 0.5rem;
background: #dfe6e9;
vertical-align: middle;
}
/* Desaparecer sin rastro */
.oculto {
display: none;
}
/* Sticky: se pega al hacer scroll */
.header-sticky {
position: sticky;
top: 0;
z-index: 100;
background: white;
box-shadow: 0 2px 4px rgb(0 0 0 / 10%);
}
/* Fixed: siempre visible */
.boton-flotante {
position: fixed;
bottom: 2rem;
right: 2rem;
z-index: 50;
}
/* Absolute dentro de relative */
.tarjeta {
position: relative;
padding: 1.5rem;
}
.tarjeta .badge {
position: absolute;
top: -0.5rem;
right: -0.5rem;
background: #e74c3c;
color: white;
border-radius: 50%;
width: 24px;
height: 24px;
display: grid;
place-items: center;
font-size: 0.75rem;
}
Inicia sesión para guardar tu progreso