Novità in CSS e UI: I/O 2023 Edition

Gli ultimi mesi hanno inaugurato un'epoca d'oro per l'interfaccia utente web. Le nuove funzionalità della piattaforma hanno portato a un'adozione stretta su più browser che supportano più funzionalità web e funzionalità di personalizzazione che mai.

Ecco 20 delle funzionalità più entusiasmanti e d'impatto rilasciate di recente o che lo saranno a breve:

La nuova tecnologia

Iniziamo con alcune nuove funzionalità di progettazione reattiva. Le nuove funzionalità della piattaforma ti consentono di creare interfacce logiche con componenti proprietari delle informazioni di stile reattive, creare interfacce che sfruttano le funzionalità di sistema per fornire UI più personalizzate e consentire all'utente di partecipare al processo di progettazione con query sulle preferenze dell'utente per una completa personalizzazione.

Query container

Supporto dei browser

  • 105
  • 105
  • 110
  • 16

Fonte

Le query container sono recentemente stabili in 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 ciascuno dei suoi elementi secondari. Le query supporti possono accedere alle informazioni dell'area visibile e utilizzarle solo per farlo, il che significa che possono funzionare solo su una visualizzazione macro di un layout di pagina. Le query container, invece, sono uno strumento più preciso in grado di supportare qualsiasi numero di layout all'interno di layout.

Nel seguente esempio di Posta in arrivo, la Posta in arrivo principale e la barra laterale Preferiti sono entrambi contenitori. Le email al loro interno modificano il loro layout a griglia e mostrano o nascondono il timestamp in base allo spazio disponibile. È esattamente lo stesso componente all'interno della pagina, ma appare in visualizzazioni diverse

Dal momento che abbiamo una query container, gli stili di questi componenti sono dinamici. Se regoli le dimensioni e il layout della pagina, i componenti rispondono al loro spazio assegnato singolarmente. La barra laterale diventa una barra in alto con più spazio e il layout assomiglia più alla Posta in arrivo principale. Quando c'è meno spazio, entrambi vengono visualizzati in un formato ridotto.

Scopri di più sulle query relative ai container e sulla creazione di componenti logici in questo post.

Query sugli stili

Supporto dei browser

  • 111
  • 111
  • x
  • x

Fonte

La specifica delle query del contenitore consente anche di eseguire query sui valori di stile di un contenitore principale. Al momento questa funzionalità è parzialmente implementata in Chrome 111, in cui puoi utilizzare le proprietà personalizzate CSS per applicare gli stili contenitore.

L'esempio seguente utilizza le caratteristiche meteorologiche memorizzate nei valori delle proprietà personalizzate, come pioggia, sole e nuvoloso, per definire lo sfondo della scheda e l'icona dell'indicatore.

@container style(--sunny: true) {
 .weather-card {
   background: linear-gradient(-30deg, yellow, orange);
 }

 .weather-card:after {
   content: url(<data-uri-for-demo-brevity>);
   background: gold;
 }
}

Demo schede meteo.

Questo è solo l'inizio per le query di stile. In futuro avremo query booleane per determinare se esiste un valore di proprietà personalizzata e ridurre la ripetizione del codice, mentre attualmente ci sono query di 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.

Puoi scoprire di più e vedere altre demo nel nostro post del blog sulle query di stile.

:has()

Supporto dei browser

  • 105
  • 105
  • 121
  • 15,4

Fonte

A proposito di funzionalità potenti e dinamiche, il selettore:has() è una delle nuove funzionalità CSS più potenti che vengono utilizzate nei browser moderni. Con :has(), puoi applicare gli stili controllando se un elemento principale contiene la presenza di specifici elementi secondari o se questi ultimi si trovano in uno stato specifico. Ciò significa che ora abbiamo un selettore principale.

Partendo dall'esempio di query del container, puoi utilizzare :has() per rendere i componenti ancora più dinamici. Al suo interno, a un elemento con un elemento "stella" viene applicato uno sfondo grigio, mentre a un elemento con una casella di controllo selezionata viene applicato uno sfondo blu.

Screenshot della demo

Tuttavia, questa API non si limita alla selezione principale. Puoi anche assegnare uno stile a tutti i bambini all'interno dell'elemento padre. Ad esempio, il titolo è in grassetto quando l'elemento è presente nell'elemento a stella. Puoi farlo con .item:has(.star) .title. L'uso del selettore :has() consente di accedere agli elementi principali, agli elementi secondari e persino agli elementi di pari livello. In questo modo si tratta di un'API molto flessibile, con nuovi casi d'uso che compaiono ogni giorno.

Scopri di più ed esplora altre demo, consulta questo post del blog per informazioni su :has().

sintassi

Supporto dei browser

  • 111
  • 111
  • 113
  • 9

La piattaforma web ora ha una selezione più avanzata di secondo livello. La sintassi avanzata nth-child fornisce una nuova parola chiave ("of"), che ti consente di utilizzare la microsintassi esistente di An+B, con un sottoinsieme più specifico in cui eseguire la ricerca.

Se utilizzi un normale n-esimo-figlio, ad esempio :nth-child(2) nella classe speciale, il browser selezionerà l'elemento a cui è applicata la classe speciale, oltre a essere il secondo elemento secondario. Questo è a differenza di :nth-child(2 of .special), che prima pre-filtrerà tutti gli elementi .special e poi selezionerà il secondo dall'elenco.

Scopri di più su questa funzionalità nel nostro articolo sulla sintassi dei vari linguaggi.

text-wrap: balance

I selettori e le query di stile non sono gli unici punti in cui possiamo incorporare la logica nei nostri stili; la tipografia è un'altra. A partire da Chrome 114, puoi utilizzare il bilanciamento del testo a capo per le intestazioni utilizzando la proprietà text-wrap con il valore balance.

Prova una demo

Per bilanciare il testo, il browser esegue effettivamente una ricerca binaria per la larghezza minima che non causa altre righe, fermandosi a un pixel CSS (non al pixel di visualizzazione). Per ridurre ulteriormente i passaggi nella ricerca binaria, il browser inizia con l'80% della larghezza di riga media.

Prova una demo

Scopri di più in questo articolo.

initial-letter

Supporto dei browser

  • 110
  • 110
  • x
  • 9

Fonte

Un altro valido miglioramento della tipografia web è initial-letter. Questa proprietà CSS ti offre un controllo migliore per lo stile incorporato dei drop cap.

Usa initial-letter nello pseudo elemento :first-letter per specificare: La dimensione della lettera in base al numero di righe che occupa. Il blocco obliquo della lettera, o "affondamento", per il punto in cui si troverà la lettera.

Scopri di più sull'utilizzo di intial-letter qui.

Unità area visibile dinamica

Supporto dei browser

  • 108
  • 108
  • 101
  • 15,4

Un problema comune che gli sviluppatori web devono affrontare oggi è il dimensionamento accurato e coerente dell'intera area visibile, soprattutto sui dispositivi mobili. In qualità di sviluppatore, vuoi che il valore 100vh (100% dell'altezza dell'area visibile) indichi "l'altezza dell'area visibile", ma l'unità vh non tiene conto di elementi come il ritiro delle barre di navigazione sui dispositivi mobili, quindi a volte l'unità è troppo lunga e determina lo scorrimento.

Sono visualizzate troppe barre di scorrimento

Per risolvere il problema, ora abbiamo nuovi valori delle unità sulla piattaforma web, tra cui: - Altezza e larghezza dell'area visibile piccole (o svh e svw), che rappresentano le dimensioni più piccole dell'area visibile attiva. - Altezza e larghezza dell'area visibile grandi (lvh e lvw), che rappresentano la dimensione massima. - Altezza e larghezza dell'area visibile dinamica (dvh e dvw).

Le unità dell'area visibile dinamica cambiano di valore quando le barre degli strumenti aggiuntive del browser dinamico, come l'indirizzo nella parte superiore o la barra delle schede in basso, sono visibili e quando non lo sono.

Nuove unità dell&#39;area visibile visualizzate

Per ulteriori informazioni su queste nuove unità, consulta Le unità visibili grandi, piccole e dinamiche.

Spazi colore ad ampia gamma

Supporto dei browser

  • 111
  • 111
  • 113
  • 15,4

Fonte

Un'altra nuova aggiunta fondamentale alla piattaforma web sono gli spazi colore ad ampia gamma. Prima che i colori ad ampia gamma diventassero disponibili sulla piattaforma web, potevi scattare una fotografia con colori vividi, visualizzabili sui dispositivi moderni, ma non potevi ottenere un pulsante, un colore del testo o uno sfondo corrispondente a quei valori.

Viene mostrata una serie di immagini che passano da una gamma di colori ampia a una stretta e illustrano la nitidezza dei colori e i suoi effetti.
Fai una prova

Ma ora abbiamo una gamma di nuovi spazi colore sulla piattaforma web, tra cui REC2020, P3, XYZ, LAB, OKLAB, LCH e OKLCH. Scopri i nuovi spazi colore sul web e altro ancora nella guida ai colori HD.

Cinque triangoli impilati di vari colori per illustrare la relazione e le dimensioni di ciascuno dei nuovi spazi colore.

Inoltre, in DevTools puoi vedere immediatamente come si sia estesa la gamma di colori, con quella linea bianca che delinea il punto di fine dell'intervallo sgsuite e quello di inizio.

DevTools che mostra una linea della gamma nel selettore colori.

Molti altri strumenti disponibili per i colori! Non perderti tutti gli incredibili miglioramenti dei gradienti. C'è anche il nuovissimo strumento Adam Argyle creato per aiutarti a provare un nuovo selettore di colori per il web e un nuovo strumento per la creazione di gradienti. Prova con gradient.style.

color-mix()

Supporto dei browser

  • 111
  • 111
  • 113
  • 16.2

Fonte

L'espansione degli spazi colore espansi è la funzione color-mix(). Questa funzione supporta la combinazione di due valori di colore per creare nuovi valori in base ai canali dei colori che vengono miscelati. Lo spazio di colore in cui si combinano i risultati influisce sui risultati. Se lavori in uno spazio colore più percettivo come oklch, il risultato sarà una gamma di colori diversa rispetto a quella di un sistema simile a srbit, ad esempio sgsuite.

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 colore (ssad, linear-sgsuite, lch, oklch, lab, oklab, xyz), ognuno con risultati diversi. Molti sono rosa o viola, mentre altri sono ancora blu.
Prova la demo

La funzione color-mix() offre una funzionalità molto richiesta da tempo: la possibilità di mantenere i valori di colore opaco aggiungendo al contempo trasparenza. Ora puoi utilizzare le variabili di colore del tuo brand durante la creazione di varianti di questi colori con opacità diverse. Per farlo, devi mescolare il colore con il colore trasparente. Quando mescoli il colore blu del tuo brand con il 10% di trasparente, ottieni un colore del brand opaco al 90%. Si può osservare come ciò consente di creare rapidamente sistemi di colori.

Puoi vedere questa funzionalità in azione in Chrome DevTools oggi con un'ottima icona del diagramma di Venn in anteprima nel riquadro Stili.

Screenshot di DevTools con l&#39;icona di mix di colori del diagramma di Venn

Guarda altri esempi e dettagli nel nostro post del blog su color-mix o prova questo playground di color-mix().

Nozioni di base di CSS

Creare nuove funzionalità con vittorie chiare dell'utente è una parte dell'equazione, ma molte delle funzionalità disponibili in Chrome hanno l'obiettivo di migliorare l'esperienza degli sviluppatori e creare un'architettura CSS più affidabile e organizzata. Queste funzionalità includono la nidificazione di CSS, i livelli a cascata, gli stili con ambito, le funzioni trigonometriche e le singole proprietà di trasformazione.

Annidamento

Supporto dei browser

  • 120
  • 120
  • 117
  • 17,2

Fonte

La nidificazione di CSS, una novità che le persone apprezzano da Sass e che da anni è tra le più richieste dagli sviluppatori CSS, è finalmente sulla piattaforma web. La nidificazione consente agli sviluppatori di scrivere in un formato raggruppato più conciso che riduce la ridondanza.

.card {}
.card:hover {}

/* can be done with nesting like */
.card {
  &:hover {

  }
}

Puoi anche nidificare le query supporti, il che significa anche che puoi nidificare le query container. Nell'esempio seguente, il layout di una scheda viene cambiato da verticale a orizzontale se il contenitore contiene una larghezza sufficiente:

.card {
  display: grid;
  gap: 1rem;

  @container (width >= 480px) {
    display: flex;
  }
}

La modifica del layout su 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 sono soddisfatte.

Per ulteriori informazioni ed esempi, consulta il nostro post sulla nidificazione dei CSS.

Livelli a cascata

Supporto dei browser

  • 99
  • 99
  • 97
  • 15,4

Fonte

Un altro punto critico per gli sviluppatori che abbiamo individuato è garantire la coerenza tra gli stili che prevalgono sugli altri e un aspetto della risoluzione di questo problema consiste nell'avere un maggiore controllo sulla cascata CSS.

I livelli a cascata risolvono questo problema dando agli utenti il controllo su quali livelli hanno una precedenza maggiore rispetto agli altri, il che significa un controllo più preciso su quando vengono applicati gli stili.

Illustrazione a cascata

Screenshot dal progetto Codepen
Esplora il progetto su Codepen.

Scopri di più su come utilizzare i livelli Cascade in questo articolo.

CSS con ambito

Supporto dei browser

  • 118
  • 118
  • x
  • 17,4

Gli stili con ambito CSS consentono agli sviluppatori di specificare i limiti a cui si applicano stili specifici, creando essenzialmente spazi dei nomi nativi 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 conflitti di stile, ma presto puoi utilizzare @scope.

Qui, stiamo associando un elemento .title a un .card. In questo modo si evita che l'elemento del titolo entri 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 i limiti di ambito insieme a @layer in questa demo dal vivo:

Screenshot della scheda della demo

Scopri di più su @scope nella specifica CSS-Cascade-6.

Funzioni trigonometriche

Supporto dei browser

  • 111
  • 111
  • 108
  • 15,4

Fonte

Un'altra novità è rappresentata dalle funzioni trigonometriche che vengono aggiunte alle funzioni matematiche CSS esistenti. Queste funzioni ora sono 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 qui sotto, i punti ruotano attorno a un punto centrale. Anziché ruotare ciascun punto intorno al proprio centro e spostarlo verso l'esterno, ciascun punto viene traslato sugli assi X e Y. Le distanze sugli assi X e Y vengono determinate tenendo conto di cos() e, rispettivamente, di sin() di --angle.

Per informazioni più dettagliate su questo argomento, consulta il nostro articolo sulle funzioni trigonometriche.

Singole proprietà di trasformazione

Supporto dei browser

  • 104
  • 104
  • 72
  • 14.1

Fonte

L'ergonomia degli sviluppatori continua a migliorare con funzioni di trasformazione individuali. Dall'ultima volta in cui abbiamo organizzato l'I/O, le singole trasformazioni sono risultate stabili su tutti i browser moderni.

In passato, era necessario usare la funzione di trasformazione per applicare funzioni secondarie per scalare, ruotare e tradurre un elemento UI. Ciò comportava molte ripetizioni ed era particolarmente frustrante quando si applicano 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 alla traslazione, alla rotazione o alla scala possono avvenire contemporaneamente a diverse velocità di variazione 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 da cui iniziare:

  1. Funzionalità popup integrata con gestori di eventi, una struttura DOM dichiarativa e valori predefiniti accessibili.
  2. Un'API CSS per eseguire il tethering di due elementi tra loro per consentire il posizionamento anchor.
  3. Un componente di menu a discesa personalizzabile, per quando vuoi applicare uno stile ai contenuti di una selezione.

Popover

L'API popover fornisce agli elementi alcune funzioni magiche integrate nel supporto del browser, ad esempio:

  • Supporto per il livello superiore, così non devi gestire z-index. Quando apri un popover o una finestra di dialogo, promuovi l'elemento a un livello speciale nella parte superiore della pagina.
  • Ignora senza costi questo comportamento nei popover auto: quando fai clic all'esterno di un elemento, il popover viene ignorato, rimosso dall'albero dell'accessibilità e gestito correttamente.
  • Accessibilità predefinita per il tessuto connettivo della destinazione del popover e il popover stesso.

Tutto questo significa che è necessario scrivere meno codice JavaScript per creare tutte queste funzionalità e monitorare tutti questi stati.

Esempio di popover

La struttura DOM per i popover è dichiarativa e può essere scritta con la stessa chiarezza degli attributi id e popover per l'elemento popover. Quindi, sincronizzi l'ID con l'elemento che aprirà il popover, 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 forma abbreviata di popover=auto. Un elemento con popover=auto forza la chiusura di altri popover all'apertura, lo stato attivo quando viene aperto e può ignorare la luce. Al contrario, gli elementi popover=manual non forzano la chiusura di altri tipi di elementi, non vengono attivati immediatamente e non vengono ignorati. Si chiudono con un pulsante di attivazione/disattivazione o un'altra azione di chiusura.

La documentazione più aggiornata sui popover è attualmente disponibile su MDN.

Posizionamento ancoraggio

I popover vengono utilizzati spesso anche in elementi come finestre di dialogo e descrizioni comando, che in genere devono essere ancorati a elementi specifici. Vediamo 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'ancoraggio e il popover è la finestra di dialogo che mostra i dettagli dell'evento.

Puoi creare una descrizione comando centrata con la funzione anchor(), utilizzando la larghezza dell'ancoraggio per posizionare la descrizione comando al 50% della posizione x dell'ancoraggio. Poi, utilizza i valori di posizionamento esistenti per applicare il resto degli stili di posizionamento.

Ma cosa succede se il popover non si adatta all'area visibile in base al modo in cui è stato posizionato?

popover che esce dall&#39;area visibile

Per risolvere questo problema, l'API di posizionamento dell'ancoraggio include posizioni di riserva personalizzabili. L'esempio seguente crea una posizione di riserva chiamata "top-then-bottom". Il browser proverà prima a posizionare la descrizione comando in alto e, se non rientra nell'area visibile, il browser 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 degli ancoraggi in questo post del blog.

<selectmenu>

Con il posizionamento sia di popover che di ancoraggio, puoi creare menu di selezione completamente personalizzabili. Il gruppo della community OpenUI sta studiando la struttura fondamentale di questi menu e cercando modi per consentire la personalizzazione dei contenuti al loro interno. Guarda questi esempi visivi:

Esempi di menu di selezione

Per creare l'esempio di selectmenu all'estrema sinistra, con punti colorati corrispondenti al colore visualizzato all'interno di un evento nel calendario, puoi scriverlo come 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 delle proprietà discrete

Affinché tutto questo effettui la transizione dei popover all'interno e all'esterno senza intoppi, il web ha bisogno di un modo per animare le proprietà discrete. Si tratta di proprietà che in passato non erano animabili in passato, come l'animazione da e verso il livello superiore e da e verso display: none.

Nell'ambito dell'impegno per attivare transizioni piacevoli per popover, menu di selezione e persino elementi esistenti come finestre di dialogo o componenti personalizzati, i browser stanno consentendo a nuovi impianti idraulici di supportare queste animazioni.

La seguente demo dei popover, anima i popover in entrata e in uscita 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 post-apertura-è-chiuso. Affinché tutto funzioni con gli annunci display, è necessario aggiungerlo alla proprietà transition, in questo modo:

.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 delle proprietà discrete, ma ci sono anche alcune API davvero entusiasmanti che vengono lanciate in Chrome intorno alle animazioni con scorrimento e alle transizioni di visualizzazione

Animazioni con scorrimento

Supporto dei browser

  • 115
  • 115
  • x

Fonte

Le animazioni con scorrimento consentono di controllare la riproduzione di un'animazione in base alla posizione di scorrimento di un contenitore a scorrimento. Ciò significa che quando scorri verso l'alto o verso il basso l'animazione viene eseguita in avanti o indietro. Inoltre, con le animazioni con scorrimento puoi anche controllare un'animazione in base alla posizione di un elemento all'interno del relativo contenitore. In questo modo puoi creare effetti interessanti, come un'immagine di sfondo con parallasse, barre di avanzamento di scorrimento e immagini che si rivelano non appena vengono visualizzate.

Questa API supporta un insieme di classi JavaScript e proprietà CSS che ti consentono di creare facilmente animazioni dichiarative basate su scorrimento.

Per gestire un'animazione CSS tramite scorrimento, utilizza le nuove proprietà scroll-timeline, view-timeline e animation-timeline. Per guidare 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 di animazione web e CSS esistenti, il che significa che traggono vantaggio dai vantaggi di queste API. Ciò include la possibilità di eseguire queste animazioni dal thread principale. Sì, leggi bene: ora puoi creare animazioni fluide e fluide, guidate da scorrimento, in esecuzione fuori dal thread principale, con poche righe di codice in più. Cosa non piace?!

Per una guida approfondita e completa sulla creazione di queste animazioni con scorrimento, consulta questo articolo sulle animazioni con scorrimento.

Visualizza transizioni

Supporto dei browser

  • 111
  • 111
  • x
  • x

Fonte

L'API View Transizione semplifica la modifica del DOM in un solo passaggio, creando al contempo una transizione animata tra i due stati. Può trattarsi di semplici dissolvenze tra le visualizzazioni, ma puoi anche controllare la transizione delle singole parti della pagina.

Le transizioni View possono essere utilizzate come miglioramento progressivo: prendi il codice che aggiorna il DOM con qualsiasi metodo e integralo nell'API View Transizione da un fallback per i browser che non supportano questa 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 meravigliosa demo di Maxi Ferreira, le altre interazioni con le pagine, come la riproduzione di un video, continuano a funzionare durante la transizione delle visualizzazioni.

Al momento, la funzionalità Visualizza transizioni è compatibile con le app a pagina singola (APS) a partire da Chrome 111. Stiamo lavorando al supporto delle app su più pagine. Per saperne di più, consulta la nostra guida completa alle transizioni.

Conclusione

Tieniti al corrente sulle ultime novità in fatto di CSS e HTML qui su developer.chrome.com e guarda i video I/O per altre pagine web.