Menu

CSS overflow: hidden, scroll, auto, clip ed ellissi

overflow decide cosa succede al contenuto che non entra nel suo riquadro: mostrarlo, tagliarlo o aggiungere le barre di scorrimento. Impara visible, hidden, scroll, auto e clip, overflow-x e overflow-y, l'ellissi nel testo e gli effetti collaterali di overflow sul layout.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Cosa fa overflow

Quando il contenuto è più grande del suo riquadro (un'altezza fissa, una parola lunga, una tabella larga), trabocca. La proprietà overflow decide cosa succede alla parte in eccesso:

ValoreCosa vediContenitore di scorrimento
visible (predefinito)Il contenuto esce dal riquadro e si sovrappone a ciò che segueNo
hiddenTagliato al bordo del padding, senza barre di scorrimento (uno script può ancora farlo scorrere)Sì
clipTagliato, e nessuno scorrimento, nemmeno tramite scriptNo
scrollMostra sempre le barre di scorrimento, anche se il contenuto ci staSì
autoBarre di scorrimento solo quando il contenuto non ci staSì

Su macOS e sui telefoni le barre di scorrimento stanno sopra il contenuto e svaniscono, quindi scroll e auto possono sembrare uguali finché non scorri.

Creare un riquadro scorrevole

Un riquadro trabocca solo se qualcosa ne limita la dimensione. Un height o un max-height, più overflow-y: auto, trasformano un elenco lungo in un pannello che scorre:

Qui max-height è meglio di height: un elenco corto resta corto e scorre solo un elenco lungo. A un'area scorrevole senza contenuto focalizzabile al suo interno conviene dare tabindex="0", così anche chi usa la tastiera può farla scorrere.

overflow-x e overflow-y

I due assi si possono impostare separatamente. L'uso tipico è una tabella larga che scorre di lato dentro il suo contenitore invece di allargare tutta la pagina:

Una regola da ricordare: se un asse è hidden, scroll o auto, un valore visible sull'altro asse diventa auto. Quindi overflow-x: hidden da solo può darti una barra di scorrimento verticale inattesa. overflow-x: clip non ha questo effetto:

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

Tagliare il testo con un'ellissi

text-overflow: ellipsis sostituisce la fine tagliata di una riga con "…". Servono tre cose insieme: una larghezza limitata, un testo che non può andare a capo e l'overflow nascosto:

Il line clamp con prefisso -webkit- funziona in Chrome, Firefox e Safari. Gli screen reader leggono comunque il testo completo, quindi per loro le parole tagliate non vanno perse.

Effetti collaterali di overflow

Impostare overflow su un valore diverso da visible o clip cambia più del semplice taglio:

  • Contiene i float e i margini dei figli. L'elemento forma un nuovo contesto di formattazione a blocchi, quindi cresce per avvolgere i figli flottanti. display: flow-root fa lo stesso senza tagliare niente.
  • Rompe position: sticky al suo interno. Un figlio sticky si attacca al contenitore di scorrimento più vicino; se quel contenitore non scorre, non si attacca niente.
  • Taglia i figli posizionati in modo assoluto (quando l'elemento che trabocca è anche il loro blocco contenitore), compresi menu a tendina e tooltip, e taglia anche le ombre dei figli.

Nascondere la barra di scorrimento

Puoi mantenere un riquadro scorrevole nascondendo la sua barra con scrollbar-width: none. Usalo con moderazione: senza barra di scorrimento, molti lettori non si accorgono che c'è altro contenuto. scrollbar-gutter: stable fa il lavoro opposto: riserva lo spazio della barra, così il contenuto non si sposta quando compare.

Errori comuni

  • Aspettarsi un overflow senza limite di dimensione. Un riquadro senza height o max-height cresce invece di traboccare.
  • overflow: hidden su body per "sistemare" lo scorrimento orizzontale. Trova invece l'elemento troppo largo (spesso un width fisso, un URL lungo o 100vw con una barra di scorrimento).
  • Ellissi senza white-space: nowrap. Il testo va a capo, quindi niente trabocca in orizzontale e l'ellissi non compare.
  • overflow-x: hidden che crea una barra di scorrimento verticale. Usa clip.
  • Un menu a tendina tagliato dalla sua card. L'overflow: hidden della card lo taglia; sposta la regola overflow o disegna il menu fuori dalla card.

Domande frequenti

Cosa fa overflow: hidden?

Taglia il contenuto che non entra nel riquadro di padding dell'elemento, senza barre di scorrimento. La parte nascosta si può comunque raggiungere scorrendo tramite script o mettendo il focus su qualcosa al suo interno.

Qual è la differenza tra overflow auto e scroll?

scroll riserva sempre le barre di scorrimento, anche quando il contenuto ci sta. auto mostra una barra solo quando il contenuto è più grande del riquadro, ed è quello che di solito vuoi.

Come rendo scorrevole un div?

Limita la sua dimensione e consenti lo scorrimento: max-height: 300px; overflow-y: auto;. Senza un limite di altezza o di altezza massima, il div cresce con il suo contenuto e non trabocca mai.

Perché overflow-x: hidden aggiunge anche una barra di scorrimento verticale?

Se un asse è hidden, scroll o auto, un valore visible sull'altro asse viene calcolato come auto. Usa invece overflow-x: clip, che non crea un contenitore di scorrimento e lascia visibile l'altro asse.

Come aggiungo un'ellissi (...) al testo che trabocca?

Per una riga: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; su un elemento con larghezza limitata. Per più righe, usa display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA