CSS: Desbordamiento

En diseño web puede suceder que el contenido de un elemento HTML sea mayor que las dimensiones de la caja. Esto se produce cuando se ha definido un tamaño que no permite suficiente espacio para acomodar el contenido. En caso contrario, el navegador habría calculado el tamaño de forma automática.

Ejemplo de desbordamiento:

.desborda {
  border: 1px dotted #ff7f2a;
  padding: 5px;
  height: 45px;
}

Resultado:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce ut leo eu ipsum faucibus pretium. Donec iaculis lorem eleifend mi tempor porttitor. Integer porttitor dui vel dui. Donec ornare adipiscing pede. Proin elementum augue ut magna.

Tal y como se puede observar en este ejemplo, el texto sale por debajo debido a la altura de al caja, que está definida en 45 píxeles.

Si no hubiéramos definido esta altura fija de 45 píxeles, el navegador web habría calculado el alto del elemento de forma automática.

Código CSS modificado:

.nodesborda {
  border: 1px dotted #ff7f2a;
  padding: 5px;
}

Y este sería el resultado:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce ut leo eu ipsum faucibus pretium. Donec iaculis lorem eleifend mi tempor porttitor. Integer porttitor dui vel dui. Donec ornare adipiscing pede. Proin elementum augue ut magna.

¿Lo ves? Por defecto, el contenido no sobresale por el exterior del borde.

Sin embargo, si queremos que la caja del elemento HTML en cuestión tenga una altura fija y, al mismo tiempo, evitar que el contenido desborde, podremos hacerlo con una serie de propiedades específicas de CSS.

Propiedades de desbordamiento:

Propiedad Descripción
overflow Define el desbordamiento del contenido.
overflow-x Define el desbordamiento en el eje horizontal.
overflow-y Define el desbordamiento en el eje vertical
overflow-wrap Rompe palabras si desbordan.

Desbordamiento de contenido

Para tratar el desbordamiento, CSS publicó en el nivel 2 la propiedad overflow. Gracias a esta propiedad se puede indicar si se desea recortar el contenido que sobresalga o si se quiere mostrar barras de desplazamiento para mostrar el contenido deslizándose en el eje horizontal o vertical.

Además, se puede modificar el desbordamiento de forma independiente en el eje horizontal con la propiedad overflow-x (la «x» indica el eje de las abscisas). Para modificar el desbordamiento en el eje vertical se usa la propiedad overflow-y (la «y» indica el eje de las ordenadas).

Valores para controlar el desbordamiento:

Valor Descripción
visible Valor por defecto. El contenido que sobresale será visible. Se permite el desbordamiento.
hidden Se oculta el contenido que sobresale, por lo que no hay desbordamiento (se esconde).
scroll Aparecen las dos barras de desplazamiento (horizontal y vertical) para poder ver el contenido que sobresale.
auto Aparecen las barras de desplazamiento si es necesario: sólo la horizontal, sólo la vertical, las dos o ninguna.

Si el valor es visible, siempre se desbordará. En cambio, si el valor es hidden, el contenido que sobresale quedará escondido, como si se tratara de una ventana y mirásemos a través de ella: una parte del exterior queda escondida.

.esconde {
  border: 1px dotted #ff7f2a;
  padding: 5px;
  overflow: hidden;
  height: 45px;
}

Tal y como se puede ver en este ejemplo, parte del contenido que habría desbordado queda oculto a partir de los 45 píxeles de altura:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce ut leo eu ipsum faucibus pretium. Donec iaculis lorem eleifend mi tempor porttitor. Integer porttitor dui vel dui. Donec ornare adipiscing pede. Proin elementum augue ut magna.

Por tanto, vamos a colocar una barra de desplazamiento vertical:

.vertical {
  border: 1px dotted #ff7f2a;
  padding: 5px;
  overflow-y: scroll;
  height: 45px;
}

Resultado:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce ut leo eu ipsum faucibus pretium. Donec iaculis lorem eleifend mi tempor porttitor. Integer porttitor dui vel dui. Donec ornare adipiscing pede. Proin elementum augue ut magna.

Con la propiedad overflow-y y el valor scroll forzamos la barra de desplazamiento vertical. Con overflow: auto obtendríamos el mismo resultado: el navegador vería que el contenido es mayor que el tamaño indicado, por lo que insertaría la misma barra de desplazamiento.

Ahora vamos a colocar la barra de desplazamiento horizontal:

.horizontal {
  border: 1px dotted #ff7f2a;
  padding: 5px;
  overflow-x: scroll;
  height: 45px;
  width: 100%;
  white-space: pre;
}

Resultado:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce ut leo eu ipsum faucibus pretium. Donec iaculis lorem eleifend mi tempor porttitor. Integer porttitor dui vel dui. Donec ornare adipiscing pede. Proin elementum augue ut magna.

Para poder visualizar el resultado se especifica un ancho del 100%, ajustando el texto a la totalidad del elemento padre, que en este caso es <blockquote>. También se añade la propiedad white-space: pre para que el texto no fluya hacia abajo sino hacia la derecha.

Desbordamiento de texto

El desbordamiento de texto puede llegar a ser algo más complejo. Por ejemplo, puede darse el caso de que tengamos palabras muy largas que sobresalen hacia el exterior de la caja del elemento HTML. Podemos usar la propiedad overflow-wrap para solucionar este problema rompiendo palabras largas.

Veamos un ejemplo. Creamos una caja con una anchura máxima de 100 píxeles e introducimos el valor del número Pi con 16 decimales. Al no tener espacios, por defecto el navegador los mantendrá unidos. No especificamos una altura para provocar que el navegador la ajuste automáticamente.

.texto {
  border: 1px dotted #ff7f2a;
  display: inline-block;
  padding: 5px;
  overflow-wrap: normal;
  max-width: 100px;
}

El resultado es que el texto sobresale por la derecha.

El valor de Pi es 3,1415926535897932.

Para solucionar esto, la propiedad overflow-wrap permite dos valores: uno para romper palabras que desbordan y otro para romper la línea en cualquier lugar:

Valor Descripción
normal Las palabras largas no se rompen.
break-word Rompe las palabras que desbordan.
anywhere Rompe la línea en cualquier lugar.

Tanto si usamos break-word como si usamos anywhere, como resultado veremos los decimales de Pi partidos, continuando en la línea siguiente.

El valor de Pi es 3,1415926535897932.

Si lo que se quiere es indicar al usuario que debido al desbordamiento del texto, este se queda escondido dentro de los límites de la zona del contenido, se debe usar la propiedad de texto text-overflow. Esta propiedad solo funcionará si se usa overflow: hidden y white-space: nowrap.

← Artículo anterior
Artículo siguiente →