Grazie a librerie come Bootstrap, SemanticUI, Material e altre ancora, è diventato molto più semplice, rispetto al passato, creare interfacce grafiche coerenti a livello di stile, dimensioni del testo, spaziature e molto altro ancora. Queste librerie introducono una serie di classi CSS da utilizzare nel nostro codice per stilizzare gli elementi e spesso, per stilizzare un singolo elemento, dobbiamo assegnare più di una classe.
Per fare un esempio, per stilizzare un bottone piccolo in Bootstrap, dobbiamo assegnare all'oggetto button le seguenti classi: btn per dare gli stili di base di un bottone, btn-primary per specificare lo stile del bottone principale e btn-sm per assegnare gli stili che riducono le dimensioni del bottone. Sebbene assegnare queste classi sia estremamente semplice, è altrettanto semplice sbagliare a scrivere o dimenticare una classe. Inoltre, se ad un certo punto decidiamo di cambiare gli stili, dobbiamo ripassare in tutte le pagine o affidarci a dei replace.
In Angular possiamo limitare il problema creando una direttiva che imposta questi stili per noi.
@Directive({ selector: 'button[myButton]' }) export class ButtonDirective implements AfterViewInit { constructor(private renderer: Renderer2, private elementRef: ElementRef) {} ngAfterViewInit() { this.renderer.addClass(this.elementRef.nativeElement, 'btn btn-primary btn-sm'); } }
Questa direttiva si applica a tutti i tag button con l'attributo myButton. Non appena la view viene inizializzata, questa direttiva recupera il pulsante a cui è associata e gli aggiunge le classi CSS di bootstrap. Se decidessimo di cambiare le classi da applicare ai pulsanti, ci basterebbe modificare questa direttiva e automaticamente lamodifica verrebbe applicata a tutti i pulsanti con la direttiva.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Gestire codice JavaScript con code splitting e lazy loading
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Fornire parametri ad un Web component HTML
Utilizzare Hybrid Cache in .NET 9
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Creare una libreria CSS universale: Cards
Rendere le variabili read-only in una pipeline di Azure DevOps
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Disabilitare le run concorrenti di una pipeline di Azure DevOps
I più letti di oggi
- Integrare OpenAI tramite Aspire
- Interagire con Azure DevOps tramite MCP Server
- Usare l'explicit operator per eseguire codice di mapping in C#
- Creare un agente A2Acon Azure Logic Apps
- Office 2007 Developer Conference, il 13 e 14 Giugno a Milano
- SQL Server 2000 Security Update for Service Pack 2
- Bearer token con autenticazione basata su ruoli in ASP.NET Web API
- Definire il colore di una scrollbar HTML tramite CSS
- Bloccare un account utente con ASP.NET Identity 2