Negli ultimi mesi è iniziata un'epoca d'oro per l'interfaccia utente web. Le nuove funzionalità della piattaforma sono state adottate su più browser e supportano più funzionalità web e di personalizzazione che mai.
Ecco 20 delle funzionalità più interessanti e significative lanciate di recente o in arrivo a breve:
- Query sui contenitori
- Query sugli stili
- Selettore
:has()
- nth-of microsyntax
text-wrap: balance
initial-letter
- Unità di visualizzazione dinamiche
- Spazi di colore a gamma estesa
color-mix()
- Nidificazione
- Eseguire la visualizzazione a cascata dei livelli
- Stili basati su ambito
- Funzioni trigonometriche
- Proprietà di trasformazione individuali
- popover
- Posizionamento dell'ancoraggio
- selectmenu
- Transizioni di proprietà discrete
- Animazioni basate sullo scorrimento
- Visualizzare le transizioni
Il nuovo responsive
Iniziamo con alcune nuove funzionalità di design responsive. Le nuove funzionalità della piattaforma ti consentono di creare interfacce logiche con componenti che possiedono le proprie informazioni di stile responsive, interfacce che sfruttano le funzionalità di sistema per offrire UI più native e consentire all'utente di partecipare al processo di progettazione con query sulle preferenze dell'utente per una completa personalizzazione.
Query sui container
Le query dei contenitori sono diventate di recente stabili su tutti i browser moderni. Ti consentono di eseguire query sulle dimensioni e sullo stile di un elemento principale per determinare gli stili da applicare a uno dei relativi elementi secondari. Le query sui media possono accedere e utilizzare solo le informazioni del viewport, il che significa che possono funzionare solo su una visualizzazione macro del layout di una pagina. Le query dei contenitori, invece, sono uno strumento più preciso che può supportare un numero qualsiasi di layout o layout all'interno di layout.
Nel seguente esempio di posta in arrivo, la barra laterale Posta in arrivo principale e Preferiti sono entrambi contenitori. Le email al loro interno regolano il layout della griglia e mostrano o nascondono il timestamp in base allo spazio disponibile. Si tratta dello stesso componente all'interno della pagina, visualizzato solo in visualizzazioni diverse
Poiché abbiamo una query del contenitore, gli stili di questi componenti sono dinamici. Se modifichi le dimensioni e il layout della pagina, i componenti si adattano allo spazio allocato singolarmente. La barra laterale diventa una barra superiore con più spazio e il layout è più simile a quello della Posta in arrivo principale. Quando lo spazio è ridotto, entrambi vengono visualizzati in un formato compatto.
Scopri di più sulle query dei contenitori e sulla creazione di componenti logici in questo post.
Query di stile
La specifica della query del contenitore ti consente anche di eseguire query sui valori di stile di un contenitore principale. Questa funzionalità è attualmente implementata parzialmente in Chrome 111, dove puoi utilizzare le proprietà CSS personalizzate per applicare gli stili del contenitore.
L'esempio seguente utilizza le caratteristiche meteo memorizzate nei valori delle proprietà personalizzate, ad esempio pioggia, soleggiato e nuvoloso, per applicare uno stile allo sfondo e all'icona dell'indicatore della scheda.
@container style(--sunny: true) {
.weather-card {
background: linear-gradient(-30deg, yellow, orange);
}
.weather-card:after {
content: url(<data-uri-for-demo-brevity>);
background: gold;
}
}
Questo è solo l'inizio per le query sui stili. In futuro, avremo query booleane per determinare se esiste un valore della proprietà personalizzata e ridurre la ripetizione del codice. Al momento sono in discussione le query sull'intervallo per applicare gli stili in base a un intervallo di valori. In questo modo, sarà possibile applicare gli stili mostrati qui utilizzando un valore percentuale per la probabilità di pioggia o copertura nuvolosa.
Per scoprire di più e visualizzare altre dimostrazioni, consulta il nostro post del blog sulle query di stile.
:has()
A proposito di funzionalità dinamiche e potenti, il selettore:has() è una delle nuove funzionalità CSS più potenti disponibili nei browser moderni. Con :has()
, puoi applicare gli stili controllando se un elemento principale contiene elementi secondari specifici o se questi ultimi sono in uno stato specifico. Ciò significa che ora abbiamo essenzialmente un selettore principale.
Basandoti sull'esempio di query del contenitore, puoi utilizzare :has()
per rendere i componenti ancora più dinamici. In questo caso, a un elemento con un elemento "stella" viene applicato uno sfondo grigio e a un elemento con una casella di controllo selezionata uno sfondo blu.
Tuttavia, questa API non è limitata alla selezione dell'elemento principale. Puoi anche applicare stili a eventuali elementi secondari all'interno dell'elemento principale. Ad esempio, il titolo è in grassetto quando l'elemento contiene l'elemento Aggiungi a Speciali. Questo viene ottenuto con .item:has(.star) .title
. L'utilizzo del selettore :has()
ti consente di accedere a elementi principali, elementi secondari e persino elementi fratelli, il che rende questa API davvero flessibile, con nuovi casi d'uso che si presentano ogni giorno.
Per scoprire di più ed esplorare altre demo, consulta questo post del blog dedicato a :has()
.
Sintassi di n-esimo di
Supporto dei browser
La piattaforma web ora offre una selezione più avanzata del figlio n-esimo. La sintassi avanzata figlio-n fornisce una nuova parola chiave ("di"), che ti consente di utilizzare la micro sintassi esistente di An+B, con un sottoinsieme più specifico in cui eseguire la ricerca.
Se utilizzi il normale elemento figlio n-esimo, ad esempio :nth-child(2)
, per la classe speciale, il browser selezionerà l'elemento a cui è applicata la classe speciale ed è anche il secondo elemento secondario. Ciò è in contrasto con :nth-child(2 of .special)
, che prefiltra prima tutti gli elementi .special
e poi sceglie il secondo da quell'elenco.
Scopri di più su questa funzionalità nel nostro articolo sulla sintassi di nth-of.
text-wrap: balance
I selettori e le query di stile non sono gli unici luoghi in cui possiamo incorporare la logica all'interno dei nostri stili; la tipografia è un altro. A partire da Chrome 114, puoi utilizzare l'aggiustamento del rientro del testo per le intestazioni utilizzando la proprietà text-wrap
con il valore balance
.
Per bilanciare il testo, il browser esegue efficacemente una ricerca binaria per trovare la larghezza minima che non causa righe aggiuntive, fermandosi a un pixel CSS (non pixel di visualizzazione). Per ridurre ulteriormente i passaggi nella ricerca binaria, il browser inizia con l'80% della larghezza media della riga.
Scopri di più in questo articolo.
initial-letter
Un altro bel miglioramento alla tipografia web è initial-letter
. Questa proprietà CSS ti offre un maggiore controllo per lo stile delle iniziali a capo rientrate.
Utilizza initial-letter
nell'elemento pseudo :first-letter
per specificare:
le dimensioni della lettera in base al numero di righe che occupa.
L'offset del blocco della lettera, o "sink", per la posizione della lettera.
Scopri di più sull'utilizzo di intial-letter
qui.
Unità di visualizzazione dinamiche
Supporto dei browser
Un problema comune che gli sviluppatori web devono affrontare oggi è la definizione di dimensioni precise e coerenti del viewport completo, in particolare sui dispositivi mobili. In qualità di sviluppatore, vuoi che 100vh
(100% dell'altezza dell'area visibile) significhi "abbia la stessa altezza dell'area visibile", ma l'unità 100vh
non tiene conto di elementi come le barre di navigazione retrattili sui dispositivi mobili, quindi a volte risulta troppo lunga e causa lo scorrimento.vh
Per risolvere il problema, ora abbiamo nuovi valori di unità sulla piattaforma web, tra cui:
- Altezza e larghezza della visualizzazione piccola (o svh
e svw
), che rappresentano le dimensioni più piccole della visualizzazione attiva.
- Altezza e larghezza dell'area visibile grande (lvh
e lvw
), che rappresentano le dimensioni più grandi.
- Altezza e larghezza dell'area visibile dinamica (dvh
e dvw
).
Il valore delle unità della visualizzazione dinamica cambia quando le barre degli strumenti dinamiche aggiuntive del browser, ad esempio l'indirizzo in alto o la barra delle schede in basso, sono visibili e quando non lo sono.
Per saperne di più su queste nuove unità, consulta Unità di visualizzazione grandi, piccole e dinamiche.
Spazi colore a gamma estesa
Un'altra nuova aggiunta importante alla piattaforma web sono gli spazi di colore a gamma estesa. Prima che i colori a gamma estesa diventassero disponibili sulla piattaforma web, potevi scattare una foto con colori vivaci, visibile sui dispositivi moderni, ma non potevi trovare un pulsante, un colore di testo o uno sfondo che corrispondesse a questi valori vivaci.
Prova
Ora, però, abbiamo una gamma di nuovi spazi di colore sulla piattaforma web, tra cui REC2020, P3, XYZ, LAB, OKLAB, LCH e OKLCH. Scopri i nuovi spazi di colore web e altro ancora nella guida ai colori HD.
In DevTools puoi vedere immediatamente come si è espansa la gamma di colori, con la linea bianca che delimita la fine della gamma sRGB e l'inizio della gamma di colori più ampia.
Sono disponibili molti altri strumenti per il colore. Non perderti nemmeno tutti i fantastici miglioramenti al gradiente. C'è anche un nuovo strumento creato da Adam Argyle per aiutarti a provare un nuovo selettore di colori web e un generatore di gradienti. Provalo all'indirizzo gradient.style.
color-mix()
La funzione color-mix()
consente di espandere gli spazi di colore. Questa funzione supporta la miscelazione di due valori di colore per creare nuovi valori in base ai canali dei colori da miscelare. Lo spazio di colore in cui esegui la miscelazione influisce sui risultati. Lavorare in uno spazio colore più percettivo come oklch comporta una gamma di colori diversa rispetto a sRGB.
color-mix(in srgb, blue, white);
color-mix(in srgb-linear, blue, white);
color-mix(in lch, blue, white);
color-mix(in oklch, blue, white);
color-mix(in lab, blue, white);
color-mix(in oklab, blue, white);
color-mix(in xyz, blue, white);
![7 spazi di colore (srgb, linear-srgb, lch, oklch, lab, oklab, xyz) ciascuno con risultati diversi. Molte sono rosa o viola, poche sono ancora blu.](https://developer.chrome.google.cn/static/blog/whats-new-css-ui-2023/image/7-color-spaces-srgb-lin-b67f50cdf456f.png?hl=it)
La funzione color-mix()
offre una funzionalità richiesta da tempo: la possibilità di preservare i valori di colore opachi aggiungendovi un po' di trasparenza. Ora puoi utilizzare le variabili di colore del brand per creare varianti di questi colori con opacità diverse. Per farlo, devi mescolare un colore con il trasparente. Se combini il colore blu del tuo brand con il 10% di trasparenza, ottieni un colore opaco al 90%. Puoi vedere come questo ti consente di creare rapidamente sistemi di colori.
Puoi vedere questa funzionalità in azione in Chrome DevTools oggi stesso con un'icona del diagramma di Venn di anteprima davvero carina nel riquadro degli stili.
Per altri esempi e dettagli, consulta il nostro post del blog su color-mix o prova questo laboratorio di color-mix().
Basi CSS
La creazione di nuove funzionalità che offrono vantaggi evidenti agli utenti è una parte dell'equazione, ma molte delle funzionalità introdotte in Chrome hanno lo scopo di migliorare l'esperienza degli sviluppatori e creare un'architettura CSS più affidabile e organizzata. Queste funzionalità includono nidificazione CSS, livelli in cascata, stili basati su ambito, funzioni trigonometriche e singole proprietà di trasformazione.
Annidamento
L'organizzazione gerarchica CSS, una funzionalità molto apprezzata di Sass e una delle principali richieste degli sviluppatori CSS da anni, è finalmente disponibile sulla piattaforma web. La nidificazione consente agli sviluppatori di scrivere in un formato più conciso e raggruppato che riduce la ridondanza.
.card {}
.card:hover {}
/* can be done with nesting like */
.card {
&:hover {
}
}
Puoi anche nidificare le query sui media, il che significa che puoi nidificare anche le query sui contenitori. Nell'esempio seguente, una scheda passa da un layout verticale a uno orizzontale se il relativo contenitore è abbastanza largo:
.card {
display: grid;
gap: 1rem;
@container (width >= 480px) {
display: flex;
}
}
La modifica del layout in flex
si verifica quando il contenitore ha più (o uguale a) 480px
di spazio in linea disponibile. Il browser applicherà semplicemente il nuovo stile di visualizzazione quando le condizioni saranno soddisfatte.
Per ulteriori informazioni ed esempi, consulta il nostro post sul nidificazione CSS.
Livelli in cascata
Un altro problema riscontrato dagli sviluppatori è garantire la coerenza nella scelta degli stili da applicare, e una parte della soluzione è avere un migliore controllo sulla struttura a cascata del CSS.
I livelli in cascata risolvono il problema dando agli utenti il controllo sui livelli che hanno una priorità più alta rispetto ad altri, il che significa un controllo più preciso sul momento in cui vengono applicati gli stili.
![Screenshot del progetto Codepen](https://developer.chrome.google.cn/static/blog/whats-new-css-ui-2023/image/screenshot-codepen-proje-cbc0d46703a16.png?hl=it)
Scopri di più su come utilizzare i livelli in cascata in questo articolo.
CSS basato sugli ambiti
Gli stili basati sugli ambiti CSS consentono agli sviluppatori di specificare i confini a cui si applicano stili specifici, creando essenzialmente un nome nativo in CSS. In precedenza, gli sviluppatori si affidavano a script di terze parti per rinominare le classi o a convenzioni di denominazione specifiche per evitare collisioni di stili, ma a breve potranno utilizzare @scope
.
In questo caso, stiamo applicando l'ambito di un elemento .title
a un .card
. In questo modo, l'elemento title non entrerà in conflitto con altri elementi .title
della pagina, come il titolo di un post del blog o un'altra intestazione.
@scope (.card) {
.title {
font-weight: bold;
}
}
Puoi vedere @scope
con limiti di ambito insieme a @layer
in questa demo dal vivo:
Scopri di più su @scope
nella specifica css-cascade-6.
Funzioni trigonometriche
Un altro elemento della nuova struttura di CSS sono le funzioni trigonometriche che vengono aggiunte alle funzioni matematiche CSS esistenti. Queste funzioni sono ora stabili in tutti i browser moderni e ti consentono di creare layout più organici sulla piattaforma web. Un ottimo esempio è questo layout del menu radiale, che ora è possibile progettare e animare utilizzando le funzioni sin()
e cos()
.
Nella demo di seguito, i punti ruotano attorno a un punto centrale. Invece di ruotare ogni punto attorno al proprio centro e poi spostarlo verso l'esterno, ogni punto viene tradotto sugli assi X e Y. Le distanze sugli assi X e Y vengono determinate tenendo conto del cos()
e, rispettivamente, del sin()
del --angle
.
Per informazioni più dettagliate su questo argomento, consulta il nostro articolo sulle funzioni trigonometriche.
Singole proprietà di trasformazione
L'ergonomia degli sviluppatori continua a migliorare con le singole funzioni di trasformazione. Dall'ultima conferenza I/O, le singole trasformazioni sono diventate stabili su tutti i browser moderni.
In passato, utilizzavi la funzione transform per applicare sottofunzioni per ridimensionare, ruotare e tradurre un elemento dell'interfaccia utente. Questo comportava molte ripetizioni ed era particolarmente frustrante quando si applicavano più trasformazioni in momenti diversi dell'animazione.
.target {
transform: translateX(50%) rotate(30deg) scale(1.2);
}
.target:hover {
transform: translateX(50%) rotate(30deg) scale(2); /* Only scale changed here, yet you have to repeat all other parts */
}
Ora puoi avere tutti questi dettagli nelle animazioni CSS separando i tipi di trasformazioni e applicandoli singolarmente.
.target {
translate: 50% 0;
rotate: 30deg;
scale: 1.2;
}
.target:hover {
scale: 2;
}
In questo modo, le modifiche di traslazione, rotazione o scala possono avvenire contemporaneamente a velocità di variazione diverse in momenti diversi durante l'animazione.
Per ulteriori informazioni, consulta questo post sulle singole funzioni di trasformazione.
Componenti personalizzabili
Per assicurarci di risolvere alcune delle principali esigenze degli sviluppatori tramite la piattaforma web, stiamo collaborando con il gruppo della community OpenUI e abbiamo identificato tre soluzioni per iniziare:
- Funzionalità popup integrate con gestori eventi, una struttura DOM dichiarativa e impostazioni predefinite accessibili.
- Un'API CSS per collegare due elementi tra loro in modo da consentire il posizionamento dell'ancora.
- Un componente del menu a discesa personalizzabile, da utilizzare quando vuoi applicare uno stile ai contenuti all'interno di un selettore.
Popover
L'API popover fornisce agli elementi alcune funzionalità di supporto del browser integrate, ad esempio:
- Supporto per il livello superiore, quindi non devi gestire
z-index
. Quando apri un popup o una finestra di dialogo, promuovi l'elemento in un livello speciale nella parte superiore della pagina. - Comportamento di chiusura rapida senza costi nei popup
auto
, quindi quando fai clic all'esterno di un elemento, il popup viene chiuso, rimosso dall'albero di accessibilità e lo stato attivo viene gestito correttamente. - Accessibilità predefinita per il tessuto connettivo del target del popup e del popup stesso.
Tutto ciò significa che è necessario scrivere meno codice JavaScript per creare tutte queste funzionalità e monitorare tutti questi stati.
La struttura DOM per i popup è dichiarativa e può essere scritta in modo chiaro assegnando all'elemento popup un attributo id
e popover
. Poi sincronizzi l'ID con l'elemento che aprirà il popup, ad esempio un pulsante con l'attributo popovertarget
:
<div id="event-popup" popover>
<!-- Popover content goes in here -–>
</div>
<button popovertarget="event-popup">Create New Event</button>
popover
è una scorciatoia per popover=auto
. Un elemento con popover=auto
chiuderà forzatamente gli altri popover quando viene aperto, riceverà lo stato attivo quando viene aperto e può essere chiuso con una semplice pressione. Al contrario, gli elementi popover=manual
non chiudono forzatamente nessun altro tipo di elemento, non ricevono immediatamente lo stato attivo e non vengono chiusi con una semplice pressione. Si chiudono tramite un pulsante di attivazione/disattivazione o un'altra azione di chiusura.
La documentazione più aggiornata sui popup è attualmente disponibile su MDN.
Posizionamento dell'ancora
I popup vengono spesso utilizzati anche in elementi come finestre di dialogo e descrizioni comando, che in genere devono essere ancorati a elementi specifici. Prendiamo questo esempio di evento. Quando fai clic su un evento nel calendario, viene visualizzata una finestra di dialogo accanto all'evento su cui hai fatto clic. L'elemento del calendario è l'ancora e il popup è la finestra di dialogo che mostra i dettagli dell'evento.
Puoi creare una descrizione comando centrata con la funzione anchor()
, utilizzando la larghezza dell'ancora per posizionare la descrizione comando al 50% della posizione x dell'ancora. Poi, utilizza i valori di posizionamento esistenti per applicare il resto degli stili di posizionamento.
Ma cosa succede se il popup non si adatta all'area visibile in base al modo in cui lo hai posizionato?
Per risolvere il problema, l'API di posizionamento dell'ancora include posizioni di riserva che puoi personalizzare. L'esempio seguente crea una posizione di riserva denominata "top-then-bottom". Il browser tenterà prima di posizionare la descrizione comando in alto e, se non si adatta all'area visibile, la posizionerà sotto l'elemento di ancoraggio, in basso.
.center-tooltip {
position-fallback: --top-then-bottom;
translate: -50% 0;
}
@position-fallback --top-then-bottom {
@try {
bottom: calc(anchor(top) + 0.5rem);
left: anchor(center);
}
@try {
top: calc(anchor(bottom) + 0.5rem);
left: anchor(center);
}
}
Scopri di più sul posizionamento dell'ancora in questo post del blog.
<selectmenu>
Con il posizionamento di popover e ancora, puoi creare menu a discesa completamente personalizzabili. Il gruppo della community OpenUI ha esaminato la struttura di base di questi menu e cercato modi per consentire la personalizzazione di qualsiasi contenuto al loro interno. Ecco alcuni esempi visivi:
Per creare l'esempio selectmenu
più a sinistra, con i puntini colorati corrispondenti al colore che verrà visualizzato in un evento nel calendario, puoi scrivere quanto segue:
<selectmenu>
<button slot="button" behavior="button">
<span>Select event type</span>
<span behavior="selected-value" slot="selected-value"></span>
<span><img src="icon.svg"/></span>
</button>
<option value="meeting">
<figure class="royalblue"></figure>
<p>Meeting</p>
</option>
<option value="break">
<figure class="gold"></figure>
<p>Lunch/Break</p>
</option>
...
</selectmenu>
Transizioni di proprietà discrete
Affinché tutto questo funzioni senza problemi, il web ha bisogno di un modo per animare proprietà distinte. Si tratta di proprietà che in genere non erano animabili in passato, ad esempio l'animazione da e verso il livello superiore e da e verso display: none
.
Nell'ambito del lavoro per abilitare transizioni eleganti per i popup, i menu a discesa e persino elementi esistenti come finestre di dialogo o componenti personalizzati, i browser stanno attivando nuove strutture per supportare queste animazioni.
La seguente demo di popup anima i popup utilizzando :popover-open
per lo stato aperto, @starting-style
per lo stato prima dell'apertura e applica un valore di trasformazione all'elemento direttamente per lo stato dopo l'apertura e la chiusura. Per fare in modo che tutto funzioni con la visualizzazione, è necessario aggiungerlo alla proprietà transition
, come segue:
.settings-popover {
&:popover-open {
/* 0. before-change */
@starting-style {
transform: translateY(20px);
opacity: 0;
}
/* 1. open (changed) state */
transform: translateY(0);
opacity: 1;
}
/* 2. After-change state */
transform: translateY(-50px);
opacity: 0;
/* enumarate transitioning properties, including display */
transition: transform 0.5s, opacity 0.5s, display 0.5s allow-discrete;
}
Interazioni
Passiamo alle interazioni, l'ultima tappa di questo tour delle funzionalità dell'interfaccia utente web.
Abbiamo già parlato dell'animazione di proprietà distinte, ma in Chrome sono disponibili anche alcune API molto interessanti per le animazioni basate sullo scorrimento e le transizioni di visualizzazione
Animazioni basate sullo scorrimento
Le animazioni basate sullo scorrimento ti consentono di controllare la riproduzione di un'animazione in base alla posizione di scorrimento di un contenitore scorrevole. Ciò significa che, mentre scorri verso l'alto o verso il basso, l'animazione viene riprodotta avanti o indietro. Inoltre, con le animazioni basate sullo scorrimento puoi anche controllare un'animazione in base alla posizione di un elemento all'interno del relativo contenitore di scorrimento. In questo modo puoi creare effetti interessanti, come un'immagine di sfondo con parallasse, barre di avanzamento dello scorrimento e immagini che si rivelano man mano che vengono visualizzate.
Questa API supporta un insieme di classi JavaScript e proprietà CSS che ti consentono di creare facilmente animazioni dichiarative basate sullo scorrimento.
Per gestire un'animazione CSS tramite scorrimento, utilizza le nuove proprietà scroll-timeline
, view-timeline
e animation-timeline
.
Per gestire un'API Web Animations JavaScript, passa un'istanza ScrollTimeline
o ViewTimeline
come opzione timeline
a Element.animate()
Queste nuove API funzionano in combinazione con le API Web Animations e CSS Animations esistenti, il che significa che sfruttano i vantaggi di queste API. Inclusa la possibilità di eseguire queste animazioni dal thread principale. Sì, hai letto bene: ora puoi avere animazioni fluide, basate sullo scorrimento, in esecuzione nel thread principale, con solo poche righe di codice aggiuntivo. Che cosa c'è da non amare?
Per una guida dettagliata su come creare queste animazioni basate sullo scorrimento, consulta questo articolo sulle animazioni basate sullo scorrimento.
Visualizza transizioni
L'API View Transition semplifica la modifica del DOM in un unico passaggio, creando al contempo una transizione animata tra i due stati. Possono essere semplici transizioni tra le visualizzazioni, ma puoi anche controllare la modalità di transizione delle singole parti della pagina.
Le transizioni di visualizzazione possono essere utilizzate come miglioramento progressivo: prendi il codice che aggiorna il DOM con qualsiasi metodo e inseriscilo nell'API di transizione di visualizzazione con un fallback per i browser che non supportano la funzionalità.
function spaNavigate(data) {
// Fallback for browsers that don't support this API:
if (!document.startViewTransition) {
updateTheDOMSomehow(data);
return;
}
// With a transition:
document.startViewTransition(() => updateTheDOMSomehow(data));
}
L'aspetto della transizione è controllato tramite CSS
@keyframes slide-from-right {
from { opacity: 0; transform: translateX(75px); }
}
@keyframes slide-to-left {
to { opacity: 0; transform: translateX(-75px); }
}
::view-transition-old(root) {
animation: 350ms both slide-to-left ease;
}
::view-transition-new(root) {
animation: 350ms both slide-from-right ease;
}
Come dimostrato in questa fantastica demo di Maxi Ferreira, altre interazioni con la pagina, come la riproduzione di un video, continuano a funzionare durante la transizione di visualizzazione.
Le transizioni di visualizzazione attualmente funzionano con le app a pagina singola (SPA) a partire da Chrome 111. È in corso di sviluppo il supporto delle app con più pagine. Per saperne di più, consulta la nostra guida completa alle transizioni delle visualizzazioni per seguire la procedura passo passo.
Conclusione
Tieniti al passo con le ultime novità su CSS e HTML proprio qui su developer.chrome.com e guarda i video dell'I/O per altre novità web.