このページは機械翻訳のため、誤りを含む場合があります。 英語の原文を読む

API

スタイルリファレンス

このページでは、style prop のすべてのキーと、Rust でそのキーを設定する Styled のメソッドを一覧にしています。Rust コンポーネントは、Tailwind のユーティリティ名にちなんだ型付きメソッド(.p_4()、.rounded(px(12.0))、.bg(color)、nsh_core::prelude のもの)で要素をスタイリングし、これらは同じキーに変換されます。TSX では style オブジェクト(およびクラス)を渡します。Rust 列にはメソッド名を示しています。ほとんどのメソッドには値、シグナル、クロージャを渡せ、.style_when(…) / .style_with(…) を使えばどのメソッドも条件付きにできます。キーとその型は .nsh/types/nsh/types.d.ts の生成された宣言に由来するため、エディタが入力中にチェックしてくれます。スタイルキーは同名の CSS プロパティを意味し、それを設定するクラスと同じ動作をします。paddingLeft は CSS の padding-left と pl-4、boxShadow は box-shadow と shadow-md に対応します。一部のキーには、アプリで書きやすい平易な名前が使われています(padding-inline に対する paddingHorizontal、margin-inline-start に対する marginStart、line-clamp に対する numberOfLines)。数値の単位はポイントです。grid、グラデーション、ボックスシャドウ、フィルター、ブレンドモード、アウトライン、トランスフォーム、トランジション、キーフレームアニメーションといった CSS の機能も利用できます。

スタイルの適用方法、クラスとの組み合わせ、テキストスタイルの継承については スタイリング を参照してください。クラスの構文については Tailwind リファレンス を参照してください。

#5 つのインターフェース

各インターフェースは、前のインターフェースを継承します。

インターフェース継承元用途
LayoutStyleすべての要素のレイアウト(flexbox、grid、サイズ、間隔、位置)
ViewStyleLayoutStyle<View>、<Scroll>、<List>、コントロール、その他すべての要素
TextStyleViewStyle<Text> と <Input>(およびビュー。ビューのテキストスタイルは内部のテキストに引き継がれます)
InputStyleTextStyle<Input>: placeholderColor と caretColor を追加
ImageStyleViewStyle<Image>
use nsh_core::prelude::*;

fn card() -> View {
    view().p_4().rounded(px(12.0)).bg(white()).shadow([BoxShadow {
        offset_y: px(4.0),
        blur: px(12.0),
        color: rgba(0x00000014).into(),
        ..BoxShadow::default()
    }])
}

fn title(label: &str) -> Text {
    text(label.to_string()).text_size(px(17.0)).font_weight(FontWeight::SEMIBOLD).text_color(rgb(0x111111))
}

card().child(title("Hello"))

style は配列も受け付けます。要素は左から右へマージックされ、falsy な要素はスキップされるため、条件付きスタイルにスプレッドは不要です。Rust では、.style_when(condition, …) は条件が成り立つ間スタイルを追加します。

card().style_when(selected, |s| s.border_color(rgb(0x2563eb)).border(px(2.0)))

#スタイルキーの読み方

スタイルキーは CSS に従うため、同じプロパティを指すスタイルとクラスは同じ動作をします。

  • レイアウト方向。 display を設定しないビューは、子要素を縦方向(column)に配置します。display: "flex" は、CSS や flex クラスと同様に、flexDirection が設定されていない限り横方向(row)になります。flexShrink は、設定しない限り 0 です。
  • 物理的な辺と論理的な辺。 left、right、marginLeft、paddingRight、borderLeftWidth、borderTopLeftRadius、textAlign: "left" は、右から左へのレイアウトでも同じ辺を保ちます。start / end のキー(marginStart、paddingEnd、start、end、borderStartWidth など)、borderTopStartRadius ファミリー、textAlign: "start" | "end" は方向に従います。inline start は、左から右のレイアウトでは左、右から左のレイアウトでは右です。
  • ボーダーの色。 幅が設定されていて色が設定されていないボーダーまたはアウトラインは、テキストの色(CSS の currentColor)で描画されます。
  • トランスフォーム。 translate、rotate、scale はそれぞれ独立したプロパティであり、transform は CSS の関数の文字列、または量がアニメーション値でもよいステップのリストを受け付けます。これらは translate、rotate、scale、transform の順に合成されます。

#値の型

型受け付ける値Rust
numberポイント(密度非依存)。1 は iOS では 1 ポイント、Android では 1 dp です。Points: px(16.0)
DimensionValuenumber(ポイント)、`${number}%`(親に対する割合)、または "auto"。Length: px(…)、relative(0.5)、auto()
LengthValuenumber(ポイント)または `${number}%`。"auto" は使えません。DefiniteLength: px(…)、relative(0.5)
ColorValueCSS のカラー文字列: #rgb、#rgba、#rrggbb、#rrggbbaa、rgb()、rgba()、hsl()、hsla()、oklch()、oklab()、または名前付きの CSS カラー(black、white、transparent、rebeccapurple など)。Hsla / AdaptiveColor: rgb(0x2563eb)、hsla(…)、テーマカラー(theme().primary)
EnvValuepadding または margin 内の環境変数: env(name)、env(name, <length>)(未知の名前の代わりに長さが使われます)、calc(env(name) + <length>) または calc(<length> + env(name))。名前は safe-area-inset-top、-right、-bottom、-left(セーフエリア)と keyboard-inset-height(キーボード)です。物理的な padding と margin のキーおよびそのショートハンドで使えます。.p_safe_area()、.pt_safe_area_plus(px(8.0))、.pb_keyboard()、.mb_keyboard_plus(…) など
AnimatedNodeネイティブのアニメーション値、またはそこから派生したノード(nsh のアニメーション API を参照)。opacity、backgroundColor、borderColor、color、translate、rotate、scale、transform リストのステップ、sticky ビューの top / left で使えます。この場合、値は JS を介さず UI スレッド上でアニメーションします。AnimatedValue / AnimatedNode。.bind_opacity(&v)、.bind_background(&v)、.bind_border_color(&v)、.bind_color(&v)、.bind_translate_x(&v) などでバインドします

CSS 構文の文字列(boxShadow、textShadow、backgroundImage、filter、gridTemplateColumns など)では、長さを px と数値のみ(どちらもポイント)、pt(CSS と同様に 1 ポイントの 4/3)、または rem(16 ポイント)で指定できます。

#LayoutStyle

レイアウトは Rust で計算されます(flexbox と CSS grid)。display を設定しないビューは、子要素を縦方向に積む flex コンテナになります。display: "flex" を指定すると、CSS と同様に flexDirection が設定されていない限り横方向(row)になります。要素のデフォルトは flexShrink: 0、alignContent: "flex-start"(grid では CSS の "normal")、alignItems: "stretch" で、自動的な最小サイズはありません。レイアウト を参照してください。

#表示と位置

キー型Rust説明
display"flex" | "grid" | "block" | "flow-root" | "none".flex()、.grid()、.hidden()子要素のレイアウト。"flex" は、CSS と同様に flexDirection で方向を指定しない限り、子要素を横方向に配置します。display を設定しないビューは、子要素を縦方向に配置します。"none" は要素をレイアウトから除外して非表示にします。"block" は CSS のブロックレイアウトと同様に子要素を積み重ねます。
boxSizing"border-box" | "content-box"寸法にボーダーとパディングを含めるか、コンテンツのみとするか。デフォルトは "border-box"。
position"relative" | "absolute" | "static" | "fixed" | "sticky".relative()、.absolute()"absolute" は要素をフローから外し、最も近い位置指定された祖先(それが "static" でない限り親)を基準に top / right / bottom / left で配置します。"static" はフロー内に留まり、インセットを無視します。"fixed" は要素の型を保ったまま、サーフェスまたはモーダルのルート内でレイアウトとマウントを行い、周囲のコンテンツがスクロールしても所定の位置に留まります。"sticky" はフロー内に留まり、親が表示されている間、周囲のスクロールビューのビューポートの開始位置から top(横スクロールビューでは left)の位置に貼り付き、その終端が親のコンテンツボックスの終端に達するまで続きます。同じ zIndex を持つ兄弟要素より上に描画されます。デフォルトは "relative"。
topDimensionValue | AnimatedNode.top(…)、.inset(…)、.bind_sticky_top(&node)親の上端(absolute)または要素自身の位置(relative)からのオフセット。sticky ビューでは貼り付く位置を表し、アニメーション値を使うと毎フレーム移動します。
rightDimensionValue.right(…)右端からのオフセット。どちらの方向でも同じです。
bottomDimensionValue.bottom(…)下端からのオフセット。
leftDimensionValue | AnimatedNode.left(…)、.bind_sticky_left(&node)左端からのオフセット。どちらの方向でも同じです。横スクロールビュー内の sticky ビューでは貼り付く位置を表し、アニメーション値を使うと毎フレーム移動します。
startDimensionValueinline start 端からのオフセット。左から右のレイアウトでは左、右から左のレイアウトでは右。
endDimensionValueinline end 端からのオフセット。左から右のレイアウトでは右、右から左のレイアウトでは左。
zIndexnumber.z_index(z)兄弟要素間の順序(同じ値なら安定)。ネイティブの重なり順にもなります。
direction"inherit" | "ltr" | "rtl"レイアウト方向。デフォルトでは継承されます。CSS と同様に、left と right のプロパティは右から左でも辺を保ち、inline start / end のプロパティ(marginStart、end など)は方向に応じた辺になります。

#Flexbox

キー型Rust説明
flexDirection"row" | "column" | "row-reverse" | "column-reverse".flex_row()、.flex_col()、.flex_row_reverse()、.flex_col_reverse()主軸。デフォルトは、display を設定しないビューでは "column"、display: "flex" が設定されている場合は "row"。
flexWrap"wrap" | "nowrap" | "wrap-reverse".flex_wrap()子要素を複数行に折り返すかどうか。デフォルトは "nowrap"。
flexnumber.flex_1()、.flex_auto()、.flex_none()CSS のショートハンドではなく、単一の数値です。正の数は flexGrow をその値に、flexShrink: 1 と flexBasis: 0 を設定します。0 は要素を伸縮不可にし、負の数は最小サイズまで縮小できるようにします。
flexGrownumber.flex_grow(f)要素が取る空きスペースの割合。デフォルトは 0。
flexShrinknumber.flex_shrink(f)、.flex_shrink_0()スペースが足りなくなったときに要素が縮む割合。デフォルトは 0 で、CSS のような 1 ではありません。
flexBasisDimensionValue.basis(…)空きスペースが分配される前の主軸方向のサイズ。
justifyContent"flex-start" | "flex-end" | "start" | "end" | "center" | "space-between" | "space-around" | "space-evenly" | "stretch" | "normal".justify_start()、.justify_center()、.justify_end()、.justify_between()、.justify_around()、.justify_evenly()主軸に沿った子要素の配分。デフォルトは "normal": flex コンテナでは "flex-start"、grid では auto サイズのトラックが引き伸ばされます。
alignItems"flex-start" | "flex-end" | "start" | "end" | "self-start" | "self-end" | "center" | "stretch" | "baseline" | "normal".items_start()、.items_center()、.items_end()、.items_stretch()、.items_baseline()交差軸上での子要素の配置。デフォルトは "stretch"。
alignSelf"auto" | "flex-start" | "flex-end" | "start" | "end" | "self-start" | "self-end" | "center" | "stretch" | "baseline" | "normal".self_start()、.self_center()、.self_end()、.self_stretch()この要素について、親の alignItems を上書きします。
alignContent"flex-start" | "flex-end" | "start" | "end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly" | "normal".content_start()、.content_center()、.content_between()、…交差軸上での折り返された行(および grid のトラック)の配分。デフォルトは flex コンテナでは "flex-start"、grid では "normal" で、grid では auto サイズのトラックが引き伸ばされます。"start" / "end" は書字方向に従います。
gapLengthValue.gap(…)、.gap_4()子要素の行と列の間隔。
rowGapLengthValue.gap_y(…)行の間隔。
columnGapLengthValue.gap_x(…)列の間隔。

#Grid

子要素を CSS grid でレイアウトするには、display: "grid" を設定します。トラックのリストには CSS 構文を使います。

キー型Rust説明
gridTemplateColumnsstring.grid_template_columns(…)、.grid_cols(n)列トラック: "repeat(3, 1fr)"、"200px 1fr"、minmax()、auto-fill / auto-fit、ライン名("[a] 40px [b c] 1fr [d]")。
gridTemplateRowsstring.grid_template_rows(…)、.grid_rows(n)行トラック。構文は同じです。
gridAutoColumnsstring暗黙的に作成される列のサイズ。
gridAutoRowsstring暗黙的に作成される行のサイズ。
gridAutoFlow"row" | "column" | "dense" | "row dense" | "column dense".grid_flow_col()、.grid_flow_dense()配置指定のないアイテムが grid を埋める方法。
gridColumnnumber | string.col_span(n)、.col_span_full()列の配置: "1 / 3"、"span 2"、ライン番号またはライン名("content-start / content-end"、"2 col"、"span col")。
gridColumnStartnumber | string.col_start(…)列の開始ライン。
gridColumnEndnumber | string.col_end(…)列の終了ライン。
gridRownumber | string.row_span(n)、.row_span_full()行の配置。構文は gridColumn と同じです。
gridRowStartnumber | string.row_start(…)行の開始ライン。
gridRowEndnumber | string.row_end(…)行の終了ライン。
justifyItems"flex-start" | "flex-end" | "start" | "end" | "self-start" | "self-end" | "center" | "stretch" | "baseline" | "normal"grid アイテムが行方向にエリア内でどう配置されるか。
justifySelf"auto" | "flex-start" | "flex-end" | "start" | "end" | "self-start" | "self-end" | "center" | "stretch" | "baseline" | "normal"このアイテムについて justifyItems を上書きします。
view()
    .grid()
    .grid_template_columns("repeat(3, 1fr)")
    .gap_2()
    .child(view().col_span(2).h(px(60.0)).bg(rgb(0xc7d2fe)))
    .child(view().h(px(60.0)).bg(rgb(0xa5b4fc)))

#サイズ

キー型Rust説明
widthDimensionValue.w(…)、.w_full()、.size(…)幅。
heightDimensionValue.h(…)、.h_full()高さ。
minWidthLengthValue.min_w(…)最小幅。
minHeightLengthValue.min_h(…)最小高さ。
maxWidthLengthValue.max_w(…)最大幅。
maxHeightLengthValue.max_h(…)最大高さ。
aspectRationumber | "auto" | "16 / 9".aspect_ratio(r)、.aspect_square()幅を高さで割った値。数値(1.5)または CSS の比率("16 / 9")で指定し、もう一方の寸法は他方から計算されます。"auto" は何も設定しません。

#マージン

マージンは "auto"(flexbox と同様に空きスペースを吸収)と負の値を受け付けます。物理キー(marginStart / marginEnd を除くすべて)は EnvValue も受け付けます: marginBottom: "env(keyboard-inset-height)"(Rust では .mb_keyboard()、.mt_safe_area() など)。

キー型Rust説明
marginDimensionValue | EnvValue.m(…)、.m_4()四辺すべて。
marginHorizontalDimensionValue | EnvValue.mx(…)左右。
marginVerticalDimensionValue | EnvValue.my(…)上下。
marginTopDimensionValue | EnvValue.mt(…)上。
marginRightDimensionValue | EnvValue.mr(…)右。
marginBottomDimensionValue | EnvValue.mb(…)下。
marginLeftDimensionValue | EnvValue.ml(…)左。
marginStartDimensionValue.ms(…)inline start: 左から右のレイアウトでは左、右から左のレイアウトでは右。
marginEndDimensionValue.me(…)inline end: marginStart の反対側。

#パディング

物理キー(paddingStart / paddingEnd を除くすべて)は EnvValue も受け付けます: paddingTop: "env(safe-area-inset-top)"、paddingBottom: "calc(env(safe-area-inset-bottom) + 16px)"(Rust では .pt_safe_area()、.pb_safe_area_plus(px(16.0))、.pb_keyboard() など)。パディングは 0 以上です。

キー型Rust説明
paddingLengthValue | EnvValue.p(…)、.p_4()四辺すべて。
paddingHorizontalLengthValue | EnvValue.px(…)左右。
paddingVerticalLengthValue | EnvValue.py(…)上下。
paddingTopLengthValue | EnvValue.pt(…)上。
paddingRightLengthValue | EnvValue.pr(…)右。
paddingBottomLengthValue | EnvValue.pb(…)下。
paddingLeftLengthValue | EnvValue.pl(…)左。
paddingStartLengthValue.ps(…)inline start: 左から右のレイアウトでは左、右から左のレイアウトでは右。
paddingEndLengthValue.pe(…)inline end: paddingStart の反対側。

#ViewStyle

ビューによって描画されるすべての要素です。LayoutStyle のすべてのキーも適用されます。

#背景

キー型Rust説明
backgroundColorColorValue | AnimatedNode.bg(color)、.bind_background(&node)塗りつぶしの色。ネイティブのアニメーションカラーを受け付けます。
backgroundImagestring.bg_linear(angle)、.bg_radial()、.bg_conic()(.gradient_from / _via / _to と併用)背景色の上に描画される CSS グラデーション: linear-gradient(...)、radial-gradient(...)、conic-gradient(...)。カンマ区切りで複数指定できます。
view().h(px(120.0)).rounded(px(16.0)).bg_linear(deg(135.0)).gradient_from(rgb(0x6366f1)).gradient_to(rgb(0xec4899))

#枠線

キー型Rust説明
borderWidthnumber.border(w), .border_1(), .border_2()四辺すべての幅。
borderTopWidthnumber.border_t(w)上辺。
borderRightWidthnumber.border_r(w)右辺。
borderBottomWidthnumber.border_b(w)下辺。
borderLeftWidthnumber.border_l(w)左辺。
borderStartWidthnumber.border_s(w)インライン開始側の辺(左から右へのレイアウトでは左、右から左へのレイアウトでは右)。
borderEndWidthnumber.border_e(w)インライン終了側の辺。
borderColorColorValue | AnimatedNode.border_color(c), .bind_border_color(&node)四辺すべての色。ネイティブのアニメーションカラーを受け取ります。
borderTopColorColorValue.border_t_color(c)上辺。
borderRightColorColorValue.border_r_color(c)右辺。
borderBottomColorColorValue.border_b_color(c)下辺。
borderLeftColorColorValue.border_l_color(c)左辺。
borderStartColorColorValue.border_s_color(c)インライン開始側の辺。
borderEndColorColorValue.border_e_color(c)インライン終了側の辺。
borderStyle"solid" | "dashed" | "dotted" | "none" | "hidden".border_solid(), .border_dashed(), .border_dotted(), .border_none()線のスタイル。デフォルトは"solid"。"none"と"hidden"は、幅を前に設定しても後に設定しても、CSSと同様に枠線を描画せず、レイアウトにも含めません。

幅が設定されていて色がどこにも設定されていない辺は、CSSのcurrentColorと同様にテキストの色で描画されます。{ borderWidth: 1, color: "#2563eb" }は青い枠線を描画します。アウトラインも同じようにテキストの色を使います。

#角

キー型Rust説明
borderRadiusnumber.rounded(r), .rounded_lg()四隅すべての半径。
borderTopLeftRadiusnumber.rounded_tl(r)左上の角。
borderTopRightRadiusnumber.rounded_tr(r)右上の角。
borderBottomRightRadiusnumber.rounded_br(r)右下の角。
borderBottomLeftRadiusnumber.rounded_bl(r)左下の角。
borderTopStartRadiusnumber.rounded_ss(r)インライン開始側の上の角。
borderTopEndRadiusnumber.rounded_se(r)インライン終了側の上の角。
borderBottomStartRadiusnumber.rounded_es(r)インライン開始側の下の角。
borderBottomEndRadiusnumber.rounded_ee(r)インライン終了側の下の角。
borderCurve"circular" | "continuous".border_curve(curve)"continuous": 曲率が辺へなめらかに移り変わる角。iOSのアプリアイコンのような形です。ボックスが小さすぎる場合は曲線が円形に戻るため、ピル形はピル形のままです。両プラットフォームで動作します。

#アウトライン

アウトラインは枠線の外側に描画され、レイアウト上のスペースを取りません。

キー型Rust説明
outlineWidthnumber.outline(w)線の幅。
outlineColorColorValue.outline_color(c)線の色。デフォルトはテキストの色。
outlineStyle"solid" | "dashed" | "dotted" | "none" | "hidden".outline_dashed(), .outline_dotted(), .outline_none()線のスタイル。
outlineOffsetnumber.outline_offset(o)枠線の端からの距離。負の値を指定すると内側に移動します。

#影

ビューはCSSのboxShadowで影を落とします。複数のレイヤー、スプレッド、インセットシャドウに対応しています。トランジションでアニメーションさせることもできます(transitionProperty: "boxShadow")。

キー型Rust説明
boxShadowstring | BoxShadowLayer[].shadow([BoxShadow { … }]), .shadow_md(), .shadow_color(c)CSSのbox-shadow: オフセット、ぼかし、スプレッド、色。複数のレイヤーはカンマで区切り、内側の影にはinsetを使います。または、各レイヤーを数値で指定する[{ x, y, blur, spread, color, inset }](必須はxとyのみ)。色のないレイヤーは、CSSのcurrentColorと同様にテキストの色で描画されます。.shadow_color(c)は、プリセットまたは.shadow(…)のレイヤーの色を変更します。
view().p_4().rounded(px(12.0)).bg(white()).shadow([
    BoxShadow { offset_y: px(1.0), blur: px(2.0), color: rgba(0x0000000f).into(), ..BoxShadow::default() },
    BoxShadow { offset_y: px(8.0), blur: px(24.0), spread: px(-4.0), color: rgba(0x0000001f).into(), ..BoxShadow::default() },
])

#不透明度、可視性、オーバーフロー

キー型Rust説明
opacitynumber | AnimatedNode.opacity(o), .bind_opacity(&value)0(不可視)から1。ネイティブのアニメーション値を受け取ります。
visibility"visible" | "hidden" | "collapse"非表示のビューもレイアウト上のスペースを保持します(display: "none"とは異なります)。
overflow"visible" | "hidden".overflow_hidden()"hidden"は子要素をビューの境界(と角)でクリップします。
backfaceVisibility"visible" | "hidden".backface_hidden(), .backface_visible()"hidden": 3D回転で裏返っている間は不可視になります。
verticalAlign"baseline" | "text-top" | "text-bottom" | "middle".align_baseline(), .align_text_top(), .align_text_bottom(), .align_middle()<Text>内のビューや画像が行のどこに配置されるか。CSSのvertical-alignと同様です: 下端をベースラインに合わせる(デフォルト)、上端または下端をテキストフォントの上端または下端に合わせる、または中央をベースラインからxハイトの半分上に合わせます。行はそれを収めるために広がります。

#トランスフォーム

トランスフォームはCSSのものです。translate、rotate、scaleプロパティとtransformが、この順に合成されます。それぞれが独立したプロパティなので、スタイルのscaleはクラスのscale-*を置き換えてrotate-*を保持し、スタイルのtransformはクラスのtransform関数(rotate-x-*、skew-*)を置き換えます。

キー型Rust説明
translatestring | number | AnimatedNode | [x, y].translate_x(…), .translate_y(…); .bind_translate_x(&v), .bind_translate_y(&v)CSSのtranslate: xの次にy("10px 20px"。ビュー自身のサイズに対する割合、"-50% 0")。数値はxに沿ったポイント数です。[x, y]は軸ごとに数値、文字列("50%"、"10px")、またはアニメーション値を受け取ります。アニメーション値のみを指定した場合はxに沿って移動します。
rotatestring | number | AnimatedNode.rotate(deg(…)); .bind_rotate(&v)CSSのrotate: "45deg"、"0.5turn"、または軸まわりの"x 90deg"。数値とアニメーション値は、z軸まわりの角度(度、時計回り)です。
scalestring | number | AnimatedNode | [x, y].scale(f), .scale_x(f), .scale_y(f); .bind_scale(&v)CSSのscale: 1.5、"150%"、xとy("1 2")。アニメーション値は両軸を拡大縮小します。[x, y]は軸ごとに数値またはアニメーション値を受け取ります。
transformstring | TransformStep[].rotate_x(…), .rotate_y(…), .skew_x(…), .skew_y(…), .transform_none(); アニメーションステップ: .bind_transform(kind, &v), .bind_motion(&m)(すべてのスタイルtransformの後)CSSのtransform: "translateX(10px) rotate(45deg) scale(1.5)"、または"none"。関数: translate(), translateX(), translateY(), scale(), scaleX(), scaleY(), rotate() / rotateZ(), rotateX(), rotateY(), skew(), skewX(), skewY(), perspective()。長さはpxを受け取ります(平行移動は、ビュー自身のサイズに対する割合の%も可)。角度はdeg、rad、またはturnです。または、量にアニメーション値を使えるステップのリスト。文字列では表現できないもの、たとえばアニメーションする3D回転([{ perspective: 800 }, { rotateY: angle }])や、モーションのチャネル(m.transform)に使います。スタイルのtransformはどちらか一方の形式なので、アニメーションステップの前にあるperspectiveはリストのステップとして指定します。translate、rotate、scaleの後に適用されます。
transformOriginstring | (number | string)[].transform_origin(…), .origin_top_left(), …トランスフォームの基準点: キーワード、パーセンテージ、長さ("top left"、"50% 0"、[10, 20])。デフォルトは中心。

TransformStepは1つのキーを持つオブジェクトで、リストの順に適用されます。

ステップ値ネイティブアニメーション
translateX, translateYnumber(ポイント)はい
scale, scaleX, scaleYnumber(倍率)はい
rotate, rotateZ, rotateX, rotateYnumber(度)またはstring("45deg", "0.5rad")はい
skewX, skewYnumber(度)またはstringいいえ
perspectivenumber(ポイント)いいえ
view().perspective(px(600.0)).child(view().rotate_y(deg(20.0)).scale(0.95))

アニメーション値は、translate、rotate、scale、およびtransformリストのステップを直接駆動します。

const x = createAnimatedValue(0);
const angle = createAnimatedValue(0);

<View style={{ translate: [x, 0], rotate: angle }} />
<View style={{ transform: [{ perspective: 800 }, { rotateY: angle }] }} />

#フィルターとブレンド

キー型Rust説明
filterstring.blur(r), .brightness(…), .contrast(…), .grayscale(…), .hue_rotate(…), .invert(…), .saturate(…), .sepia(…)ビューとその内容に対するCSSフィルター: brightness(), contrast(), grayscale(), hue-rotate(), invert(), saturate(), sepia(), opacity(), blur(), drop-shadow()。
backdropFilterstring.backdrop_blur(r), .backdrop_brightness(…), …ビューの背後にあるものに対するCSSフィルター。すりガラス効果の"blur(10px)"など。
maskImagestringアルファによってビューのどれだけを描画するかを決めるCSSグラデーション。不透明な部分は完全に描画され、透明な部分はまったく描画されません: linear-gradient(...), radial-gradient(...), conic-gradient(...)。バックドロップフィルターを含め、ビューが描画するすべてをマスクします。
glassEffect"none" | "regular" | "clear".glass_effect(GlassEffect::Regular)iOS 26およびmacOS 26以降で、ビューの内容の背後にLiquid Glassを表示します。"regular"は標準のマテリアルを使い、"clear"は背景から取り込む色が少なくなります。"none"がデフォルトです。以前のiOSバージョンや他のプラットフォームで表示されるぼかしには、backdropFilterを併用してください。
mixBlendMode"normal" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity" | "plus-darker" | "plus-lighter".mix_blend_mode(mode)ビューが背後のものとどのようにブレンドされるか。

#トランジション

トランジション対象のプロパティが変化すると(新しいスタイル、クラス、またはactive:のようなバリアントによって)、プラットフォームがそれをネイティブにアニメーションさせます。アニメーション中はJSが実行されません。

キー型Rust説明
transitionPropertystring.transition(), .transition_all(), .transition_colors(), .transition_opacity(), .transition_shadow(), .transition_transform(), .transition_none()アニメーションさせるプロパティのカンマ区切りリスト: "all", "colors"(color, backgroundColor, borderColor, …), "opacity", "transform"(すべてのtransformプロパティ), "boxShadow", "borderRadius", "borderWidth", または"none"。
transitionDurationnumber | "${number}ms" | "${number}s".duration(ms)ミリ秒単位の数値、または"150ms" / "0.2s"。
transitionDelaynumber | "${number}ms" | "${number}s".delay(ms)トランジションが始まるまでの遅延。
transitionTimingFunction"linear" | "ease" | "ease-in" | "ease-out" | "ease-in-out" | "cubic-bezier(...)".ease_linear(), .ease_in(), .ease_out(), .ease_in_out(), .ease_bezier(…)イージングカーブ。
view()
    .on_press(move || open.update(|o| *o = !*o))
    .h(move || px(if open.get() { 160.0 } else { 56.0 }))
    .opacity(move || if open.get() { 1.0 } else { 0.8 })
    .transition()
    .duration(200.0)

#キーフレームアニメーション

組み込みのキーフレームアニメーションで、ネイティブに実行されます(Tailwindのanimate-*)。

キー型Rust説明
animationName"none" | "spin" | "ping" | "pulse" | "bounce".animate_spin(), .animate_ping(), .animate_pulse(), .animate_bounce(), .animate_none()アニメーション。
animationDurationnumber | "${number}ms" | "${number}s".animation(KeyframeAnimation { … })1回の繰り返しの長さ。
animationDelaynumber | "${number}ms" | "${number}s".animation(KeyframeAnimation { … })最初の繰り返しが始まるまでの遅延。
animationTimingFunction"linear" | "ease" | "ease-in" | "ease-out" | "ease-in-out" | "cubic-bezier(...)".animation(KeyframeAnimation { … })イージングカーブ。
animationIterationCountnumber | "infinite".animation(KeyframeAnimation { … })実行回数。

値、ジェスチャー、スプリングで駆動するアニメーションには、代わりにnshのアニメーションAPIを使用してください。

#ポインターと選択

キー型Rust説明
cursor"auto" | "default" | "pointer" | "text" | "grab" | "grabbing" | "not-allowed" | ...(すべてのCSSカーソルキーワードと"none").cursor(Cursor), .cursor_pointer()ビュー上のポインターの形状。ポインター(iPadのトラックパッド、Mac Catalyst、デスクトップ)向けです。斜めのリサイズキーワードは軸を保ちます: nwse-resize / nw-resize / se-resize(Cursor::NwseResize)とnesw-resize / ne-resize / sw-resize(Cursor::NeswResize)。Windows、Linux、Android、Web、GPUIは斜めのカーソルを表示します。AppKitではmacOS 15以降でそれを使い、macOS 14では開いた手を使います。UIKitではiPadとMac Catalystでポインターエフェクトを使います。
pointerEvents"auto" | "none" | "box-none" | "box-only".pointer_events(PointerEvents::BoxNone)ビューとその中のビューが受け取るタッチ(pointer-events-none、pointer-events-auto)。"none": 受け取らない。中のビューも、"auto"を設定しない限り受け取らず、CSSと同様に継承されます。"box-none": ビュー自体は受け取らず、中のビューはそれぞれの設定に従います。"box-only": ビュー自体は受け取り、中のビューは受け取りません(どちらもReact Nativeの仕様で、ビュー自体のみに適用)。デフォルトは"auto"。タッチとジェスチャーを参照してください。
userSelect"auto" | "none" | "text".select_text(), .select_none()<Text>を選択してコピーできるか("text"、select-text)、できないか("none"、select-none)。ビューの設定は、何も設定していない中のテキストに及びます。デフォルトの"auto"(select-auto)は、周囲のビューに任せ、それがなければプラットフォームに任せます。テキストを参照してください。

#SVGペイント

SVG図形のCSSペイントプロパティです。任意の要素に指定でき、ブラウザーと同様に内側の要素に継承されます。 Rustコンポーネントがキャンバスに描画するものにも適用されます。

キー型Rust説明
fill"none" | "currentColor" | ColorValue.fill_color(c), .fill_none(), .fill_current()図形の塗りつぶしに使うもの。currentColorは要素のテキストの色です。
stroke"none" | "currentColor" | ColorValue.stroke_color(c), .stroke_none(), .stroke_current()図形の輪郭の描画に使うもの。
strokeWidthnumber | string.stroke_width(w)それらの輪郭の幅。長さで指定します(デフォルトは1)。
strokeDasharraynumber | string—それらの輪郭に沿った破線と間隔: スペースまたはカンマで区切った長さ("4 2")。奇数個のリストは繰り返されます。または"none"。

#TextStyle

テキストスタイルは<Text>と<Input>に適用されます。CSSと同様に継承もされます。ビューに設定したテキストプロパティは、その中のテキストと入力に渡され、ネストした<Text>スパンは親のテキストから継承します。ViewStyleのすべてのキーも適用されます。テキストを参照してください。

#フォント

キー型Rust説明
colorColorValue | AnimatedNode.text_color(c), .bind_color(&node)テキストの色。ネイティブのアニメーションカラーを受け取ります。色を設定していない枠線とアウトラインの色にもなります。
fontSizenumber.text_size(s), .text_sm(), .text_lg(), …ポイント単位のサイズ。
fontWeight"normal" | "bold" | number | "${number}".font_weight(FontWeight::SEMIBOLD)"normal"(400)、"bold"(700)、または100〜900。
fontFamilystring.font_family(name)システムのフォントファミリー、またはインポートしたフォントが評価される名前(import Inter from "./Inter.ttf")、またはそれらのリスト(優先度の高い順、"Brand, 'Noto Sans SC', sans-serif")。フォントを参照してください。
fontStyle"normal" | "italic".italic()イタリック。
fontVariantFontVariantName[] | string.small_caps(), .oldstyle_nums(), .lining_nums(), .tabular_nums(), .proportional_nums()OpenTypeの数字と文字の字形。リスト(["tabular-nums"])、またはスペース区切りのCSSの名前("tabular-nums small-caps")で指定します。tabular-numsは数字の幅を揃えるため、カウンターやタイマーに便利です。

#間隔と配置

KeyTypeRustDescription
lineHeightnumber.line_height(h)行の高さ(ポイント単位)。
letterSpacingnumber.letter_spacing(s)文字間の追加スペース(ポイント単位)。
textAlign"auto" | "left" | "center" | "right" | "justify" | "start" | "end".text_left(), .text_center(), .text_right(), .text_justify()水平方向の配置。"left" と "right" は右から左へのレイアウトでも左右の側を維持します。"start" と "end" は方向に従います。
writingDirection"auto" | "ltr" | "rtl".writing_direction(d)テキストの基本方向。"auto" はコンテンツから方向を決定します。
textTransform"none" | "uppercase" | "lowercase" | "capitalize".uppercase(), .lowercase(), .capitalize(), .normal_case()大文字・小文字の変換。

#行数とオーバーフロー

KeyTypeRustDescription
numberOfLinesnumber.number_of_lines(n), .truncate()<Text> が表示する最大行数(CSS の line-clamp、line-clamp-*)。デフォルトの 0(line-clamp-none)はすべての行を表示します。truncate は 1 行で、末尾が省略記号で切り詰められます。
textOverflow"ellipsis" | "clip" | "ellipsis-start" | "ellipsis-middle".text_overflow(EllipsizeMode::Middle)行数が制限された <Text> の切り詰め方。末尾に省略記号("ellipsis"、text-ellipsis、デフォルト)、クリップ("clip"、text-clip)、または先頭や中央に省略記号(ファイルパス向け)。

#装飾

KeyTypeRustDescription
textDecorationLine"none" | "underline" | "line-through" | "underline line-through".underline(), .line_through(), .no_underline()テキストと一緒に描画される線。
textDecorationColorColorValue.text_decoration_color(c)線の色(デフォルトはテキストの色)。
textDecorationStyle"solid" | "double" | "dotted" | "dashed" | "wavy".text_decoration_solid(), _double(), _dotted(), _dashed(), _wavy()線のスタイル。
textDecorationThicknessnumber | "auto" | "from-font".text_decoration_thickness(t)線の太さ。
textUnderlineOffsetnumber | "auto".underline_offset(o)ベースラインから下線までの距離。

#プレースホルダー、キャレット、選択

placeholderColor と caretColor は InputStyle(<Input> のスタイル)に属します。selectionColor は TextStyle に属し、選択可能なテキストもこれを受け付けます。

KeyTypeRustDescription
placeholderColorColorValueinput の .placeholder_color(c)<Input> のプレースホルダーの色(placeholder:text-*)。
textAlignVertical"auto" | "top" | "center" | "bottom"ボックスより短いテキストが配置される位置(高さを持つ <Text>)。
selectionColorColorValueinput または text の .selection_color(c)<Input> または選択可能な <Text> の選択ハイライトとハンドル(selection:bg-*)。デフォルトはプラットフォームのアクセントカラーです。iOS では、caretColor が設定されていない場合、input のキャレットにも適用されます(UIKit は両方を 1 つの色で着色します)。
caretColorColorValueinput の .caret_color(c)<Input> のキャレット(caret-*)。未設定の場合はプラットフォームのデフォルトになります。

#テキストシャドウ

KeyTypeRustDescription
textShadowstring | TextShadowLayer[].text_shadow([TextShadow { … }]), .text_shadow_sm(), .text_shadow_color(c)CSS の text-shadow。オフセット、ぼかし、色("0 1px 2px rgb(0 0 0 / 0.3)")、またはそのレイヤーを数値で指定します([{ x, y, blur, color }])。複数のレイヤーは最も幅の広いもの 1 つとして描画されます。色のないレイヤーはテキストの色で描画されます。"none"。
text("Title").text_shadow([TextShadow {
    offset_y: px(1.0),
    radius: px(2.0),
    color: rgba(0x0000004d).into(),
    ..TextShadow::default()
}])

#ImageStyle

ViewStyle のすべてのキーに加えて、次のキーがあります。

KeyTypeRustDescription
tintColorColorValueimage の .tint_color(c)テンプレート画像を着色します(不透明なピクセルはすべてこの色になります)。モノクロのアイコン向けです。
objectFit"fill" | "contain" | "cover" | "none" | "scale-down".object_fit(ResizeMode::Contain)CSS の object-fit。画像や動画がボックスにどのようにフィットするかを指定します。"cover" はボックスを埋めて切り抜き、"contain" はボックス内に収め、"fill" は引き伸ばし、"none" は元のサイズを保ち、"scale-down" は "none" と "contain" のうち小さい方になります。画像はデフォルトでボックスを覆い、動画はボックス内に収められます。
objectPositionstringimage の .object_position(p), .object_top(), …objectFit がサイズを決めた後、ボックス内で画像が配置される位置。CSS の object-position と同様に、キーワード、パーセンテージ、長さを指定できます("top"、"left bottom"、"25% 75%"、"right 10px bottom 20%")。ボックスを覆う画像はこの位置を中心に切り抜かれます。デフォルトは中央です。

objectFit は <Video> にも適用されます。image と video を参照してください。

#スタイルのように見える props

Android のマテリアルシャドウはプラットフォーム固有の prop であり、スタイルの隣に設定します。

SettingPropRustClass
マテリアルシャドウ(Android)android={{ elevation }}.elevation(e)

#関連項目

  • Styling: style、class、継承と優先順位。
  • Tailwind reference: サポートされているすべてのユーティリティとバリアント。
  • Layout: flexbox と grid の実践。
  • view、text、image: これらのスタイルが適用される要素。

width、height、flexBasis は、Taffy によって計算される "min-content"、"max-content"、"fit-content" も受け付けます。