Questa pagina elenca ogni chiave della prop style e il metodo di Styled che la imposta in Rust. I componenti Rust applicano gli stili agli elementi con metodi tipizzati che prendono il nome dalle utility di Tailwind (.p_4(), .rounded(px(12.0)), .bg(color), da nsh_core::prelude), che si traducono nelle stesse chiavi; TSX passa oggetti style (e classi). La colonna Rust indica il metodo; a quasi tutti si può passare un valore, un signal o una closure, e .style_when(…) / .style_with(…) rendono condizionale qualsiasi metodo. Le chiavi e i loro tipi provengono dalle dichiarazioni generate in .nsh/types/nsh/types.d.ts, quindi l’editor le controlla mentre scrivi. Una chiave di stile corrisponde alla proprietà CSS con lo stesso nome, esattamente come la classe che la imposta: paddingLeft è padding-left e pl-4 di CSS, boxShadow è box-shadow e shadow-md; alcune chiavi hanno nomi più semplici, usati dalle app (paddingHorizontal per padding-inline, marginStart per margin-inline-start, numberOfLines per line-clamp). I numeri sono punti, e sono disponibili anche le funzionalità CSS: grid, gradienti, box shadow, filtri, blend mode, outline, transform, transizioni e animazioni keyframe.
Per sapere come applicare gli stili, combinarli con le classi ed ereditare gli stili del testo, vedi Styling. Per la sintassi delle classi, vedi il riferimento Tailwind.
style accetta anche un array; le voci vengono unite da sinistra a destra e quelle falsy vengono ignorate, quindi gli stili condizionali non richiedono lo spread. In Rust, .style_when(condition, …) aggiunge stili finché la condizione è vera:
Le chiavi di stile seguono il CSS, quindi uno stile e una classe che indicano la stessa proprietà fanno la stessa cosa:
Direzione del layout. Una view che non imposta display dispone i figli in colonna. display: "flex" è una riga a meno che flexDirection sia impostato, come in CSS e nella classe flex. flexShrink è 0 se non impostato.
Lati fisici e logici.left, right, marginLeft, paddingRight, borderLeftWidth, borderTopLeftRadius e textAlign: "left" mantengono il proprio lato nei layout da destra a sinistra. Le chiavi start ed end (marginStart, paddingEnd, start, end, borderStartWidth, …), la famiglia borderTopStartRadius e textAlign: "start" | "end" seguono la direzione: l’inline start è a sinistra nei layout da sinistra a destra e a destra in quelli da destra a sinistra.
Colori dei bordi. Un bordo o un outline con larghezza impostata e colore non impostato viene disegnato con il colore del testo (currentColor di CSS).
Transform.translate, rotate e scale sono proprietà a sé stanti, e transform accetta la stringa di funzioni CSS oppure un elenco di passaggi i cui valori possono essere valori animati. Si compongono in quest’ordine: translate, rotate, scale, poi transform.
Punti (indipendenti dalla densità). 1 è un punto su iOS e un dp su Android.
Points: px(16.0)
DimensionValue
number (punti), `${number}%` (rispetto al genitore) oppure "auto".
Length: px(…), relative(0.5), auto()
LengthValue
number (punti) oppure `${number}%`. Nessun "auto".
DefiniteLength: px(…), relative(0.5)
ColorValue
Una stringa di colore CSS: #rgb, #rgba, #rrggbb, #rrggbbaa, rgb(), rgba(), hsl(), hsla(), oklch(), oklab(), oppure un colore CSS con nome (black, white, transparent, rebeccapurple, …).
Hsla / AdaptiveColor: rgb(0x2563eb), hsla(…), colori del tema (theme().primary)
EnvValue
Una variabile d’ambiente in un padding o margin: env(name), env(name, <length>) (la lunghezza sostituisce un nome sconosciuto), calc(env(name) + <length>) oppure calc(<length> + env(name)). I nomi sono safe-area-inset-top, -right, -bottom, -left (Safe area) e keyboard-inset-height (Keyboard). Accettata dalle chiavi fisiche di padding e margin e dalle relative scorciatoie.
Un valore animato nativo o un nodo derivato da esso (vedi l’API di animazione di nsh). Accettato da opacity, backgroundColor, borderColor, color, translate, rotate, scale, dai passaggi di un elenco transform e da top / left di una view sticky; il valore si anima quindi sul thread UI senza JS.
Le stringhe con sintassi CSS (boxShadow, textShadow, backgroundImage, filter, gridTemplateColumns, …) accettano lunghezze in px e numeri semplici (entrambi in punti), pt (4/3 di punto, come in CSS) oppure rem (16 punti).
Il layout viene calcolato in Rust (flexbox e CSS grid). Una view che non imposta display è un flex container i cui figli sono impilati in colonna; display: "flex" ne fa una riga a meno che flexDirection sia impostato, come in CSS. Gli elementi hanno come valori predefiniti flexShrink: 0, alignContent: "flex-start" (grid: "normal" di CSS), alignItems: "stretch" e nessuna dimensione minima automatica. Vedi Layout.
Il layout dei figli. "flex" li dispone in riga a meno che flexDirection imposti una direzione, come in CSS; una view che non imposta display li dispone in colonna. "none" rimuove l’elemento dal layout e lo nasconde. "block" impila i figli come fa il layout block di CSS.
boxSizing
"border-box" | "content-box"
Le dimensioni includono bordi e padding, oppure solo il contenuto. Predefinito "border-box".
"absolute" toglie l’elemento dal flusso e lo posiziona con top / right / bottom / left rispetto all’antenato posizionato più vicino (il genitore, a meno che sia "static"). "static" resta nel flusso e ignora gli inset. "fixed" preserva il tipo dell’elemento e lo dispone e lo monta nella propria surface o root modale, mantenendolo fermo mentre il contenuto circostante scorre. "sticky" resta nel flusso e, finché il genitore è visibile, si blocca a top (left in una scroll view orizzontale) dall’inizio del viewport della scroll view che lo contiene, finché la sua fine non incontra quella del content box del genitore; viene disegnato sopra i fratelli con lo stesso zIndex. Predefinito "relative".
top
DimensionValue | AnimatedNode
.top(…), .inset(…), .bind_sticky_top(&node)
Offset dal bordo superiore del genitore (absolute) o dalla posizione propria dell’elemento (relative). Su una view sticky, indica dove si blocca, e un valore animato lo sposta a ogni frame.
right
DimensionValue
.right(…)
Offset dal bordo destro, in entrambe le direzioni.
bottom
DimensionValue
.bottom(…)
Offset dal bordo inferiore.
left
DimensionValue | AnimatedNode
.left(…), .bind_sticky_left(&node)
Offset dal bordo sinistro, in entrambe le direzioni. Su una view sticky in una scroll view orizzontale, indica dove si blocca, e un valore animato lo sposta a ogni frame.
start
DimensionValue
Offset dal bordo inline start: sinistra nei layout da sinistra a destra, destra in quelli da destra a sinistra.
end
DimensionValue
Offset dal bordo inline end: destra nei layout da sinistra a destra, sinistra in quelli da destra a sinistra.
zIndex
number
.z_index(z)
Ordine tra i fratelli (stabile a parità di valore); è anche l’ordine di sovrapposizione nativo.
direction
"inherit" | "ltr" | "rtl"
Direzione del layout, ereditata per impostazione predefinita. Come in CSS, le proprietà left e right mantengono i propri lati da destra a sinistra, mentre quelle inline start / end (marginStart, end, …) prendono i lati che la direzione assegna loro.
L’asse principale. Predefinito "column" per una view che non imposta display, "row" una volta impostato display: "flex".
flexWrap
"wrap" | "nowrap" | "wrap-reverse"
.flex_wrap()
Indica se i figli vanno a capo su più righe. Predefinito "nowrap".
flex
number
.flex_1(), .flex_auto(), .flex_none()
Un solo numero, non la scorciatoia CSS: un numero positivo imposta flexGrow a quel valore, flexShrink: 1 e flexBasis: 0; 0 rende l’elemento non flessibile; un numero negativo lo riduce fino alla dimensione minima.
flexGrow
number
.flex_grow(f)
Quanto dello spazio libero occupa l’elemento. Predefinito 0.
flexShrink
number
.flex_shrink(f), .flex_shrink_0()
Quanto si riduce l’elemento quando lo spazio finisce. Predefinito 0, non 1 come in CSS.
flexBasis
DimensionValue
.basis(…)
La dimensione sull’asse principale prima che lo spazio libero venga distribuito.
Distribuzione dei figli lungo l’asse principale. Predefinito "normal": "flex-start" nei flex container; nelle grid, le track di dimensione auto si estendono.
Distribuzione delle righe a capo (e delle track della grid) sull’asse trasversale. Predefinito "flex-start" nei flex container e "normal" nelle grid, dove le track di dimensione auto si estendono. "start" / "end" seguono la direzione di scrittura.
Larghezza divisa per altezza, un numero (1.5) o il rapporto CSS ("16 / 9"); la dimensione mancante viene calcolata dall’altra. "auto" non ne imposta nessuna.
I margin accettano "auto" (assorbe lo spazio libero, come in flexbox) e valori negativi. Le chiavi fisiche (tutte tranne marginStart / marginEnd) accettano anche un EnvValue: marginBottom: "env(keyboard-inset-height)" (in Rust .mb_keyboard(), .mt_safe_area(), …).
Chiave
Tipo
Rust
Descrizione
margin
DimensionValue | EnvValue
.m(…), .m_4()
Tutti e quattro i lati.
marginHorizontal
DimensionValue | EnvValue
.mx(…)
Sinistra e destra.
marginVertical
DimensionValue | EnvValue
.my(…)
Sopra e sotto.
marginTop
DimensionValue | EnvValue
.mt(…)
Sopra.
marginRight
DimensionValue | EnvValue
.mr(…)
Destra.
marginBottom
DimensionValue | EnvValue
.mb(…)
Sotto.
marginLeft
DimensionValue | EnvValue
.ml(…)
Sinistra.
marginStart
DimensionValue
.ms(…)
Inline start: sinistra nei layout da sinistra a destra, destra in quelli da destra a sinistra.
Le chiavi fisiche (tutte tranne paddingStart / paddingEnd) accettano anche un EnvValue: paddingTop: "env(safe-area-inset-top)", paddingBottom: "calc(env(safe-area-inset-bottom) + 16px)" (in Rust .pt_safe_area(), .pb_safe_area_plus(px(16.0)), .pb_keyboard(), …). Un padding è almeno 0.
Chiave
Tipo
Rust
Descrizione
padding
LengthValue | EnvValue
.p(…), .p_4()
Tutti e quattro i lati.
paddingHorizontal
LengthValue | EnvValue
.px(…)
Sinistra e destra.
paddingVertical
LengthValue | EnvValue
.py(…)
Sopra e sotto.
paddingTop
LengthValue | EnvValue
.pt(…)
Sopra.
paddingRight
LengthValue | EnvValue
.pr(…)
Destra.
paddingBottom
LengthValue | EnvValue
.pb(…)
Sotto.
paddingLeft
LengthValue | EnvValue
.pl(…)
Sinistra.
paddingStart
LengthValue
.ps(…)
Inline start: sinistra nei layout da sinistra a destra, destra in quelli da destra a sinistra.
Stile della linea. Valore predefinito "solid". "none" e "hidden" non disegnano né occupano spazio con alcun bordo, qualunque sia lo spessore, impostato prima o dopo, come in CSS.
Un lato con lo spessore impostato e un colore che nessuno imposta viene disegnato con il colore del testo, il currentColor di CSS: { borderWidth: 1, color: "#2563eb" } disegna un bordo blu. Anche gli outline prendono il colore del testo allo stesso modo.
"continuous": angoli la cui curvatura si raccorda gradualmente ai bordi, come le icone delle app iOS. Dove il box è troppo piccolo la curva torna circolare, così le forme a pillola restano tali. Funziona su entrambe le piattaforme.
Una vista proietta ombre con il boxShadow di CSS: più livelli, ombre con spread e ombre inset. Le transizioni la animano (transitionProperty: "boxShadow").
box-shadow di CSS: offset, sfocatura, spread e colore, più livelli separati da virgole, inset per le ombre interne; oppure i suoi livelli come numeri, [{ x, y, blur, spread, color, inset }] (solo x e y sono obbligatori); un livello senza colore viene disegnato con il colore del testo, come il currentColor di CSS. .shadow_color(c) ricolora i livelli di un preset o di .shadow(…).
Dove una vista o un’immagine all’interno di un <Text> si colloca nella sua riga, come il vertical-align di CSS: con il bordo inferiore sulla linea di base (predefinito), con il bordo superiore o inferiore alla sommità o alla base del font del testo, oppure con il centro a metà dell’altezza della x sopra la linea di base. La riga cresce per contenerla.
Le trasformazioni sono quelle di CSS: le proprietà translate, rotate e scale e transform, composte in quest’ordine. Ciascuna è una proprietà a sé, quindi il scale di uno stile sostituisce il scale-* di una classe e mantiene il suo rotate-*, e il transform di uno stile sostituisce le funzioni di trasformazione di una classe (rotate-x-*, skew-*).
translate di CSS: x, poi y ("10px 20px"; percentuali della dimensione della vista stessa, "-50% 0"). Un numero indica punti lungo x. [x, y] accetta un numero, una stringa ("50%", "10px") o un valore animato per asse; un valore animato da solo la sposta lungo x.
rotate
string | number | AnimatedNode
.rotate(deg(…)); .bind_rotate(&v)
rotate di CSS: "45deg", "0.5turn", oppure attorno a un asse, "x 90deg". Un numero, così come un valore animato, indica gradi attorno a z, in senso orario.
scale di CSS: 1.5, "150%", x e y ("1 2"). Un valore animato scala entrambi gli assi; [x, y] accetta un numero o un valore animato per asse.
transform
string | TransformStep[]
.rotate_x(…), .rotate_y(…), .skew_x(…), .skew_y(…), .transform_none(); passi animati: .bind_transform(kind, &v), .bind_motion(&m) (dopo ogni trasformazione di stile)
transform di CSS: "translateX(10px) rotate(45deg) scale(1.5)", oppure "none". Funzioni: translate(), translateX(), translateY(), scale(), scaleX(), scaleY(), rotate() / rotateZ(), rotateX(), rotateY(), skew(), skewX(), skewY(), perspective(). Le lunghezze accettano px (le traslazioni anche %, della dimensione della vista stessa), gli angoli deg, rad o turn. Oppure un elenco di passi le cui quantità possono essere valori animati: ciò che la stringa non può contenere, come una rotazione 3D animata ([{ perspective: 800 }, { rotateY: angle }]), e i canali di un movimento (m.transform). Il transform di uno stile è l’una o l’altra forma, quindi una prospettiva prima di passi animati è un passo dell’elenco. Applicato dopo translate, rotate e scale.
transformOrigin
string | (number | string)[]
.transform_origin(…), .origin_top_left(), …
Il punto attorno al quale agiscono le trasformazioni: parole chiave, percentuali e lunghezze ("top left", "50% 0", [10, 20]). Per impostazione predefinita è il centro.
Un TransformStep è un oggetto con una sola chiave, applicato nell’ordine dell’elenco:
Filtri CSS della vista e del suo contenuto: brightness(), contrast(), grayscale(), hue-rotate(), invert(), saturate(), sepia(), opacity(), blur(), drop-shadow().
backdropFilter
string
.backdrop_blur(r), .backdrop_brightness(…), …
Filtri CSS di ciò che sta dietro la vista, come "blur(10px)" per il vetro smerigliato.
maskImage
string
Un gradiente CSS il cui alfa decide quanta parte della vista viene disegnata, per intero dove è opaco e per nulla dove è trasparente: linear-gradient(...), radial-gradient(...), conic-gradient(...). Maschera tutto ciò che la vista disegna, compreso il suo filtro di sfondo.
glassEffect
"none" | "regular" | "clear"
.glass_effect(GlassEffect::Regular)
Liquid Glass dietro il contenuto della vista su iOS 26 e macOS 26 e successivi. "regular" usa il materiale standard; "clear" prende meno colore dallo sfondo. "none" è il valore predefinito. Abbinalo a backdropFilter per la sfocatura mostrata nelle versioni precedenti di iOS e sulle altre piattaforme.
Quando una proprietà con transizione cambia (da un nuovo stile, una classe o una variante come active:), la piattaforma la anima in modo nativo. Durante l’animazione non viene eseguito alcun JS.
Proprietà da animare, separate da virgole: "all", "colors" (color, backgroundColor, borderColor, …), "opacity", "transform" (ogni proprietà di trasformazione), "boxShadow", "borderRadius", "borderWidth", oppure "none".
transitionDuration
number | "${number}ms" | "${number}s"
.duration(ms)
Millisecondi come numero, oppure "150ms" / "0.2s".
"auto" | "default" | "pointer" | "text" | "grab" | "grabbing" | "not-allowed" | ... (ogni parola chiave di cursore CSS, e "none")
.cursor(Cursor), .cursor_pointer()
La forma del puntatore sopra la vista, per i dispositivi di puntamento (trackpad dell’iPad, Mac Catalyst, desktop). Le parole chiave di ridimensionamento diagonale mantengono il loro asse: nwse-resize / nw-resize / se-resize (Cursor::NwseResize) e nesw-resize / ne-resize / sw-resize (Cursor::NeswResize). Windows, Linux, Android, il web e GPUI mostrano i cursori diagonali; AppKit li usa su macOS 15+, con una mano aperta su macOS 14. UIKit usa gli effetti del puntatore su iPad e Mac Catalyst.
pointerEvents
"auto" | "none" | "box-none" | "box-only"
.pointer_events(PointerEvents::BoxNone)
Quali tocchi la vista e le viste al suo interno accettano (pointer-events-none, pointer-events-auto). "none": nessuno, anche per le viste al suo interno a meno che una non imposti "auto", ereditato come in CSS. "box-none": nessuno sulla vista stessa, le viste al suo interno accettano i propri; "box-only": la vista stessa li accetta, le viste al suo interno nessuno (entrambi quelli di React Native, solo per la vista). Valore predefinito "auto". Vedi tocco e gesti.
userSelect
"auto" | "none" | "text"
.select_text(), .select_none()
Se un <Text> può essere selezionato e copiato ("text", select-text) o no ("none", select-none); il valore di una vista raggiunge i testi al suo interno che non ne impostano alcuno. "auto" (select-auto), il valore predefinito, lo lascia alla vista che lo circonda, altrimenti alla piattaforma. Vedi testo.
Le proprietà di paint CSS delle forme SVG, che qualsiasi elemento accetta e che gli elementi al suo interno ereditano, come in un browser.
Dipingono ciò che i componenti Rust disegnano sui canvas.
Chiave
Tipo
Rust
Descrizione
fill
"none" | "currentColor" | ColorValue
.fill_color(c), .fill_none(), .fill_current()
Con cosa vengono riempite le forme; currentColor è il colore del testo dell’elemento.
Gli stili di testo si applicano a <Text> e <Input>. Sono anche ereditati, come in CSS: le proprietà di testo impostate su una vista passano ai testi e agli input al suo interno, e gli span <Text> annidati ereditano dal testo genitore. Si applicano anche tutte le chiavi di ViewStyle. Vedi Testo.
Colore del testo. Accetta un colore animato nativo. È anche il colore di bordi e outline che non ne impostano alcuno.
fontSize
number
.text_size(s), .text_sm(), .text_lg(), …
Dimensione in punti.
fontWeight
"normal" | "bold" | number | "${number}"
.font_weight(FontWeight::SEMIBOLD)
"normal" (400), "bold" (700) oppure 100–900.
fontFamily
string
.font_family(name)
Una famiglia di sistema, o il nome a cui si valuta un font importato (import Inter from "./Inter.ttf"), o un elenco di essi, dal più preferito ("Brand, 'Noto Sans SC', sans-serif"). Vedi Font.
Forme OpenType di numeri e lettere, un elenco (["tabular-nums"]) oppure i nomi CSS separati da spazi ("tabular-nums small-caps"). tabular-nums mantiene le cifre della stessa larghezza, utile per contatori e timer.
Il numero massimo di righe mostrate da un <Text> (line-clamp, line-clamp-* di CSS); 0 (line-clamp-none), il valore predefinito, le mostra tutte. truncate è una sola riga troncata con i puntini di sospensione.
Come viene troncato un <Text> limitato: con i puntini di sospensione alla fine ("ellipsis", text-ellipsis, il valore predefinito), con un taglio netto ("clip", text-clip), oppure con i puntini di sospensione all’inizio o al centro (percorsi di file).
placeholderColor e caretColor appartengono a InputStyle, lo stile di <Input>; selectionColor a TextStyle, poiché anche i testi selezionabili lo accettano.
Key
Type
Rust
Description
placeholderColor
ColorValue
.placeholder_color(c) di un input
Il colore del segnaposto di un <Input> (placeholder:text-*).
textAlignVertical
"auto" | "top" | "center" | "bottom"
Dove si posiziona il testo più corto del suo riquadro (un <Text> con un’altezza).
selectionColor
ColorValue
.selection_color(c) di un input o di un testo
L’evidenziazione della selezione e le maniglie di un <Input> o di un <Text> selezionabile (selection:bg-*); per impostazione predefinita, il colore di accento della piattaforma. Su iOS anche il cursore di un input, a meno che caretColor non sia impostato (UIKit colora entrambi con un solo colore).
caretColor
ColorValue
.caret_color(c) di un input
Il cursore di un <Input> (caret-*); se non impostato, il valore predefinito della piattaforma.
text-shadow di CSS: scostamenti, sfocatura e colore ("0 1px 2px rgb(0 0 0 / 0.3)"), oppure i suoi livelli come numeri, [{ x, y, blur, color }]; se ci sono più livelli, viene disegnato come il più ampio; un livello senza colore viene disegnato con il colore del testo; "none".
object-fit di CSS: come un’immagine o un video si adatta al proprio riquadro. "cover" lo riempie e ritaglia, "contain" lo adatta all’interno, "fill" lo stira, "none" mantiene la dimensione naturale, "scale-down" equivale a "none" o "contain", a seconda di quale sia il più piccolo. Per impostazione predefinita le immagini coprono il proprio riquadro, mentre i video vi sono contenuti.
objectPosition
string
.object_position(p), .object_top(), … di un’immagine
Dove si posiziona l’immagine nel proprio riquadro dopo che objectFit l’ha dimensionata, come object-position di CSS: parole chiave, percentuali e lunghezze ("top", "left bottom", "25% 75%", "right 10px bottom 20%"). Un’immagine che copre il riquadro viene ritagliata attorno a questo punto. Per impostazione predefinita, il centro.
objectFit si applica anche a <Video>; vedi image e video.