Pubblicato: 1° luglio 2026
Al Google I/O 2026, abbiamo condiviso una serie di aggiornamenti in arrivo nella piattaforma UI web. Dal rispetto delle preferenze degli utenti all'implementazione di interazioni naturali, dalla guida alla navigazione alla riduzione del disordine e all'adattamento a vari fattori di forma, il web moderno offre agli sviluppatori strumenti incredibilmente potenti per creare esperienze utente tattili e di alta qualità.
Ecco un riepilogo completo di tutte le funzionalità menzionate nella sessione "Novità dell'interfaccia utente web", strutturato in base al nostro insieme principale di principi UX.
Parte 1: rispetta le preferenze dell'utente
La personalizzazione è fondamentale per l'usabilità del web. Le API web moderne semplificano l'adattamento automatico alle scelte a livello di sistema dell'utente. Anche se questi concetti sembrano elementari e ne parliamo da anni, in realtà esistono alcune nuove API e pattern che semplificano la creazione di questa personalizzazione dinamica.
1. contrast-color()
La funzione CSS contrast-color() accetta un colore di input e restituisce automaticamente black o white, a seconda di quale ha il contrasto più elevato rispetto al colore di input in base all'algoritmo di contrasto minimo WCAG AA. In questo modo, viene garantita la leggibilità senza dover gestire manualmente le coppie di colori di testo e sfondo.
Scopri di più su contrast-color()
2. light-dark()
La funzione CSS light-dark() ti consente di specificare due valori diversi (colori o immagini) per una proprietà, uno per la modalità Chiaro e uno per la modalità Buio, all'interno di una singola dichiarazione. Il browser seleziona automaticamente il colore di contrasto corretto in base al color-scheme attivo (che deve essere impostato su light, dark o light dark su :root o un elemento principale).
La novità di light-dark() è che non è più limitato ai soli valori di colore. A partire da Chrome 150, ora accetta anche due valori di immagine.
Browser Support
3. Funzioni personalizzate CSS (@function)
La regola at @function consente di definire funzioni personalizzate e riutilizzabili direttamente all'interno del CSS nativo. Può accettare proprietà personalizzate con ambito locale come argomenti, eseguire calcoli e restituire valori utilizzando il descrittore result, riducendo la necessità di preprocessor.
In combinazione con le query di stile del contenitore e la funzione CSS if(), puoi creare una funzione --light-dark() personalizzata che funzioni con qualsiasi tipo di valore, come mostrato in questa demo:
4. Query di stile del contenitore
Parte delle query sui contenitori CSS, le query di stile consentono agli sviluppatori di applicare stili agli elementi secondari in base ai valori delle proprietà personalizzate calcolate di un contenitore principale, consentendo componenti dinamici senza richiedere il contenimento esplicito delle dimensioni.
Browser Support
In questa demo, le query di stile vengono utilizzate per impostare i colori in base a una proprietà personalizzata --theme.
@container style(--theme: primary) {
.app-card {
--bg-light: #fdf2f8;
--bg-dark: #ff91d3;
--neon-glow: #f472b6;
--btn-light: #be185d;
--btn-dark: #fbcfe8;
--text-on-light: #500732;
--text-on-dark: #fff1f2;
}
}
@container style(--theme: accent) {
.app-card {
--bg-light: #f3e8ff;
--bg-dark: #4c1d95;
--neon-glow: #d8b4fe;
--btn-light: #7e22ce;
--btn-dark: #c084fc;
--text-on-light: #2e1065;
--text-on-dark: #faf5ff;
}
}
@container style(--theme: success) {
/* … */
}
Scopri di più sulle query di stile
5. Funzione CSS if()
La funzione CSS if() porta la logica condizionale in linea direttamente ai valori delle proprietà CSS. Valuta una serie di condizioni separate da punto e virgola (query di stile, query dei media o query delle funzionalità) e consente di impostare valori diversi associati alla prima condizione true, con un else di riserva facoltativo.
Nella demo precedente, la funzione if() viene utilizzata per creare un colore di contrasto a tema in base all'output della funzione contrast-color().
--contrast-color: contrast-color(var(--card-bg));
color: if(
style(--contrast-color: white): var(--text-on-dark);
else: var(--text-on-light)
);
6. @supports at-rule()
La funzione CSS at-rule() da utilizzare con @supports consente agli sviluppatori di rilevare se un browser riconosce una regola at specifica, ad esempio @starting-style o @view-transition.
Ad esempio, per verificare il supporto di @function, utilizzalo nel seguente modo:
@supports at-rule(@function) {
/* Code for browsers that support @function goes here */
}
L'utilizzo di at-rule() consente solo di verificare il supporto di base della regola stessa e non può essere utilizzato per testare descrittori, preludi o blocchi di regole completi specifici. Sono disponibili soluzioni alternative per rilevare funzionalità come query ancorate o query di stile.
Scopri di più su @supports at-rule
7. <meta name="text-scale">
Il metatag HTML text-scale consente alla pagina di scalare le dimensioni iniziali del carattere dell'elemento radice <html> in proporzione alle impostazioni di scalabilità del testo a livello di sistema operativo e browser, il che è particolarmente importante per le piattaforme mobile.
Una volta applicata, la dimensione del carattere dell'elemento html viene ora determinata dal sistema operativo, quindi non è necessario impostare un font-size di base. Se poi utilizzi lunghezze con unità relative come em e rem, i valori in pixel calcolati si basano su questa dimensione del carattere di base.
<meta name="text=scale" value="scale">
<style>
html {
/* Don't set a base font-size here! */
}
</style>
Dalla scheda Rendering di DevTools puoi emulare la dimensione del carattere preferita. Utilizza il menu a discesa per modificare il valore.
Scopri di più su <meta name=text-scale>
Parte 2: implementa le interazioni naturali
Movimenti fisici intuitivi e gesti naturali sono fondamentali per rendere le esperienze web tattili come le applicazioni native. Il CSS moderno ti aiuta a raggiungere questo obiettivo più facilmente.
8. Funzione di easing linear()
La funzione di accelerazione linear() consente di creare curve di transizione personalizzate complesse (come rimbalzi, molle o sovraelongazioni elastiche) interpolando linearmente tra un numero illimitato di punti di avanzamento specificati.
Nella seguente demo, linear() viene utilizzato per dare alla finestra di dialogo un'accelerazione naturale quando viene mostrata o nascosta.
9. @starting-style
La regola CSS @starting-style definisce i valori iniziali delle proprietà di un elemento da cui vuoi eseguire la transizione quando l'elemento viene visualizzato per la prima volta nel DOM o quando il relativo display cambia da none a un valore visibile, per consentire transizioni di ingresso fluide.
Nella demo precedente, questo valore viene utilizzato per animare l'elemento <dialog> quando diventa visibile per la prima volta.
10. transition-behavior: allow-discrete
La proprietà transition-behavior (spesso utilizzata come allow-discrete nell'abbreviazione transition) consente di eseguire la transizione di proprietà discrete come display o overlay, garantendo che gli elementi rimangano visibili durante le animazioni di uscita prima di essere nascosti.
11. sibling-index() e sibling-count()
Le funzioni CSS sibling-index() e sibling-count() restituiscono numeri interi che rappresentano la posizione di un elemento in base a 1 tra i relativi elementi di pari livello e il numero totale di elementi di pari livello, rispettivamente. Sono perfette per calcolare dinamicamente i ritardi delle animazioni scaglionate in CSS senza JavaScript.
In questa demo, i contenuti della finestra di dialogo sono sfalsati utilizzando sibling-index() in animation-delay
dialog[open] > * {
animation:
content-entry 0.6s var(--spring) forwards;
/* 0.2s delay for the first item, then staggering by 0.05s via sibling-index()
*/
animation-delay:
calc(sibling-index() * 0.05s + 0.2s);
}
12. Chiusura leggera della finestra di dialogo (attributo closedby)
L'attributo closedby nell'elemento <dialog> (con valore any) consente di utilizzare il comportamento dichiarativo "light dismiss", chiudendo automaticamente le finestre di dialogo modali quando si fa clic al di fuori o si preme ESC, senza richiedere JavaScript personalizzato.
Puoi provarlo nella demo precedente.
13. corner-shape
La proprietà abbreviata sperimentale corner-shape consente agli sviluppatori di modificare gli angoli arrotondati (da border-radius) per creare forme visive personalizzate come bevel, scoop, notch o squircle (tramite superellipse()). I bordi, le ombre e i contorni di messa a fuoco si adattano automaticamente alla forma.
Parte 3: Fornisci la navigazione guidata
Guidare il percorso dell'utente aiuta a mantenere il contesto e a comprendere il flusso dell'applicazione, eliminando i ricaricamenti disorientanti. Puoi farlo in diversi modi, ad esempio con le transizioni di visualizzazione, che hanno ricevuto alcuni aggiornamenti recenti.
14. Transizioni di visualizzazione nello stesso documento
Parte dell'API View Transition, le transizioni nello stesso documento forniscono un meccanismo per animare gli stati DOM nelle applicazioni a pagina singola (SPA) acquisendo snapshot e eseguendo la transizione utilizzando CSS.
Scopri di più sulle transizioni di visualizzazione nello stesso documento
15. Transizioni di visualizzazione tra documenti
Estende l'API View Transition alle applicazioni multipagina (MPA), consentendoti di creare transizioni animate e fluide durante la navigazione tra documenti diversi abbinando gli elementi con lo stesso view-transition-name tra le pagine.
Scopri di più sulle transizioni di visualizzazione tra documenti
16. Transizioni di visualizzazione con ambito elemento
Introdotte in Chrome 147, le transizioni di visualizzazione con ambito elemento ti consentono di eseguire una transizione di visualizzazione solo su un sottoalbero DOM specifico (utilizzando element.startViewTransition()) mantenendo il resto della pagina attivo e interattivo.
Browser Support
Quando viene avviata una transizione di visualizzazione con ambito elemento, viene eseguita in isolamento: esegue la scansione solo di questo sottoalbero per gli elementi con un view-transition-name e lo pseudo ::view-transition viene inserito nella radice dell'ambito stesso. L'isolamento è possibile grazie all'applicazione automatica di view-transition-scope: all.
Ciò consente l'esecuzione simultanea di più transizioni di visualizzazione, nonché l'annidamento delle transizioni di visualizzazione: mentre gli elementi di queste liste vengono riprodotti in ordine casuale, puoi anche scambiare le liste stesse.
Inoltre, gli pseudoelementi del gruppo vengono nidificati automaticamente e l'overflow dello pseudoelemento secondario del gruppo contenitore viene troncato quando necessario.
Le transizioni di visualizzazione con ambito sono perfette per le micro-interazioni e la trasformazione stateful nella pagina, in quanto forniscono all'utente più contesto quando si verifica una modifica visiva. Questo è un ottimo modo per migliorare l'usabilità della tua applicazione, oltre a migliorarne l'aspetto e l'esperienza utente. Queste piccole cose fanno una grande differenza.
Scopri di più sulle transizioni di visualizzazione con ambito elemento
17. Transizioni di visualizzazione in due fasi
Si tratta di una funzionalità sperimentale che avvia immediatamente una transizione di visualizzazione tra documenti senza attendere che il nuovo DOM sia pronto, eseguendo prima la transizione a una schermata scheletro o a un'interfaccia utente di caricamento intermedia, prima di continuare con la transizione di visualizzazione tra documenti.
Scopri di più sulle transizioni di visualizzazione in due fasi
18. Animazioni basate sullo scorrimento
Le animazioni basate sullo scorrimento collegano l'avanzamento di un'animazione CSS direttamente alla posizione di scorrimento di un contenitore di scorrimento, consentendo agli sviluppatori di creare interfacce basate sullo scorrimento, come effetti di parallasse efficienti e indicatori di scorrimento.
- Scopri di più sulle animazioni basate sullo scorrimento
- Guarda più demo di animazioni basate sullo scorrimento
- Scopri le animazioni basate sullo scorrimento con questo corso video senza costi in 10 parti
19. Animazioni attivate dallo scorrimento
Una novità di Chrome sono le animazioni attivate dallo scorrimento. Le animazioni attivate dallo scorrimento attivano un'animazione CSS standard basata sul tempo quando viene superato un limite di scorrimento (utilizzando timeline-trigger per definire l'attivatore e animation-trigger per riprodurlo), fornendo un'alternativa dichiarativa a IntersectionObserver.
Browser Support
Il meccanismo sottostante per le animazioni attivate dallo scorrimento sono i trigger della sequenza temporale, che sono attivi o non attivi.
.element {
timeline-trigger:
--t
view()
contain 25% contain 75% / entry 105% exit -5%
;
}
Attiva il visualizzatore nella seguente demo per vedere cosa succede: il primo intervallo è l'intervallo di attivazione e determina quando l'attivatore diventa attivo. Il secondo intervallo è l'intervallo attivo, che determina per quanto tempo deve rimanere attivo.
Scopri di più sulle animazioni attivate dallo scorrimento
20. scroll-target-group: auto
Ora puoi creare uno scrollspy CSS nativo che evidenzia automaticamente i link di navigazione in base alla posizione di scorrimento dell'utente. Se imposti scroll-target-group: auto in un elenco di navigazione, il browser imposta automaticamente aria-current="true" e applica la pseudo-classe :target-current al link attivo. :target-current può essere utilizzato per applicare uno stile più elaborato ai link attivi.
Scopri di più sulla funzionalità di monitoraggio dello scorrimento CSS con scroll-target-group
21. Opzione container scrollIntoView()
Il metodo scrollIntoView() acquisisce un'opzione container. L'impostazione di target.scrollIntoView({container: 'nearest'}) limita lo scorrimento al più vicino elemento scorrevole principale anziché farlo scorrere fino in cima, evitando uno scorrimento a livello di pagina disorientante.
Utilizza la casella di controllo in questa demo per attivare e disattivare l'opzione:
Scopri di più su container: "nearest"
22. Scorrimento programmatico in attesa
Tutti i metodi di scorrimento programmatici (come scroll(), scrollTo() e scrollIntoView()) ora restituiscono una promessa. Ciò consente agli sviluppatori di await il completamento delle animazioni di scorrimento fluido prima di eseguire la logica successiva (come l'aggiunta di un effetto di evidenziazione).
Nella seguente demo puoi vederlo in azione: l'elemento viene prima visualizzato, dopodiché viene aggiunto un effetto di evidenziazione.
Parte 4: massimizzare i contenuti, ridurre il rumore
Una delle esperienze web più frustranti è aspettarsi di vedere dei contenuti e ritrovarsi bloccati da popup o banner invasivi. Dai la priorità all'area dei contenuti eliminando il disordine visivo e i bordi delle applicazioni e spostando le azioni secondarie dietro l'interfaccia utente a più livelli.
23. Query sullo stato di scorrimento (scrolled)
Parte delle query sui contenitori CSS, le query scroll-state consentono di applicare uno stile agli elementi secondari in base allo stato di scorrimento di un contenitore (con container-type: scroll-state). La query scrolled (ad esempio scroll-state(scrolled: bottom)) rileva la direzione dello scorrimento relativo più recente, consentendo pattern come la "barra nascosta".
Browser Support
Scopri di più sul pattern "Hidey Bar"
24. Query sui container ancorati
Il posizionamento dell'ancora CSS include le query sui contenitori ancorati, che ti consentono di verificare quale posizione di riserva (ad esempio fallback: bottom o fallback: flip-block) è attualmente attiva su un elemento posizionato con l'ancora, consentendo aggiornamenti dinamici allo stile di un elemento posizionato con l'ancora (come le frecce dei suggerimenti).
Browser Support
Nella seguente demo, un popup posizionato come ancora si riposiziona in base alla posizione di riserva e alla posizione nell'area visibile utilizzando le query sui contenitori ancorati. Quando la descrizione comando si apre sopra l'invoker, l'animazione viene riprodotta dal basso verso l'alto, dall'origine. Quando si trova sotto l'invoker, l'animazione viene riprodotta dall'alto verso il basso.
25. CSS border-shape
La proprietà border-shape consente di definire bordi non rettangolari utilizzando la stessa sintassi della forma di clip-path. A differenza del ritaglio, border-shape mantiene i bordi, i contorni e le ombre allineati visivamente alla forma personalizzata. Inoltre, va oltre le funzionalità di corner-shape, in quanto border-shape è molto più flessibile.
Browser Support
26. Funzione CSS shape()
La funzione CSS shape() consente di definire percorsi geometrici complessi in linea nel CSS. Può essere utilizzato con proprietà come clip-path, border-shape o shape-outside per creare forme organiche non rettangolari su cui i contenuti possono fluttuare.
27. Posizionamento fisso per asse
Grazie a una recente modifica della specifica di overflow che consente ai contenitori di essere uno scorrimento per un solo asse, il posizionamento fisso ora può monitorare contemporaneamente due diversi contenitori di scorrimento (uno per ogni asse). In questo modo, la prima colonna e la riga superiore fisse di una tabella funzionano come previsto anche all'interno di contenitori di scorrimento a un solo asse.
Browser Support
Questa funzionalità è disponibile per i test in Chrome 148 con il flag Funzionalità sperimentali della piattaforma web attivato.
Scopri di più su position: sticky per asse
Parte 5: adattarsi al fattore di forma
Uno degli aspetti più preziosi del web è la sua flessibilità. Gli utenti possono navigare sul web da una serie di dispositivi, ognuno con i propri meccanismi di interazione. I layout devono adattarsi fondamentalmente al dispositivo e al metodo di input, indipendentemente dal fatto che sia aperta una tastiera virtuale o che i target tocco siano attivi. Tenere presente il fattore di forma durante la progettazione per il web conferisce al tuo sito o alla tua app web un tocco di raffinatezza in più e allinea le aspettative degli utenti.
28. Gesti di overscroll (aree scorrevoli)
Un esempio di adattamento al fattore di forma è la possibilità di utilizzare interazioni basate su scorrimento e gesti sul web mobile. Puoi utilizzare gli scorrimenti per ottenere alcuni di questi effetti, ma non è sempre un approccio intuitivo.
Il team di Chrome sta lavorando a una soluzione dichiarativa proposta, in discussione con il gruppo della community OpenUI, che consente di creare aree scorrevoli native basate su gesti (ad esempio, elenchi di Gmail scorrevoli o menu laterali chiudibili con scorrimento) utilizzando overscrollcontainer e richiamatori di comandi, che funzionano in modo naturale con il tocco e lo scorrimento.
Scopri di più sui gesti di overscroll
29. HTML in Canvas
L'API HTML-in-Canvas è un importante cambio di paradigma che consente agli sviluppatori di inserire elementi DOM reali all'interno di un <canvas> (utilizzando l'attributo layoutsubtree). Questi elementi rimangono completamente ricercabili, accessibili e supportano funzionalità del browser come il completamento automatico, consentendo al contempo agli shader WebGL/WebGPU di interagire in modo nativo.
Round lampo
Un rapido sguardo ad altre potenti funzionalità che fanno progredire il web.
30. Spostamento con conservazione dello stato DOM (moveBefore())
Il metodo DOM moveBefore() consente di riassegnare i nodi DOM (ad esempio, riproduzione di video, iframe o input selezionati) senza distruggerne lo stato o attivare ricaricamenti.
Ciò significa che i video continuano a essere riprodotti, gli iframe non vengono ricaricati, le animazioni CSS non vengono riavviate e i campi di input mantengono lo stato attivo quando vengono riassegnati al layout.
31. CSS text-fit
text-fit è una proprietà CSS sperimentale che ridimensiona dinamicamente le dimensioni del carattere per adattare con precisione le righe di testo alla larghezza esatta dell'elemento contenitore (ad esempio, text-fit: grow per-line-all).
32. CSS text-box (text-box-trim e text-box-edge)
La proprietà text-box (e le sue forme estese text-box-trim e text-box-edge) taglia lo spazio verticale (interlinea) sopra e sotto il testo, garantendo un allineamento verticale e una centratura perfetti.
33. Decorazioni per spazi CSS
Le decorazioni per gli spazi CSS portano column-rule a griglia e flexbox e introducono una nuova proprietà row-rule, che consente agli sviluppatori di applicare stili alle grondaie tra righe e colonne. Non dovrai più modificare bordi o pseudo-elementi per applicare lo stile alle regole tra righe e colonne.
Browser Support
Scopri di più sulle decorazioni per spazi vuoti CSS
34. Unità di viewport sensibili alla barra di scorrimento (vw, vh e così via)
Le unità viewport come vw e vh sottraggono automaticamente le dimensioni delle barre di scorrimento (se è garantita la visibilità, utilizzando overflow-y: scroll o scrollbar-gutter: stable dichiarati su :root), impedendo l'overflow orizzontale accidentale quando gli elementi sono impostati su 100vw.
Browser Support
Scopri di più sulle unità viewport consapevoli della barra di scorrimento
35. Accesso JavaScript agli pseudo-elementi
Le API web ora espongono gli pseudo-elementi CSS (come ::before o ::after) a JavaScript.
Puoi recuperare un'istanza CSSPseudoElement utilizzando Element.pseudo(type) e controllare quale pseudo-elemento ha attivato un evento utilizzando Event.pseudoTarget.
Browser Support
Scopri di più su CSSPseudoElement
Conclusione
Questo è tutto per il nostro riepilogo delle novità dell'interfaccia utente web. Ci auguriamo che queste funzionalità ti aiutino a creare interfacce fantastiche. Al prossimo anno.