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
Creare una libreria CSS universale - Rotazione degli elementi
Path addizionali per gli asset in ASP.NET Core MVC
Gestire progetti .NET + React in .NET Aspire
Combinare Container Queries e Media Queries
Integrare SQL Server in un progetto .NET Aspire
Gestione degli eventi nei Web component HTML
Gestione dei nomi con le regole @layer in CSS
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Montare Azure Blob Storage su Linux con BlobFuse2
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Recuperare App Service cancellati su Azure
Creare una libreria CSS universale: Cards