Overflow

The CSS Podcast - 034: Overflow

Quando i contenuti si estendono oltre il relativo elemento principale, hai molte opzioni per gestirli. eraisci per aggiungere spazio, taglia i bordi in eccesso, indica 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 consente di gestire le singole righe di testo, mentre le proprietà overflow aiutano a controllare l'overflow nel modello a scatola.

Overflow di una sola riga con text-overflow

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

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

Utilizzo delle proprietà di overflow

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

Puoi pensare all'overflow in due parti. L'elemento principale ha uno spazio vincolato che non cambierà. Puoi considerarlo come una finestra. Gli elementi secondari sono contenuti che richiedono più spazio rispetto all'elemento principale. Puoi considerarlo come ciò che vedi dalla finestra. La gestione dell'overflow ti aiuterà a definire la modalità di inquadratura dei contenuti nella finestra.

Scorrimento sull'asse verticale e orizzontale

La proprietà overflow-y controlla l'overflow 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 della finestra del dispositivo, quindi lo scorrimento a sinistra e a destra.

Proprietà logiche per la direzione di scorrimento

Browser Support

  • Chrome: 135.
  • Edge: 135.
  • Firefox: 69.
  • Safari: not supported.

Source

Le proprietà overflow-inline e overflow-block impostano l'overflow in base alla direzione del documento e alla modalità di scrittura.

Abbreviazione overflow

L'abbreviazione overflow imposta gli stili overflow-x e overflow-y in una sola 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

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

overflow: visible (valore predefinito)
Senza impostare 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 di "non nascondere mai i contenuti" o "layout sicuri di layout precisi".
overflow: hidden
Con overflow: hidden i contenuti vengono ritagliati nella direzione specificata e non vengono fornite barre di scorrimento per visualizzarli.
overflow: scroll
overflow: scroll consente alle barre di scorrimento di scorrere i contenuti. Anche se i contenuti non vanno in overflow, le barre di scorrimento saranno presenti. Questo è un ottimo modo per ridurre lo spostamento del layout futuro se un contenitore potrebbe essere scorribile in futuro in base, ad esempio, al ridimensionamento e preparare visivamente l'utente alle aree scorribili.
overflow: clip
Come overflow: hidden, i contenuti con overflow: clip vengono ritagliati nella casella di riempimento dell'elemento. La differenza tra clip e hidden è che la parola chiave clip vieta anche lo scorrimento, incluso quello programmatico.
overflow: auto
Infine, il valore più comunemente utilizzato, overflow: auto. In questo modo vengono rispettate le preferenze dell'utente e le barre di scorrimento vengono mostrate se necessario, ma sono nascoste per impostazione predefinita e la responsabilità dello scorrimento viene assegnata all'utente e al browser.

Scorrimento e overflow

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

Scorrimento e accessibilità

È importante assicurarsi che l'area scorrevole possa accettare lo stato attivo in modo che un utente della tastiera possa spostarsi nella casella con il tasto Tab e poi utilizzare 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 quindi essere utilizzati per indicare che la casella è attiva, utilizzando la proprietà outline per fornire un indizio visivo che indica che ora sarà scorrevole.

In Using CSS to Enforce Accessibility (Utilizzo di CSS per applicare l'accessibilità), Adrian Roselli mostra come CSS può contribuire a prevenire le regressioni dell'accessibilità. Ad esempio, per attivare lo scorrimento e aggiungere l'indicatore di messa a fuoco solo se vengono utilizzati gli attributi corretti. Le seguenti regole renderanno 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 riempimento e possono competere per lo spazio se inline e non overlaid. Il modulo del modello a scatole approfondisce questa potenziale origine dello spostamento del layout.

root-scroller e implicit-scroller

Potresti notare che alcuni scroller hanno un comportamento di trascinamento per aggiornare e altri comportamenti speciali, soprattutto quando sviluppi per applicazioni mobile e ibride. Questo comportamento di scorrimento si verifica nello scroller principale. Su una pagina è presente un solo scroller principale. Per impostazione predefinita, documentElement è lo scorrimento principale della pagina. Tuttavia, modificando l'elemento che funge da scorrimento principale, i comportamenti speciali possono essere applicati a scorrimenti diversi da documentElement. Questo nuovo scorrimento viene chiamato scorrimento principale implicito.

Per creare uno scroller principale, puoi utilizzare la promozione dello scroller posizionando un contenitore come fisso, assicurandoti che copra l'intera area visibile e che l'indice z sia in primo piano con uno scroller. Prova uno scorrimento principale rispetto a uno scorrimento implicito nidificato qui.

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

Applicare uno stile alla barra di scorrimento

Puoi personalizzare la barra di scorrimento per integrarla nel design del tuo sito. scrollbar-color imposta il colore del cursore e della canaletta della barra di scorrimento.

Per modificare la larghezza della barra di scorrimento, utilizza scrollbar-width. Non puoi impostare una durata arbitraria, ma puoi specificare se vuoi una barra di scorrimento thin o none.

scroll-behavior

Browser Support

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

Source

scroll-behavior ti consente di attivare lo scorrimento controllato dal browser fino agli elementi. In questo modo puoi specificare come vengono gestite le navigazioni all'interno della pagina, ad esempio .scrollTo() o i link.

Questa proprietà è particolarmente utile se utilizzata 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

Browser Support

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

Source

Se hai mai raggiunto la fine di una sovrapposizione modale, hai continuato a scorrere e la pagina dietro la sovrapposizione si è spostata, questo è lo scorrimento concatenato o il bubbling fino al contenitore di scorrimento principale. La proprietà overscroll-behavior consente di impedire che lo scorrimento dell'overflow si estenda a un contenitore principale (denominato concatenamento dello scorrimento).

Allineamento dello scorrimento

Lo scorrimento è generalmente fluido e ti consente di posizionare i contenuti all'interno della finestra di scorrimento dove preferisci. Per alcuni design, come le gallerie di immagini o i contenuti che emulano pagine o slide, potresti voler fare in modo che i contenuti vengano agganciati alla finestra di visualizzazione.

Configurazione del contenitore di scorrimento

Per attivare lo scorrimento agganciato, aggiungi scroll-snap-type al contenitore di scorrimento. Per prima cosa, definisci l'asse su cui verrà eseguito lo scorrimento agganciato. Può trattarsi di una proprietà logica (block o inline), di una proprietà fisica (x o y) o di both.

Puoi anche definire il livello di rigidità dello scorrimento agganciato. Il livello di rigore predefinito è proximity, il che significa che il contenitore di scorrimento tenterà di allinearsi, se possibile. Puoi anche impostare la rigidità su mandatory per assicurarti che il contenitore di scorrimento si blocchi sempre.

.scroll-container {     scroll-snap-type: block mandatory; } 

Lo scorrimento agganciato allinea un elemento all'interno dei limiti completi del contenitore di scorrimento, ma cosa succede se parte del contenitore di scorrimento non è visibile? Ad esempio, potresti avere un'intestazione fissa che si sovrappone a una parte del contenitore di scorrimento. Per allineare gli elementi agganciati alla parte visibile del contenitore a scorrimento, puoi impostare scroll-padding.

Controllare gli elementi agganciabili

Per rendere un elemento agganciabile, imposta la proprietà scroll-snap-align su start, end o center. Se la direzione dello scorrimento è both, puoi impostare due valori. Specifica se un bordo dell'elemento verrà allineato al bordo della finestra di visualizzazione o se verrà centrato.

Puoi regolare la spaziatura intorno ai bordi dell'elemento agganciato con scroll-margin:

scroll-margin viene utilizzato anche per impostare il padding durante lo scorrimento fino a un elemento:

Per rendere lo scorrimento più appiccicoso, puoi aggiungere scroll-snap-stop: always a un elemento in un contenitore di scorrimento. Non impedisce di scorrere più elementi in un'unica operazione di scorrimento. Se termini un movimento di scorrimento in modo che lo scorrimento continui per inerzia, lo scorrimento terminerà nella posizione di snap successiva, anziché continuare oltre.

Verifica la tua comprensione

L'overflow di testo e l'overflow di elementi sono uguali?

true
L'overflow di testo è speciale rispetto all'overflow di elementi.
falso
L'overflow di testo riguarda in genere l'overflow in linea, mentre l'overflow di elementi riguarda l'overflow di blocchi.

La proprietà overflow accetta due parole chiave. A quale asse si riferisce la prima parola chiave?

orizzontale
🎉
verticale
Quasi sempre, quando vengono passati due valori abbreviati, il primo è orizzontale.

Quale spazio nel modello a scatola occupano le barre di scorrimento quando vengono visualizzate in linea?

casella dei contenuti
Riprova.
casella di spaziatura interna
Le barre di scorrimento in modalità overlay si sovrapporranno al padding, mentre in modalità inline si aggiungeranno al padding.
border box
Riprova.
casella del margine
Riprova.

Per intercettare l'inerzia aggiuntiva dello scorrimento in uno scorrimento implicito nidificato, quale proprietà utilizzeresti?

scroll-behavior
Riprova.
scroll-hint
Riprova.
overscroll-behavior
Se imposti questa proprietà su contain, lo scorrimento verrà bloccato.
scroll-padding
Riprova.
overscroll-effect
Riprova.

Quale valore dichiara che un contenitore di scorrimento deve arrestarsi in un elemento agganciato, se possibile?

required
Sbagliato.
mandatory
Esatto!
0px
Sbagliato.
proximity
Sbagliato.

Quali sono i valori validi per scrollbar-width?

5px
Sbagliato.
thin
Esatto!
medium
Sbagliato.
none
Esatto!

Risorse

Overflow e perdita di dati in CSS di Smashing Magazine