R

ReflexKR

Documentación de Reflex

El taller de componentes: los 100 componentes de Reflex

·

Resumen del curso

Diseño

·

Box

·

Flex

·

Stack

·

Grid

·

Container

·

Section

·

Center

·

Spacer

·

Separator

·

Card

·

Inset

·

Aspect Ratio

·

Fragment

Tipografía

·

Text

·

Heading

·

Link

·

Code

·

Markdown

·

Blockquote

·

Quote

·

Strong

·

Em

·

Kbd

Formularios

·

Button

·

Input

·

Text Area

·

Checkbox

·

Switch

·

Radio Group

·

Select

·

Slider

·

Form

·

Upload

Visualización de datos

·

Badge

·

Avatar

·

Icon

·

Callout

·

List

·

Data List

·

Code Block

·

Progress

·

Spinner

·

Scroll Area

·

Moment

Mostrar y ocultar

·

Tabs

·

Accordion

·

Segmented Control

Superposiciones

·

Tooltip

·

Popover

·

Hover Card

·

Dialog

·

Alert Dialog

·

Drawer

·

Dropdown Menu

·

Context Menu

·

Toast

Renderizado dinámico

·

Cond

·

Match

·

Foreach

·

Auto Scroll

Multimedia

·

Image

·

Audio

·

Video

Tablas y cuadrículas de datos

·

Table

·

Data Table

·

Data Editor

Gráficos

·

Area Chart

·

Bar Chart

·

Line Chart

·

Composed Chart

·

Pie Chart

·

Radar Chart

·

Radial Bar Chart

·

Scatter Chart

·

Funnel Chart

·

Treemap

·

Sankey Chart

·

Error Bar

Piezas de gráficos

·

Axis

·

Cartesian Grid

·

Chart Tooltip

·

Legend

·

Label

·

Reference

·

Brush

Otras bibliotecas de gráficos

·

Plotly

·

Pyplot

Elementos HTML

·

HTML

·

HTML Text

·

HTML Layout

·

HTML Forms

·

HTML Media

·

HTML Tables

·

SVG

Otras herramientas

·

Theme

·

Skeleton

·

Clipboard

·

Html Embed

·

Script

·

Memo

El taller de componentes: los 100 componentes de Reflex
Elementos HTML

HTML Layout

rx.el.addressrx.el.articlerx.el.asiderx.el.blockquoterx.el.bodyrx.el.ddrx.el.del_rx.el.detailsrx.el.dialogrx.el.dlrx.el.dtrx.el.figcaptionrx.el.footerrx.el.h1 ~ h6rx.el.headrx.el.headerrx.el.hrrx.el.htmlrx.el.lirx.el.linkrx.el.mainrx.el.navrx.el.noscriptrx.el.olrx.el.portalrx.el.prerx.el.scriptrx.el.sectionrx.el.templaterx.el.titlerx.el.ul

Documentación oficial

Pedido del taller

Estructura una entrada de noticias de la tienda con HTML semántico: cabecera, cuerpo, un consejo al margen, preguntas desplegables y un pie con los datos de contacto.

Son los elementos HTML que se encargan de la estructura y la disposición del documento. Incluyen los que dan nombre a zonas, como header·main·footer, los títulos h1~h6, las listas ul·ol·dl y el desplegable details. Con div se puede conseguir el mismo aspecto, pero si usas elementos con significado, los lectores de pantalla y los buscadores entienden la estructura de la página.

Opening hours

Mon to Fri, 9 am to 6 pm.

Updated today
rx.el.article(
    rx.el.header(rx.el.h2("Opening hours", font_weight="bold")),
    rx.el.p("Mon to Fri, 9 am to 6 pm."),
    rx.el.footer("Updated today", font_size="12px", color="gray"),
    padding="12px",
    border="1px solid gray",
    border_radius="8px",
)

Prueba las propiedades

La mayoría de los elementos de estructura solo tienen atributos comunes. Prueba con ol (reversed) y details (open), que sí tienen atributos propios. En este sitio, el preflight de Tailwind borra las viñetas de las listas, así que se recuperan con el CSS list_style_type.

Prueba las propiedades

  1. Mix
  2. Bake
  3. Serve
More info

Shown when the details element is open.

reversed

marker

summary

open

rx.el.div(
    rx.el.ol(
        rx.el.li("Mix"),
        rx.el.li("Bake"),
        rx.el.li("Serve"),
        reversed=False,
        list_style_type="decimal",
        padding_left="2em",
    ),
    rx.el.details(
        rx.el.summary("More info", cursor="pointer"),
        rx.el.p("Shown when the details element is open."),
        open=False,
    ),
)
Al activar reversed, la numeración va hacia atrás. open deja details desplegado desde el principio.
PropiedadValoresPor defectoUso
start (ol)Entero1Primer número
reversed (ol)True / FalseFalseNumeración inversa
type (ol)"1" "a" "A" "i" "I""1"Tipo de numeración. Con preflight, la sustituye el CSS list_style_type
open (details, dialog)True / FalseFalseDesplegado · abierto
cite (blockquote, del_)URLNingunoFuente de la cita o de la modificación
date_time (del_)Cadena de fechaNingunoMomento en que se borró
rel href … (link)CadenaNingunoEnlace a recursos externos (para la cabecera del documento)
async_ defer src … (script)bool · cadenaNingunoEtiqueta de script (ver la página Script)

El esqueleto de la página

header es la cabecera, nav el menú de navegación, main el contenido principal, article un texto con sentido propio aunque se separe del resto, aside el contenido al margen, section un bloque temático, footer el pie y address los datos de contacto. Todos son cajas sin estilo, así que la disposición se decide con CSS como display="grid"·"flex".

Workshop

Post title

The main story goes here.

A themed section of the page.

hello@example.com
rx.el.div(
    rx.el.header(
        rx.el.strong("Workshop"),
        rx.el.nav(rx.el.span("Home"), rx.el.span("Parts"), rx.el.span("About"), display="flex", gap="12px"),
        display="flex",
        justify_content="space-between",
        padding="8px",
        background=rx.color("indigo", 3),
    ),
    rx.el.main(
        rx.el.article(rx.el.h3("Post title", font_weight="bold"), rx.el.p("The main story goes here.")),
        rx.el.aside("Related links", padding="8px", background=rx.color("gray", 3)),
        display="grid",
        grid_template_columns="2fr 1fr",
        gap="12px",
        padding="8px",
    ),
    rx.el.section(rx.el.p("A themed section of the page."), padding="8px", border_top="1px dashed gray"),
    rx.el.footer(rx.el.address("hello@example.com"), padding="8px", font_size="13px", color="gray"),
    border="1px solid gray",
    border_radius="8px",
    overflow="hidden",
)

Títulos, separadores, citas y texto preformateado

Por el preflight, h1 y h3 aparecen del mismo tamaño que el texto normal. El título es significado; el tamaño se fija aparte con font_size. hr es una línea de cambio de tema, blockquote una cita larga (con la fuente en cite) y pre un texto que respeta tal cual los espacios y saltos de línea. El elemento del choca con una palabra reservada de Python, así que en Reflex se escribe rx.el.del_ (en la lista de la documentación oficial figura como rx.el.Del). Su pareja, rx.el.ins, es texto añadido.

h1 with no style

h3 with no style

h2 with style


Make it work, make it right, make it fast.
def hello():
    print('hi')

Price: $20 $15

rx.el.div(
    rx.el.h1("h1 with no style"),
    rx.el.h3("h3 with no style"),
    rx.el.h2("h2 with style", font_size="24px", font_weight="bold"),
    rx.el.hr(margin_y="8px"),
    rx.el.blockquote(
        "Make it work, make it right, make it fast.",
        cite="https://wiki.c2.com/?MakeItWorkMakeItRightMakeItFast",
        border_left="4px solid gray",
        padding_left="12px",
        font_style="italic",
    ),
    rx.el.pre("def hello():\n    print('hi')", padding="8px", background=rx.color("gray", 3)),
    rx.el.p("Price: ", rx.el.del_("$20", date_time="2026-10-01"), " ", rx.el.ins("$15")),
)

Listas

ul es una lista sin orden y ol una lista numerada; los elementos son li. dl es una lista de descripciones que coloca pares de término (dt) y descripción (dd).

  • Apples
  • Pears
  1. Third
  2. Fourth
Box
A container with no meaning.
Flex
A row or column of children.
rx.el.div(
    rx.el.ul(rx.el.li("Apples"), rx.el.li("Pears"), list_style_type="disc", padding_left="1.5em"),
    rx.el.ol(rx.el.li("Third"), rx.el.li("Fourth"), start=3, list_style_type="decimal", padding_left="1.5em"),
    rx.el.dl(
        rx.el.dt("Box", font_weight="bold"),
        rx.el.dd("A container with no meaning.", margin_left="1.5em"),
        rx.el.dt("Flex", font_weight="bold"),
        rx.el.dd("A row or column of children.", margin_left="1.5em"),
    ),
    display="flex",
    gap="24px",
    flex_wrap="wrap",
)

Desplegables y diálogos

El primer summary dentro de details hace de título, y al pulsarlo el navegador despliega y pliega por sí solo. No hace falta State. dialog se abre con el atributo open. Abierto así, es una ventana no modal que no bloquea lo de detrás; para un diálogo modal que cubra la pantalla, es más fácil usar rx.dialog.

What is details?

A box the browser opens and closes by itself.

A non-modal dialog, opened by the open prop.

class HtmlLayoutDialogState(rx.State):
    is_open: bool = False

    @rx.event
    def toggle(self):
        self.is_open = not self.is_open


rx.el.div(
    rx.el.details(
        rx.el.summary("What is details?", cursor="pointer"),
        rx.el.p("A box the browser opens and closes by itself."),
    ),
    rx.el.button(
        "Toggle dialog",
        on_click=HtmlLayoutDialogState.toggle,
        padding="4px 12px",
        border="1px solid gray",
        border_radius="6px",
        margin_top="12px",
    ),
    rx.el.dialog(
        rx.el.p("A non-modal dialog, opened by the open prop."),
        open=HtmlLayoutDialogState.is_open,
        padding="12px",
        border="1px solid gray",
        border_radius="8px",
        top="40px",
    ),
    position="relative",
    min_height="150px",
)

Figuras y leyendas

figcaption añade, dentro de figure, una leyenda a contenido como imágenes, tablas o código.

Strawberries
Fig. 1 - Fresh strawberries
rx.el.figure(
    rx.el.img(src="https://picsum.photos/id/1080/320/160", alt="Strawberries", border_radius="6px"),
    rx.el.figcaption("Fig. 1 - Fresh strawberries", font_size="13px", color="gray", margin_top="4px"),
    width="320px",
)

Elementos invisibles y elementos a nivel de documento

El contenido de template no se dibuja en pantalla: queda solo como plantilla para clonar. noscript solo se ve en navegadores con JavaScript desactivado. Una app de Reflex funciona con JavaScript, así que aquí no se ve.

Only this line is visible.

rx.el.div(
    rx.el.p("Only this line is visible."),
    # rx.el.template(...) also keeps its content off the page, but React cannot
    # hydrate children inside <template>, so it is left out of this live example.
    rx.el.noscript("Please turn on JavaScript."),
)

html, head, body, title, link, script y portal son elementos del documento completo o de su cabecera. Reflex ya construye ese marco, así que casi nunca se usan dentro de una página, y aquí también se muestran solo como código. React 19 sube a la cabecera del documento los title·link puestos en el cuerpo, así que si se dibujaran en la página cambiarían el título de la pestaña de este sitio.

# Document-level and head elements: Reflex already renders these, so pages rarely use them
rx.el.html(...)    # manifest attribute (removed in HTML5)
rx.el.head(...)
rx.el.body(...)
rx.el.title("Page title")   # set page titles with @rx.page(title=...)
rx.el.link(rel="stylesheet", href="/styles.css")   # add stylesheets with rx.App(stylesheets=[...])
rx.el.script(src="/my-script.js")   # use rx.script for scripts (see the Script page)
rx.el.portal(...)  # experimental element that never became a standard

Completar el pedido

El texto completo va en article, el título y la fecha en header, el cuerpo en section, el consejo en aside, las preguntas en details y el contacto en un address dentro de footer.

Spring menu is here

Three new dishes join the menu this week.

  • Spring rolls
  • Pea soup
  • Lemon tart
Do you have vegan options?

Yes, the soup and rolls are vegan.


12 Market St · hello@example.com
rx.el.article(
    rx.el.header(
        rx.el.h1("Spring menu is here", font_size="22px", font_weight="bold"),
        rx.el.p(rx.el.time("Mar 3, 2026", date_time="2026-03-03"), font_size="13px", color="gray"),
    ),
    rx.el.section(
        rx.el.p("Three new dishes join the menu this week."),
        rx.el.ul(rx.el.li("Spring rolls"), rx.el.li("Pea soup"), rx.el.li("Lemon tart"), list_style_type="disc", padding_left="1.5em"),
        margin_y="8px",
    ),
    rx.el.aside("Tip: book a table early.", padding="8px", background=rx.color("amber", 3), border_radius="6px"),
    rx.el.details(
        rx.el.summary("Do you have vegan options?", cursor="pointer", font_weight="600"),
        rx.el.p("Yes, the soup and rolls are vegan."),
        margin_y="8px",
    ),
    rx.el.hr(),
    rx.el.footer(rx.el.address("12 Market St · hello@example.com"), font_size="13px", color="gray", margin_top="8px"),
    padding="16px",
    border="1px solid gray",
    border_radius="10px",
    max_width="420px",
)

Notas del taller

  • header·nav·main·article·section·aside·footer dan nombre a zonas. La disposición, con CSS.

  • h1~h6 son solo significado. Con preflight, el tamaño se fija con font_size.

  • ul·ol·li, dl·dt·dd. Las viñetas, con list_style_type; ol tiene start·reversed.

  • details + summary despliegan sin State. El open de dialog es no modal; para modal, rx.dialog.

  • del es rx.el.del_. html·head·body·title·link los gestiona Reflex, así que no se usan en la página.

← Anterior

Elementos HTML · HTML Text

Siguiente →

Elementos HTML · HTML Forms

Recibe avisos de nuevas lecciones

Te avisaremos por correo cuando este curso tenga lecciones nuevas o se abra un curso de continuación.

Datos: tu correo electrónico · Finalidad: avisos de nuevas lecciones o de la publicación de este curso · Conservación: hasta que pidas que lo borremos. No lo usamos para nada más ni lo compartimos. Responde a cualquier aviso y lo borraremos enseguida.

Preguntas y respuestas

Pregunta lo que quieras sobre esta lección. Aquí se reúnen las preguntas de todas las versiones de idioma de esta página.

Se muestra como texto plano, sin enlaces ni formato.

R

ReflexKR

Aprende Python y Reflex haciendo. Todos los ejemplos se ejecutaron y verificaron en Reflex 0.10.0.

ReflexKR es gratis y sin banners publicitarios. Si te ayudó, puedes apoyarlo con un café. ☕ Invítanos un café

Aviso de afiliados
한국어English日本語简体中文EspañolDeutsch

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

Built with Reflex