Una grossa limitazione nel CSS è l'imposibilità di applicare stili sulla base del contenuto o i sui discendenti. Con l'introduzione del selettore :has avviene un cambiamento radicale: gli sviluppatori possono applicare stili in base a condizioni che prima richiedevano workaround complessi o l'uso di JavaScript.
A differenza dei selettori tradizionali che funzionano solo "dall'alto verso il basso", :has() permette di invertire la logica.
elemento:has(selettore)
L'applicazione non richiede conoscenze aggiuntive a quelle che già abbiamo. Supponiamo di voler stilizzare tutti i tag div che contengono un p al loro interno.
div:has(p) { border: 1px solid red; }
Allo stesso modo possiamo specificare una classe applicata all'elemento figlio.
ul:has(li.active) { color: green; }
Inoltre con :has(), possiamo anche applicare stili in base allo stato, come un campo di input in focus.
form:has(input:focus) { background-color: lightblue; }
Come abbiamo potuto notare la sintassi rispecchia i selettori CSS esistenti, aumentandone la leggibilità ed evitando la stesura di complicato codice Javascript per gestire ogni eventuale casistica.
In questo ultimo esempio vogliamo gestire il colore del font solamente nel caso in cui il div
- Abbia un primo discendente che sia un p
- Contenga un ul con almeno un primo figlio li
div:has(> p, ul li:first-child) { color: blue; }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Collegare applicazioni server e client con .NET Aspire
Applicare un filtro per recuperare alcune issue di GitHub
Utilizzare Container Queries nominali
Evitare il flickering dei componenti nel prerender di Blazor 8
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Ottimizzare le performance usando Span<T> e il metodo Split
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Usare il colore CSS per migliorare lo stile della pagina
Proteggere le risorse Azure con private link e private endpoints
Routing statico e PreRendering in una Blazor Web App
Aggiornare a .NET 9 su Azure App Service
Supportare il sorting di dati tabellari in Blazor con QuickGrid