R

ReflexKR

Reflex公式ドキュメント

コンポーネント工房:Reflexライブラリ100

·

講座の概要

レイアウト

·

Box

·

Flex

·

Stack

·

Grid

·

Container

·

Section

·

Center

·

Spacer

·

Separator

·

Card

·

Inset

·

Aspect Ratio

·

Fragment

タイポグラフィ

·

Text

·

Heading

·

Link

·

Code

·

Markdown

·

Blockquote

·

Quote

·

Strong

·

Em

·

Kbd

フォーム

·

Button

·

Input

·

Text Area

·

Checkbox

·

Switch

·

Radio Group

·

Select

·

Slider

·

Form

·

Upload

データ表示

·

Badge

·

Avatar

·

Icon

·

Callout

·

List

·

Data List

·

Code Block

·

Progress

·

Spinner

·

Scroll Area

·

Moment

開閉と切り替え

·

Tabs

·

Accordion

·

Segmented Control

オーバーレイ

·

Tooltip

·

Popover

·

Hover Card

·

Dialog

·

Alert Dialog

·

Drawer

·

Dropdown Menu

·

Context Menu

·

Toast

動的レンダリング

·

Cond

·

Match

·

Foreach

·

Auto Scroll

メディア

·

Image

·

Audio

·

Video

表とデータグリッド

·

Table

·

Data Table

·

Data Editor

チャート

·

Area Chart

·

Bar Chart

·

Line Chart

·

Composed Chart

·

Pie Chart

·

Radar Chart

·

Radial Bar Chart

·

Scatter Chart

·

Funnel Chart

·

Treemap

·

Sankey Chart

·

Error Bar

チャートの部品

·

Axis

·

Cartesian Grid

·

Chart Tooltip

·

Legend

·

Label

·

Reference

·

Brush

ほかのチャートライブラリ

·

Plotly

·

Pyplot

HTML要素

·

HTML

·

HTML Text

·

HTML Layout

·

HTML Forms

·

HTML Media

·

HTML Tables

·

SVG

そのほかの道具

·

Theme

·

Skeleton

·

Clipboard

·

Html Embed

·

Script

·

Memo

コンポーネント工房:Reflexライブラリ100
レイアウト

Flex

工房の注文書

商品カードを何枚か横に並べ、画面が狭くなったら収まらないカードは次の行に回り込むようにしてください。

rx.flex は、CSSのフレックスボックスで子を1列に並べる箱です。横・縦の方向、折り返し、揃え方、余ったスペースの分け方を、いくつかのプロパティで決めます。既定は横(row)方向で、折り返しなしです。レスポンシブな画面を作るときにいちばんよく使うレイアウトです。

Card 1
Card 2
Card 3
Card 4
Card 5
rx.flex(
    rx.card("Card 1"),
    rx.card("Card 2"),
    rx.card("Card 3"),
    rx.card("Card 4"),
    rx.card("Card 5"),
    spacing="2",
    width="100%",
)

プロパティを変えてみる

Card 2だけ背が高いので、align の違いがよくわかります。wrap を wrap にすると、はみ出したカードが次の行に下がります。

プロパティを変えてみる

Card 1
Card 2
Card 3
Card 4
Card 5

direction

align

justify

wrap

spacing

rx.flex(
    rx.card("Card 1", width="30%"),
    rx.card("Card 2", width="30%", height="5rem"),
    rx.card("Card 3", width="30%"),
    rx.card("Card 4", width="30%"),
    rx.card("Card 5", width="30%"),
    direction="row",
    align="stretch",
    justify="start",
    wrap="nowrap",
    spacing="2",
    width="100%",
    min_height="14rem",
    padding="12px",
    border="1px dashed var(--gray-7)",
    border_radius="8px",
)
directionは並べる方向、alignは交差する軸の揃え方、justifyは並べる軸の揃え方、spacingはカード同士の間隔です。
プロパティ値既定値用途
direction"row" "column" "row-reverse" "column-reverse""row"子を並べる方向(主軸)
align"start" "center" "end" "baseline" "stretch""stretch"主軸と交差する軸(交差軸)の揃え方
justify"start" "center" "end" "between""start"主軸方向の揃え方。betweenは両端に寄せて間を均等に
wrap"nowrap" "wrap" "wrap-reverse""nowrap"はみ出したときに次の行へ折り返すか
spacing"0" ~ "9"なし子同士の間隔(Radixの間隔の段階)。CSSの gap で直接指定してもよい
as_childTrue / FalseFalseFlexの代わりに子要素を描画し、プロパティを合成する

どのプロパティも rx.breakpoints(...) で画面幅ごとに違う値を指定できます。インストールされている0.10のプロパティ説明ではalignとjustifyの軸が逆に書かれていますが、実際の動作は上の表のとおりです。

折り返し

子が多くて1行に収まらないとき、既定(nowrap)では子が縮みます。wrap="wrap" を指定すると、大きさを保ったまま次の行に回り込みます。公式ドキュメントのようにCSSプロパティ flex_wrap="wrap" で書いても結果は同じです。

Card 1
Card 2
Card 3
Card 4
Card 5
Card 6
Card 7
Card 8
Card 9
Card 10
rx.flex(
    rx.foreach(
        rx.Var.range(10),
        lambda i: rx.card(f"Card {i + 1}", width="16%"),
    ),
    spacing="2",
    wrap="wrap",
    width="100%",
)

方向

direction="column" なら上から下へ積み重なります。-reverse がつくと順番が逆になります。コードの順番はそのままに、見た目の順番だけを変えたいときに使います。

Card 1
Card 2
Card 3
Card 1
Card 2
Card 3
Card 1
Card 2
Card 3
rx.flex(
    rx.flex(rx.card("Card 1"), rx.card("Card 2"), rx.card("Card 3"), spacing="2", direction="column"),
    rx.flex(rx.card("Card 1"), rx.card("Card 2"), rx.card("Card 3"), spacing="2", direction="column-reverse"),
    rx.flex(rx.card("Card 1"), rx.card("Card 2"), rx.card("Card 3"), spacing="2", direction="row-reverse"),
    spacing="6",
    wrap="wrap",
)

画面幅ごとに変える

rx.breakpoints に initial(いちばん狭い画面)から xs sm md lg xl までの値を渡すと、画面幅に応じてプロパティが切り替わります。Radixのプロパティの基準幅は、xs 520px、sm 768px、md 1024px、lg 1280px、xl 1640pxです。下の例は、狭い画面では縦に、sm 以上では横に並びます。ブラウザのウィンドウ幅を変えてみてください。

Card 1
Card 2
Card 3
rx.flex(
    rx.card("Card 1", flex_grow="1"),
    rx.card("Card 2", flex_grow="1"),
    rx.card("Card 3", flex_grow="1"),
    direction=rx.breakpoints(initial="column", sm="row"),
    spacing=rx.breakpoints(initial="2", md="4"),
    width="100%",
)

大きさのヒント:flex_grow、flex_shrink、flex_basis

Flexの中の子は、3つのCSSプロパティで大きさを調整します。大きさの調整は常に主軸に沿って起こります(rowなら幅、columnなら高さ)。

  • flex_basis:基準となる大きさ。なければ width(または height)を、それもなければ中身の大きさを使います。
  • flex_grow(既定は "0"):"0" なら基準の大きさより大きくなりません。"1" なら余ったスペースを占めます。
  • flex_shrink(既定は "1"):"0" なら基準の大きさより小さくなりません。

スライダーで外側のFlexの幅を狭めてみてください。flex_shrink=0 の箱は100pxを保ち、ほかの箱が先に縮みます。

flex_shrink=0
flex_shrink=1
flex_grow=0
flex_grow=1
class FlexSizeHintState(rx.State):
    width_pct: int = 100

    @rx.event
    def set_width_pct(self, value: list[float]):
        self.width_pct = int(value[0])

    @rx.var
    def width_css(self) -> str:
        return f"{self.width_pct}%"


def flex_border_box(label, **props):
    return rx.box(label, border="1px solid var(--gray-10)", border_radius="2px", padding="4px", font_size="12px", **props)


rx.box(
    rx.flex(
        flex_border_box("flex_shrink=0", flex_shrink="0", width="100px"),
        flex_border_box("flex_shrink=1", flex_shrink="1", width="200px"),
        flex_border_box("flex_grow=0", flex_grow="0"),
        flex_border_box("flex_grow=1", flex_grow="1"),
        width=FlexSizeHintState.width_css,
        spacing="2",
        margin_bottom="16px",
    ),
    rx.slider(
        min=0,
        max=100,
        value=[FlexSizeHintState.width_pct],
        on_change=FlexSizeHintState.set_width_pct,
    ),
    width="100%",
)

注文書を仕上げる

カードごとに flex_basis="140px" で基準の幅を決め、flex_grow="1" で余ったスペースを分け合います。wrap="wrap" のおかげで、狭い画面では次の行に回り込みます。

Mug

$12

Plate

$12

Bowl

$12

Vase

$12

Cup

$12

Tray

$12

rx.flex(
    rx.foreach(
        ["Mug", "Plate", "Bowl", "Vase", "Cup", "Tray"],
        lambda name: rx.card(
            rx.text(name, weight="bold"),
            rx.text("$12", size="2", color="var(--gray-11)"),
            flex_basis="140px",
            flex_grow="1",
        ),
    ),
    spacing="3",
    wrap="wrap",
    width="100%",
)

工房ノート

  • rx.flexは子を1列に並べる。既定はrow、nowrap。

  • directionは主軸、justifyは主軸の揃え方、alignは交差軸の揃え方。

  • wrap="wrap"ならはみ出した子が次の行へ。spacing "0"~"9"で間隔。

  • 子の大きさはflex_basis・flex_grow・flex_shrinkで調整する。

  • rx.breakpoints(initial=…, sm=…)で画面幅ごとに違う値を指定する。

← 前へ

レイアウト · Box

次へ →

レイアウト · Stack

新しい授業・講座のお知らせを受け取る

この講座に授業が追加されたり、続きの講座が公開されたりしたらメールでお知らせします。

収集項目:メールアドレス・目的:この講座の新しい授業・公開のお知らせ・保有期間:解除のご依頼まで。他の目的には使わず、第三者にも提供しません。お知らせメールに返信いただければすぐに削除します。

質問と回答

この回について気になることを書き込んでください。すべての言語のページの質問がここに集まります。

リンクや書式なしで、そのままの文字で表示されます。

R

ReflexKR

触って学ぶPythonとReflex。すべての例はReflex 0.10.0で実際に動かして確認しています。

ReflexKRはバナー広告なし・無料で運営しています。役に立ったら、コーヒー一杯で応援してください。 ☕ コーヒーで応援する

アフィリエイトと支援について
한국어English日本語简体中文EspañolDeutsch

© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0

Built with Reflex