04 mag 2025·7 min di lettura

Componenti UI riutilizzabili: nomi, varianti e regole di layout

Definisci convenzioni di nome, varianti e regole di layout per componenti UI riutilizzabili così i team costruiscono schermate coerenti rapidamente in qualsiasi visual builder.

Componenti UI riutilizzabili: nomi, varianti e regole di layout

Perché la coerenza delle schermate si rompe nei visual builder

I visual builder rendono semplice spedire schermate rapidamente. Questa velocità può però nascondere una lenta deriva nell'aspetto e nel comportamento dell'interfaccia. Quando più persone costruiscono contemporaneamente, le piccole scelte si sommano: uno aggiunge 12px di padding, un altro usa 16px, e un terzo copia un pulsante vecchio da un'altra schermata.

Di solito noti i sintomi presto: componenti quasi duplicati, spaziature che cambiano tra le schermate e parole leggermente diverse per la stessa azione (Salva, Invia, Conferma). Anche gli stati spesso divergono. Un form mostra chiaramente uno stato di caricamento, un altro no. I messaggi di errore variano e le “soluzioni rapide” appaiono su una pagina ma non tornano nel pattern condiviso.

È così che nasce il debito UI. Ogni incoerenza sembra minima, ma nel tempo rende il prodotto meno affidabile. Rallenta anche i team perché le persone passano tempo a cercare la versione “giusta”, confrontare schermate e correggere piccole differenze nelle revisioni finali.

Una libreria di componenti in un visual builder è un set condiviso di mattoncini (pulsanti, campi, card, intestazioni, stati vuoti) che tutti usano invece di ricreare tutto. In una piattaforma come AppMaster, questo di solito significa creare pezzi UI riutilizzabili nei builder visuali, poi mettersi d'accordo su come sono nominati, configurati e posizionati così le schermate restano coerenti anche quando le costruiscono persone diverse.

L'obiettivo non è eliminare la creatività. È rendere le parti quotidiane prevedibili così le scelte siano intenzionali. Le quattro leve che prevengono la deriva sono: nomi chiari, varianti sensate, regole di layout di base (spaziatura, allineamento, griglie) e abitudini di team che mantengono la libreria sana man mano che l'app cresce.

Cosa dovrebbe diventare un componente riutilizzabile (e cosa no)

Non tutti gli elementi belli meritano di diventare un componente. Se trasformi tutto in componente, le persone sprecano tempo a scavare nella libreria e a regolare opzioni che non dovrebbero esistere.

Un buon componente riutilizzabile è qualcosa che ti aspetti di vedere su molte schermate, o qualcosa che deve apparire e comportarsi nello stesso modo ogni volta. Pensa a pattern che gli utenti riconoscono all'istante: un pulsante primario, un campo di testo con testo di aiuto, una card che mostra l'anteprima di un record.

Un set iniziale piccolo di solito copre la maggior parte delle schermate: pulsanti, input, card, intestazioni di pagina e un paio di tipi di modal (conferma e form).

Una regola pratica di estrazione mantiene le decisioni semplici: se usi la stessa UI 2-3 volte, o è critica per il tuo brand e deve essere identica, estraila. Se appare una sola volta, mantienila locale.

Cosa dovrebbe restare one-off? Layout altamente specifici legati a una singola schermata, sezioni sperimentali che cambi quotidianamente e tutto ciò che è principalmente contenuto. Per esempio, un banner di onboarding creato una sola volta con testo e illustrazione personalizzati raramente vale la pena trasformarlo in componente.

Mantieni ogni componente focalizzato. Un componente dovrebbe fare un solo lavoro. Una “User Card” che gestisce anche permessi, stato di fatturazione e azioni admin diventa difficile da riutilizzare. Un approccio più pulito è una “User Card” orientata alla visualizzazione più pulsanti di azione e badge di stato separati.

Convenzioni di naming che restano leggibili sotto pressione

Quando un team spedisce in fretta, i nomi sono la prima cosa che si rompe. Qualcuno duplica “Button2”, un altro crea “CTA Button” e un terzo usa “BlueButton”. Una settimana dopo, nessuno sa quale usare, quindi ne creano uno nuovo. Così la libreria diventa un ammasso di quasi-duplicati.

Un pattern semplice aiuta a restare coerenti anche quando sei stanco: Component - Part - State. La maggior parte dei componenti non ha bisogno di tutte e tre le parti, ma l'ordine resta lo stesso.

Usa parole che la gente usa davvero. Se il tuo team dice “Customer card”, non chiamarlo “CRM Tile”. Se il prodotto lo chiama “Plan”, non chiamarlo “SubscriptionBox”. Il linguaggio semplice vince perché è ricercabile.

Una regola che previene molta confusione: non mescolare “come appare” e “a cosa serve” sullo stesso livello. Scegli un approccio. Se nomini per scopo, evita parole di colore. Se nomini per aspetto, evita significati di business. Il naming basato sullo scopo di solito scala meglio.

Esempi facili da scorrere in una lista di componenti:

  • Button - Primary
  • Button - Secondary - Disabled
  • Input - WithLabel
  • Card - Compact
  • Modal - ConfirmDelete

Decidi il formato una volta e annotalo: Title Case o sentence case, spazi intorno ai trattini, e niente abbreviazioni a meno che non siano universali (come “URL”). Nei visual builder dove molti contribuiscono, queste piccole scelte mantengono la libreria leggibile man mano che cresce.

Varianti: come offrire scelta senza creare caos

Le varianti permettono a un team di riutilizzare un componente in molti posti senza creare una copia nuova ogni volta. Il trucco è decidere in anticipo quali differenze contano e bloccare tutto il resto.

Inizia con poche dimensioni di variante che coprono bisogni reali. Per molti componenti, tre sono sufficienti: dimensione (S/M/L), intento (primary/secondary/danger) e stato (default/hover/active). Se una nuova opzione non si adatta a queste dimensioni, trattala come un nuovo componente, non come “un'altra variante”.

I valori predefiniti contano più di quanto si pensi. Le nuove schermate dovrebbero sembrare corrette anche quando qualcuno trascina un componente e non cambia nulla. Imposta default sicuri (per esempio size=M, intent=primary, state=default) così la velocità non si trasforma in styling casuale.

Per ogni componente con varianti, scrivi ed applica:

  • Dimensioni supportate e valori permessi (mantenili brevi)
  • Valori predefiniti
  • Cosa non cambia mai tra le varianti (padding, font, raggio angoli, spaziatura icona)
  • Stati richiesti come disabled e loading, più error dove il fallimento è possibile
  • Quando creare un nuovo componente invece di aggiungere una variante

Esempio: hai un pulsante “Submit” in tutto il portale cliente. Se una persona crea una “Wide Submit Button” e un'altra una “Rounded Submit Button”, la deriva appare in fretta. Con regole, mantieni un solo componente Button. Permetti dimensione e intento, vieta padding e raggio personalizzati e definisci “Loading” una volta (mostra uno spinner, blocca i click) così si comporta uguale ovunque.

Quando qualcuno chiede “solo un altro stile”, chiedi quale problema utente risolve. Se la risposta non è chiara, probabilmente è caos travestito.

Regole di layout: spaziatura, allineamento e griglie che tutti seguono

Use tokens your team trusts
Create style tokens for typography and color so teams stop copying styles.
Try Building

Se le regole di layout sono vaghe, ogni schermata lentamente diventa un caso a sé. Il modo più veloce per mantenere i componenti coerenti è rendere spaziatura e allineamento noiosi: poche scelte consentite, usate nello stesso modo ogni volta.

Inizia con una scala di spaziatura e vieta tutto il resto. Scegli un set piccolo (per esempio 4, 8, 12, 16, 24) e trattalo come una tastiera: puoi suonare molte canzoni, ma solo con quei tasti. Se qualcuno chiede “18px”, di solito significa che il componente o la griglia è fuori posto.

Sii esplicito su cosa significa ogni spaziatura:

  • Padding è all'interno di un componente e resta consistente tra le schermate.
  • Gap è lo spazio tra elementi dentro un contenitore (righe di form, elementi della toolbar).
  • Margin è fuori da un componente e dovrebbe essere usato con parsimonia.
  • Preferisci gap invece di margini impilati così la spaziatura non raddoppia per errore.

Le regole di allineamento eliminano infiniti aggiustamenti tipo “nudge it a bit”. Un default semplice funziona bene: allinea il testo a sinistra, fai combaciare etichette e input sulla stessa linea verticale e mantieni le azioni primarie coerenti (per esempio in basso a destra in un modal e allineate a destra nel footer di un form). Usa l'allineamento alla baseline per righe con molto testo. Riserva l'allineamento centrato per righe di sola icona.

Le griglie non devono essere sofisticate, ma devono esistere. Decidi colonne e gutter, e definisci cosa succede su schermi più piccoli (anche un semplice “12 colonne su desktop, colonna singola su mobile” aiuta). Imposta larghezze dei container e breakpoint una volta, poi costruisci le schermate dentro quei margini.

Trappole comuni da evitare: contenitori annidati che aggiungono ciascuno padding, margini di pagina inconsistenti, mescolare larghezze fisse con colonne responsive e “numeri magici” che risolvono solo una schermata.

Token di stile: font, colori e nozioni base di accessibilità

I token di stile sono le scelte condivise che tutti usano. Quando i token sono chiari, i componenti riutilizzabili restano coerenti anche quando persone diverse costruiscono schermate.

Inizia con la tipografia come fonte unica di verità. Scegli una piccola scala per dimensione, peso e interlinea, poi fermati. La maggior parte dei team ha bisogno di pochi step (per esempio: body, small, caption, title e heading di pagina). Metti queste scelte in un posto così il testo nuovo parte dagli stessi default.

I colori funzionano meglio quando nominati per significato, non per codici pittorici. “Primary” segnala un'azione principale. “Success” significa “è andato a buon fine” e “warning” significa “controlla questo”. Evita nomi come “blue-500” a meno che il team non pensi già in palette.

Nozioni di accessibilità che prevengono problemi più avanti:

  • Assicurati che il testo abbia sufficiente contrasto con lo sfondo.
  • Rendi i target touch abbastanza grandi per i pollici, non per i puntatori del mouse.
  • Scrivi messaggi di errore che spieghino cosa è successo e cosa fare dopo.
  • Non affidarti solo al colore per comunicare uno stato.

I token dovrebbero collegarsi direttamente alle varianti dei componenti. Una variante Button come Primary, Secondary o Danger dovrebbe cambiare token approvati (colore, bordo, stile del testo), non introdurre stili one-off.

Mantieni la lista di token abbastanza corta perché le persone la usino davvero. Un buon test: qualcuno riesce a scegliere il token giusto in 5 secondi? Se no, unisci o elimina.

Un set iniziale semplice potrebbe includere tipografia (text.body, text.small, text.title), colore (color.primary, color.success, color.warning, color.danger), spaziatura (space.8, space.16, space.24), raggio (radius.sm, radius.md) e focus (focus.ring).

Passo dopo passo: come impostare una libreria di componenti in un visual builder

Go beyond page layouts
Generate real backend and app source code so your UI system scales with the product.
Build and Export

Una libreria di componenti riguarda meno la “perfezione del design” e più il togliere micro-decisioni quotidiane. Quando tutti scelgono gli stessi mattoncini, le schermate restano coerenti anche con costruttori diversi.

Un rollout pratico in 5 passi

  1. Fai un audit di quello che hai già. Scegli 5-10 schermate reali e annota i duplicati che vedi frequentemente: pulsanti, campi di testo, intestazioni di sezione, card e stati vuoti.

  2. Scegli una prima ondata ristretta da standardizzare. Punta ai primi 10 elementi che compaiono ovunque e causano più discrepanze. Per molti team significa pulsanti, input, dropdown, dialog modal, intestazioni di tabella e card.

  3. Scrivi le regole prima di costruire. Mantienilo breve: nome del componente, quando usarlo, varianti consentite e regole di layout attorno ad esso (spaziatura, allineamento, larghezza).

  4. Ricostruisci una volta, poi sostituisci gradualmente. Crea i nuovi componenti nel tuo visual builder e blocca le varianti concordate. Sostituisci le copie vecchie schermata per schermata. Non cercare di rifattorizzare tutto in uno sprint.

  5. Aggiungi un controllo leggero. Una persona (a rotazione settimanale) verifica nuovi componenti e varianti. Lo scopo non è fare polizia, ma prevenire fork accidentali.

Come appare il “sufficientemente buono"

Saprai che funziona quando un designer o un PM può dire: “Usa la card standard con intestazione compatta” e due costruttori producono lo stesso risultato. Questo è il payoff: meno scelte one-off, meno incoerenze sottili e costruzione delle schermate più veloce.

Mantieni volontariamente la libreria piccola. Se qualcuno chiede una nuova variante, poni prima una domanda: è una reale nuova necessità o una variante esistente può coprirla con contenuto diverso?

Errori comuni che causano UI lente e incoerenti

Fix UI states across screens
Add loading, disabled, and error states once so behavior stays predictable.
Try It

La maggior parte delle incoerenze non nasce da cattivo gusto. Succede perché copiare è facile, le modifiche sono rapide e nessuno torna indietro. Il risultato è un insieme di schermate quasi uguali difficili da aggiornare.

Una trappola comune è creare near-duplicates invece di aggiungere una variante. Qualcuno vuole un “primary button, ma leggermente più alto” e duplica il componente. Una settimana dopo un altro duplica quello. Ora hai tre pulsanti che sembrano simili ma si comportano diversamente, e ogni cambiamento diventa una caccia.

Un altro rallentamento è il componente troppo configurabile: un mega componente con decine di toggle. Sembrerà flessibile e poi diventerà imprevedibile. Le persone smettono di fidarsi e creano versioni “solo per questo caso”, vanificando lo scopo.

Gli errori di layout fanno altrettanto danno. Il più grande è mescolare responsabilità: un componente controlla i propri margin esterni mentre la schermata aggiunge anche spaziature. Ottieni gap casuali che variano per pagina. Una regola semplice aiuta: i componenti definiscono il padding interno, le schermate gestiscono la spaziatura tra i componenti.

I problemi che solitamente emergono prima: regole di naming che si rompono quando si va di fretta, stati aggiunti tardi (loading, empty, error), tweak one-off che diventano permanenti e persone diverse che risolvono lo stesso layout in modi diversi.

Checklist rapida di coerenza per ogni nuova schermata

Prima di aggiungere qualcosa di nuovo, fermati 60 secondi e verifica le basi. Una schermata può sembrare a posto mentre rompe silenziosamente il sistema, e queste piccole rotture si sommano velocemente quando più persone lavorano in parallelo.

  • Naming: Ogni componente segue il pattern concordato (per esempio Form/Input, Form/Input.HelperText, Table/RowActions). Se il nome non aiuta qualcuno a cercarlo e piazzarlo velocemente, rinominalo ora.
  • Owner + scopo: Ogni componente condiviso ha un owner (persona o team) e una descrizione in una frase di quando usarlo.
  • Solo scala di spaziatura: Tutti padding, gap e margin usano i passi di spaziatura approvati. Se stai digitando un nuovo numero “perché sembra giusto”, fermati e scegli il passo più vicino.
  • Stati inclusi: I pezzi interattivi chiave includono loading ed error, non solo il percorso felice. Pensa a pulsante disabilitato, errore in input, lista vuota, retry.
  • Niente stili nuovi inventati: Costruisci la schermata usando token e componenti esistenti. Se vuoi un nuovo colore, dimensione font, raggio o ombra, trattalo come richiesta di sistema, non come fix a livello di schermata.

Esempio: due persone costruiscono la stessa funzione, con e senza regole

Make defaults do the work
Set sensible defaults so new screens look right without extra styling tweaks.
Create App

Maya e Leon sono in un team di supporto clienti. Hanno bisogno di due schermate: una lista di ticket (da scansionare velocemente) e una schermata dettaglio ticket (per agire su un singolo ticket). Si dividono il lavoro e costruiscono in un visual builder.

Senza regole, ognuno crea “una card” diversa. Maya usa una card bianca con bordo sottile e ombra. Leon usa una card grigia senza bordo ma con padding extra. Una schermata ha un pulsante primario arrotondato, l'altra usa un pulsante squadrato e un link testuale. Lo stato appare come un punto colorato su una schermata e come un pill sull'altra. Nella pagina dettaglio, i campi non si allineano perché le etichette hanno larghezze diverse, perciò il form sembra traballante.

La riunione di review si trasforma in un dibattito sullo stile, e un aggiornamento semplice (come aggiungere “Priority”) significa toccare più layout one-off.

Con le regole, partono da componenti riutilizzabili condivisi in una libreria piccola: una TicketCard per struttura e spaziatura, una StatusBadge per stile e contrasto, e una ActionBar per azioni primarie coerenti.

Ora la lista usa una variante compatta di TicketCard per i campi chiave e una riga di anteprima. La schermata dettaglio usa una variante dettagliata per descrizione completa, timeline e campi extra. La struttura resta la stessa; la variante controlla cosa appare.

La parte migliore è quello che non vedi: meno commenti in review, meno domande “perché è diverso?” e aggiornamenti più veloci dopo. Quando il team rinomina “Closed” in “Resolved” e ne aggiusta il colore, cambiano StatusBadge una volta e entrambe le schermate si aggiornano insieme.

Mantenere la coerenza nel tempo (e prossimi passi)

La coerenza non è una impostazione una tantum. Appena più persone costruiscono schermate, le piccole scelte “solo per questa pagina” si moltiplicano e la libreria inizia a derivare.

Un processo di cambiamento semplice mantiene il team in movimento senza trasformare ogni tweak in un dibattito:

  • Proponi: cosa cambia e perché (nuovo componente, variante, rename, deprecazione)
  • Revisiona: un designer o owner UI verifica naming, regole di spaziatura e basi di accessibilità
  • Approva: un chiaro sì/no, con una breve nota se è limitato a un workflow
  • Rilascia: aggiorna la libreria condivisa e annuncia la modifica in un posto solo

Le decisioni hanno bisogno di una casa. Un breve doc "UI rules" è sufficiente se include convenzioni di naming, la lista ufficiale delle varianti (cosa esiste e cosa no) e una lista di cose da non fare (per esempio: “Non creare un secondo ‘Primary Button’ con padding diverso”).

Pianifica uno slot mensile di pulizia. Usalo per unire duplicati, rimuovere pezzi inutilizzati e segnare componenti vecchi come deprecati così la gente smette di prenderli.

Rifattorizza quando vedi lo stesso pattern due volte (per esempio due team costruiscono empty state leggermente diversi). Accetta un one-off quando è veramente unico, sensibile al tempo e improbabile da ripetersi.

Se stai costruendo in AppMaster, un prossimo passo pratico è standardizzare prima un singolo workflow (come “Create ticket” o “Checkout”), poi espandere. I builder UI rendono facile condividere gli stessi componenti tra le schermate, e appmaster.io è un punto di riferimento utile se il tuo team vuole un approccio no-code che supporti applicazioni complete, non solo layout di pagina.

FAQ

What’s the fastest way to start a component library without slowing the team down?

Inizia standardizzando gli elementi che tocchi quasi su ogni schermo: pulsanti, campi di input, card, intestazioni e uno o due tipi di modal. Costruisci prima questi come componenti riutilizzabili, imposta valori predefiniti sensati e poi sostituisci le copie vecchie schermata per schermata invece di cercare di rifattorizzare tutto in una volta.

How do I decide what should be a reusable component and what should stay one-off?

Una buona regola è estrarlo quando lo stesso elemento UI viene usato due o tre volte, o quando deve apparire e comportarsi in modo identico ogni volta (per esempio azioni primarie o campi di form). Se è davvero un elemento unico, legato a una sola schermata o che cambi quotidianamente, lascialo locale così la libreria resta facile da usare.

What naming convention works best when multiple people build screens?

Usa un unico schema di nomenclatura semplice e mantienilo coerente, per esempio "Component - Part - State". Preferisci parole che il tuo team usa davvero nelle conversazioni e evita nomi basati sui colori come "BlueButton", perché diventano fuorvianti quando gli stili cambiano.

How many variants should a component have before it becomes chaos?

Limita le varianti alle differenze che si ripetono spesso, come dimensione, intento (primary/secondary/danger) e stato. Tutto il resto dovrebbe restare bloccato affinché le persone non "tarino" i componenti per ogni schermata e causino deriva. Se una nuova richiesta non rientra nelle dimensioni di variante esistenti, di solito è meglio creare un nuovo componente.

How do we stop spacing from drifting between screens?

Scegli una piccola scala di spaziatura e usa solo quei valori in tutta l'app; tratta qualsiasi altro valore come un segnale che la griglia o il componente è sbagliato. Preferisci gli spazi gestiti dai contenitori (gap) invece dei margini impilati così non ottieni doppie spaziature quando i componenti sono annidati.

Do we really need style tokens, or can we just copy styles as we go?

Usa token chiamati per significato, non per codice colore, così i team scelgono "primary" o "danger" invece di inventare nuove tonalità. Poi assicurati che le varianti dei componenti mappino su quei token, in modo che creare un "Primary Button" prenda sempre la stessa tipografia e i colori ovunque.

Which UI states should be standardized across components?

Ogni componente interattivo condiviso dovrebbe avere almeno uno stato disabled e uno loading, e aggiungere stati di errore quando è possibile che fallisca (per esempio form e azioni di rete). Se gli stati non sono standardizzati, otterrai schermate che sembrano simili ma si comportano in modo diverso, il che riduce la fiducia e aumenta i cicli di revisione.

Why are “mega components” a bad idea in a visual builder?

I componenti troppo configurabili sembrano flessibili all'inizio, ma le persone smettono di fidarsi perché il comportamento diventa imprevedibile. Mantieni i componenti focalizzati su un singolo compito e componi UI più grandi da pezzi più piccoli così il riuso resta semplice e le modifiche non creano effetti collaterali.

How do we keep the library consistent over time without turning it into bureaucracy?

Usa una soglia leggera: un responsabile rotante controlla i nuovi componenti e varianti per nomi, regole di spaziatura e stati richiesti. L'obiettivo non è fare burocrazia ma prevenire fork accidentali presto, perché unire near-duplicates dopo è lento e spesso rompe le schermate.

How would I implement this approach in AppMaster specifically?

In AppMaster, crea pezzi UI riutilizzabili all'interno dei builder web e mobile, poi standardizza come vengono nominati, configurati e posizionati così gli altri possono riusarli con fiducia. Un approccio pratico è standardizzare prima un workflow (per esempio “Create ticket”), ottenere componenti e varianti giusti lì, quindi ampliare la libreria man mano che più schermate adottano gli stessi pattern.

Facile da avviare
Creare qualcosa di straordinario

Sperimenta con AppMaster con un piano gratuito.
Quando sarai pronto potrai scegliere l'abbonamento appropriato.

Iniziare