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
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 conoverflow: clip
vengono ritagliati nella casella di riempimento dell'elemento. La differenza traclip
ehidden
è che la parola chiaveclip
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 overflow
introducono 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.
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
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
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?
La proprietà overflow
accetta due parole chiave. A quale asse si riferisce la prima parola chiave?
Quale spazio nel modello a scatola occupano le barre di scorrimento quando vengono visualizzate in linea?
overlay
si sovrapporranno al padding, mentre in modalità inline
si aggiungeranno al padding.Per intercettare l'inerzia aggiuntiva dello scorrimento in uno scorrimento implicito nidificato, quale proprietà utilizzeresti?
scroll-behavior
scroll-hint
overscroll-behavior
contain
, lo scorrimento verrà bloccato.scroll-padding
overscroll-effect
Quale valore dichiara che un contenitore di scorrimento deve arrestarsi in un elemento agganciato, se possibile?
required
mandatory
0px
proximity
Quali sono i valori validi per scrollbar-width
?
5px
thin
medium
none