Podcast CSS - 034: 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
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 conoverflow: clip
vengono adattati al riquadro di spaziatura dell'elemento. La differenza traclip
ehidden
è che la parola chiaveclip
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.
scroll-behavior
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
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?
La proprietà overflow
accetta due parole chiave. La prima parola chiave è per quale asse?
Quale spazio nel modello a casella viene occupato dalle barre di scorrimento quando vengono visualizzate e incorporate?
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