Overflow

Se un contenuto si estende oltre l'elemento principale, ci sono molte opzioni per gestirlo. Puoi scorrere per aggiungere altro spazio, ritagliare i bordi sovraccarichi, indicare il taglio con i puntini di sospensione e molto altro ancora. L'overflow è particolarmente importante da considerare quando si sviluppano applicazioni per smartphone e più dimensioni dello schermo.

In CSS sono disponibili due diverse opzioni di ritaglio: text-overflow è utile per le singole righe di testo, mentre le proprietà overflow consentono di controllare il sovraccarico nel modello a riquadro.

Sovrabbondanza di una riga con text-overflow

Utilizza la proprietà text-overflow su qualsiasi elemento contenente nodi di testo, ad esempio un paragrafo, <p>. Consente di specificare l'aspetto del testo quando non rientra nello spazio disponibile dell'elemento. Tutto il testo HTML visibile su una pagina si trova in nodi di testo. Per utilizzare text-overflow, devi avere una singola riga di testo non a capo, quindi devi anche impostare overflow su hidden e avere un valore white-space che impedisca il rientro.

p {
   
text-overflow: ellipsis;
   
overflow: hidden;
   
white-space: nowrap;
}

Utilizzare le proprietà overflow

Le proprietà di overflow vengono impostate su un elemento per controllare cosa succede quando i relativi elementi secondari richiedono più spazio di quello disponibile. Questo può essere intenzionale, ad esempio in una mappa interattiva come Google Maps, in cui un utente esegue la panoramica di un'immagine di grandi dimensioni ritagliata in base a dimensioni specifiche. Può anche essere involontario, ad esempio in un'applicazione di chat in cui l'utente digita un messaggio lungo che non entra nella bolla di testo.

Puoi considerare l'overflow in due parti. L'elemento principale ha uno spazio saldamente vincolato che non cambierà. Puoi considerarlo una finestra. Gli elementi secondari sono contenuti che richiedono più spazio dall'elemento principale. Puoi considerarlo come ciò che stai guardando dalla finestra. La gestione dell'overflow ti aiuterà a definire il modo in cui la finestra inquadra questi contenuti.

Scorrimento sull'asse verticale e orizzontale

La proprietà overflow-y controlla lo spazio aggiuntivo fisico lungo l'asse verticale dell'area visibile del dispositivo, quindi lo scorrimento verso l'alto e verso il basso.

La proprietà overflow-x controlla l'overflow lungo l'asse orizzontale dell'area visibile del dispositivo, quindi scorre verso sinistra e verso destra.

Proprietà logiche per la direzione di scorrimento

Supporto dei browser

  • Chrome: non supportato.
  • Edge: non supportato.
  • Firefox: 69.
  • Safari: non supportato.

Origine

Le proprietà overflow-inline e overflow-block impostano lo spazio aggiuntivo in base all'orientamento e alla modalità di scrittura del documento.

La forma abbreviata di overflow

La forma breve overflow imposta gli stili overflow-x e overflow-y su un'unica riga:

overflow: hidden scroll;

Se vengono specificate due parole chiave, la prima si applica a overflow-x e la seconda a overflow-y. In caso contrario, sia overflow-x che overflow-y utilizzano lo stesso valore.

Valori

Esaminiamo più da vicino i valori e le parole chiave disponibili per le proprietà overflow.

overflow: visible (valore predefinito)
Se non viene impostata la proprietà, overflow: visible è il valore predefinito per il web. In questo modo i contenuti non vengono mai nascosti involontariamente e seguono i principi fondamentali del "contenuto mai nascosto" o "layout sicuri di layout precisi".
overflow: hidden
I contenuti overflow: hidden vengono ritagliati nella direzione specificata e non vengono fornite barre di scorrimento per mostrarli.
overflow: scroll
overflow: scroll attiva le barre di scorrimento per consentire agli utenti di scorrere i contenuti. Anche se al momento non ci sono contenuti overflow, saranno presenti barre di scorrimento. Si tratta di un ottimo modo per ridurre le future variazioni del layout se un contenitore può essere scorrevole in futuro in base, ad esempio, al ridimensionamento, e per preparare visivamente l'utente alle aree scorrevoli.
overflow: clip
Come overflow: hidden, i contenuti con overflow: clip vengono adattati al riquadro di spaziatura dell'elemento. La differenza tra clip e hidden è che la parola chiave clip impedisce anche tutto lo scorrimento, incluso quello programmatico.
overflow: auto
Infine, il valore più utilizzato, overflow: auto. In questo modo vengono rispettate le preferenze dell'utente e, se necessario, vengono mostrate le barre di scorrimento, ma vengono nascoste per impostazione predefinita e la responsabilità dello scorrimento viene assegnata all'utente e al browser.

Scorrimento e overflow

Molti di questi comportamenti overflow introducono una barra di scorrimento, ma esistono alcuni comportamenti e proprietà di scorrimento specifici che possono aiutarti a controllare lo scorrimento nel contenitore overflow.

Scorrimento e accessibilità

È importante assicurarsi che l'area scorrevole possa accettare lo stato attivo in modo che un utente con tastiera possa passare alla casella con il tasto Tab e poi usare i tasti freccia per scorrere.

Per consentire a una casella di scorrimento di accettare lo stato attivo, aggiungi tabindex="0", un nome con l'attributo aria-labelledby e un attributo role appropriato. Ad esempio:

<div tabindex="0" role="region" aria-labelledby="id-of-descriptive-text">
    content
</div>

I CSS possono essere utilizzati per indicare che la casella ha il focus, utilizzando la proprietà outline per dare un indizio visivo che ora sarà scorrevole.

In Using CSS to Enforce Accessibility, Adrian Roselli spiega come i CSS possono aiutare a prevenire le regressioni dell'accessibilità. Ad esempio, per attivare lo scorrimento e aggiungere l'indicatore di stato attivo solo se vengono utilizzati gli attributi corretti. Le seguenti regole rendono la casella scorrevole solo se ha un attributo tabindex, aria-labelledby e role.

[role][aria-labelledby][tabindex] {
 
overflow: auto;
}

[role][aria-labelledby][tabindex]:focus {
 
outline: .1em solid blue;
}

Posizionamento della barra di scorrimento all'interno del modello a scatola

Le barre di scorrimento occupano spazio all'interno della casella di spaziatura e possono competere per lo spazio se inline e non overlaid. Il modulo box model espande maggiormente questa potenziale origine della variazione del layout.

root-scroller e implicit-scroller

Potresti notare che alcuni scorrimenti hanno un comportamento di pull-to-refresh e altri comportamenti speciali, in particolare durante lo sviluppo di applicazioni mobile e ibride. Questo comportamento di scorrimento si verifica nello strumento di scorrimento principale. Esiste sempre un solo scorrimento root per pagina. Per impostazione predefinita, documentElement è lo scorrimento principale della pagina, ma cambiando l'elemento che funge da scorrimento principale, i comportamenti speciali possono essere applicati a scorrimenti diversi da documentElement. Chiamiamo questo nuovo scorrimento scorrimento principale implicito.

Per creare uno scorrimento principale, puoi utilizzare la funzionalità di promozione dello scorrimento posizionando un contenitore come fisso, assicurando che copra l'intera area visibile e che sia impostato lo z-index nella parte superiore con uno scorrimento. Prova uno scorrimento principale rispetto a uno strumento di scorrimento implicito nidificato qui.

Il video mostra uno scroller principale con comportamento di rimbalzo e nuove funzionalità di stile,
rispetto allo scorrimento di uno scroller implicito senza comportamento di scorrimento avanzato.

scroll-behavior

Supporto dei browser

  • Chrome: 61.
  • Edge: 79.
  • Firefox: 36.
  • Safari: 15.4.

Origine

scroll-behavior consente di attivare lo scorrimento degli elementi controllato dal browser. In questo modo puoi specificare come vengono gestiti la navigazione in-page, ad esempio .scrollTo() o i link.

Questo è particolarmente utile se utilizzato con prefers-reduced-motion per specificare il comportamento di scorrimento in base alle preferenze dell'utente.

@media (prefers-reduced-motion: no-preference) {
 
.scroll-view {
   
scroll-behavior: auto;
 
}
}

overscroll-behavior

Supporto dei browser

  • Chrome: 63.
  • Edge: 18.
  • Firefox: 59.
  • Safari: 16.

Origine

Se hai mai raggiunto la fine di un overlay modale, hai continuato a scorrere e la pagina dietro l'overlay si è spostata, si tratta di una catena di scorrimento o di un trasferimento al contenitore di scorrimento principale. La proprietà overscroll-behavior consente di impedire che lo scorrimento con overflow venga visualizzato in un contenitore principale (chiamato concatenamento di scorrimento).

Verificare di aver compreso

Metti alla prova le tue conoscenze sull'overflow

L'overflow del testo e l'overflow dell'elemento sono uguali?

true
falso

La proprietà overflow accetta due parole chiave. La prima parola chiave è per quale asse?

verticale
orizzontale

Quale spazio nel modello a casella viene occupato dalle barre di scorrimento quando vengono visualizzate e incorporate?

riquadro di confine
riquadro dei contenuti
riquadro del margine
riquadro di spaziatura interna

Per bloccare lo slancio in più durante lo scorrimento in uno strumento di scorrimento implicito nidificato, quale proprietà useresti?

scroll-hint
overscroll-behavior
scroll-padding
scroll-behavior
overscroll-effect

Risorse

Overflow and Data Loss in CSS from Smashing Magazine