Menu

Overflow en CSS: hidden, scroll, auto, clip y text-overflow

overflow decide qué pasa con el contenido que no cabe en su caja: mostrarlo, recortarlo o agregar barras de desplazamiento. Aprende visible, hidden, scroll, auto y clip, overflow-x y overflow-y, los puntos suspensivos en el texto y los efectos secundarios de overflow en el layout.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Qué hace overflow

Cuando el contenido es más grande que su caja (una altura fija, una palabra larga, una tabla ancha), se desborda. La propiedad overflow decide qué pasa con lo que sobra:

ValorLo que vesContenedor de desplazamiento
visible (por defecto)El contenido sale de la caja y se superpone a lo que sigueNo
hiddenRecortado en el borde del padding, sin barras (un script todavía puede desplazarlo)Sí
clipRecortado, y sin ningún desplazamiento, ni siquiera por scriptNo
scrollSiempre muestra barras de desplazamiento, aunque el contenido quepaSí
autoBarras de desplazamiento solo cuando el contenido no cabeSí

En macOS y en los teléfonos las barras de desplazamiento se superponen al contenido y se desvanecen, así que scroll y auto pueden verse igual hasta que te desplazas.

Crear una caja con scroll

Una caja solo se desborda si algo limita su tamaño. Una height o una max-height, más overflow-y: auto, convierten una lista larga en un panel con desplazamiento:

Aquí max-height es mejor que height: una lista corta sigue siendo corta y solo se desplaza una lista larga. Una región con scroll que no tiene contenido enfocable dentro debería llevar tabindex="0" para que los usuarios de teclado también puedan desplazarla.

overflow-x y overflow-y

Los dos ejes se pueden definir por separado. El uso común es una tabla ancha que se desplaza hacia los lados dentro de su contenedor en lugar de ensanchar toda la página:

Una regla para recordar: si un eje es hidden, scroll o auto, un valor visible en el otro eje pasa a ser auto. Así, overflow-x: hidden solo puede darte una barra vertical inesperada. overflow-x: clip no tiene ese efecto:

.a { overflow-x: hidden; }  /* overflow-y computes to auto */
.b { overflow-x: clip; }    /* overflow-y stays visible */

Cortar texto con puntos suspensivos

text-overflow: ellipsis reemplaza el final recortado de una línea por "…". Necesita tres cosas a la vez: un ancho limitado, texto que no pueda pasar a otra línea y el desbordamiento oculto:

El line clamp con prefijo -webkit- funciona en Chrome, Firefox y Safari. Los lectores de pantalla siguen leyendo el texto completo, así que para ellos las palabras recortadas no se pierden.

Efectos secundarios de overflow

Poner overflow en cualquier valor distinto de visible o clip cambia algo más que el recorte:

  • Contiene los floats y los márgenes de los hijos. El elemento forma un nuevo contexto de formato de bloque, así que crece para envolver a los hijos con float. display: flow-root hace lo mismo sin recortar nada.
  • Rompe position: sticky por debajo. Un hijo sticky se queda fijo respecto al contenedor de desplazamiento más cercano; si ese contenedor no se desplaza, nada se queda fijo.
  • Recorta a los hijos con posición absoluta (cuando el elemento que se desborda también es su bloque contenedor), incluidos menús desplegables y tooltips, y también recorta las sombras de los hijos.

Ocultar la barra de desplazamiento

Puedes mantener una caja con scroll y ocultar su barra con scrollbar-width: none. Úsalo con moderación: sin barra, muchos lectores no se dan cuenta de que hay más contenido. scrollbar-gutter: stable hace lo contrario: reserva el espacio de la barra para que el contenido no se mueva cuando aparece una.

Errores comunes

  • Esperar un desbordamiento sin límite de tamaño. Una caja sin height ni max-height crece en lugar de desbordarse.
  • overflow: hidden en body para "arreglar" el scroll horizontal. Busca el elemento que es demasiado ancho (a menudo un width fijo, una URL larga o 100vw con barra de desplazamiento).
  • Puntos suspensivos sin white-space: nowrap. El texto pasa a otra línea, así que nada se desborda en horizontal y no aparecen los puntos suspensivos.
  • overflow-x: hidden que crea una barra vertical. Usa clip.
  • Un menú desplegable cortado por su tarjeta. El overflow: hidden de la tarjeta lo recorta; mueve la regla de overflow o renderiza el menú por fuera.

Preguntas frecuentes

¿Qué hace overflow: hidden?

Recorta el contenido que no cabe dentro de la caja de padding del elemento, sin barras de desplazamiento. La parte oculta todavía se puede alcanzar con un script o enfocando algo que esté dentro.

¿Qué diferencia hay entre overflow auto y scroll?

scroll siempre reserva las barras de desplazamiento, aunque el contenido quepa. auto muestra una barra solo cuando el contenido es más grande que la caja, que es lo que normalmente quieres.

¿Cómo hago que un div tenga scroll?

Limita su tamaño y permite el desplazamiento: max-height: 300px; overflow-y: auto;. Sin un límite de height o max-height, el div crece con su contenido y nunca se desborda.

¿Por qué overflow-x: hidden también agrega una barra vertical?

Si un eje es hidden, scroll o auto, un valor visible en el otro eje se calcula como auto. Usa overflow-x: clip, que no crea un contenedor de desplazamiento y deja visible el otro eje.

¿Cómo agrego puntos suspensivos (...) al texto que se desborda?

Para una línea: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; en un elemento con ancho limitado. Para varias líneas, usa display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR