Títulos y encabezados con st.title, st.header y st.subheader

Básico
Streamlit
Streamlit
Actualizado: 26/04/2026

Jerarquía de encabezados en Streamlit

Los elementos de texto son los componentes más básicos de cualquier aplicación Streamlit. Antes de añadir gráficos, widgets o tablas, es necesario estructurar la interfaz con una jerarquía visual clara que guíe al usuario a través del contenido.

Streamlit proporciona cinco niveles de texto estructural que se mapean directamente a la jerarquía de encabezados HTML (h1 a h6):

import streamlit as st

st.title("Título principal de la aplicación")      # H1 — uno por página
st.header("Sección principal")                      # H2
st.subheader("Subsección o grupo de métricas")     # H3
st.text("Texto plano sin formato, tipografía monoespaciada")
st.caption("Nota al pie, descripción breve, texto auxiliar")

Cuándo usar cada uno:

  • st.title: Nombre de la aplicación o del dashboard. Debe haber uno solo por página.
  • st.header: Marca el inicio de una sección importante (por ejemplo, "Análisis de ventas", "Configuración").
  • st.subheader: Divide secciones en subsecciones (por ejemplo, "Filtros", "Resultados", "Exportar").
  • st.text: Texto monoespaciado, útil para mostrar datos preformateados o logs.
  • st.caption: Texto pequeño para notas al pie, leyendas de imágenes o información secundaria.

La correcta aplicación de esta jerarquía no es solo una cuestión estética: los lectores de pantalla y herramientas de accesibilidad utilizan la estructura de encabezados para permitir la navegación por secciones, y los motores de búsqueda la interpretan para entender la organización del contenido.

flowchart TD
    A[Página Streamlit] --> B[st.title H1 único]
    B --> C[st.header H2 sección principal]
    C --> D[st.subheader H3 subsección]
    D --> E[st.text texto plano monoespaciado]
    D --> F[st.caption nota auxiliar pequena]
    A --> G[st.write fallback inteligente]
    G --> H[Detecta dataframe imagen markdown]
    A --> I[st.divider separador visual]
    A --> J[st.badge etiqueta de estado]
    B --> K[Accesibilidad lectores pantalla]
    K --> L[SEO interpretación estructura]

Parámetros comunes de los encabezados

Todos los elementos de texto aceptan el parámetro anchor para crear un ID HTML al que enlazar, permitiendo crear enlaces de anclaje dentro de la misma página:

st.header("Resultados del análisis", anchor="resultados")
# Genera un enlace del tipo: http://localhost:8501/#resultados

El parámetro divider añade una línea de separación debajo del encabezado, útil para marcar visualmente el inicio de secciones:

st.header("Panel de control", divider="rainbow")
# Opciones: True/False, "blue", "green", "orange", "red", "violet", "gray", "rainbow"

st.subheader("Métricas de rendimiento", divider="blue")

st.caption: texto auxiliar y contexto

st.caption es ideal para añadir contexto secundario sin restar protagonismo al contenido principal:

import streamlit as st
import pandas as pd

st.title("Dataset de iris")
st.caption("Fuente: UCI Machine Learning Repository. Último acceso: marzo 2026.")

df = pd.read_csv("iris.csv")
st.dataframe(df)
st.caption(f"Mostrando {len(df)} registros. Columnas: {', '.join(df.columns)}")

st.badge: etiquetas visuales

st.badge muestra etiquetas visuales coloreadas que funcionan como indicadores de estado, categorías o alertas rápidas. Cada badge se renderiza como un pequeño rectángulo con fondo de color y texto blanco, similar a las etiquetas que se ven en repositorios de GitHub o documentación técnica:

import streamlit as st

st.badge("Nuevo", color="green")
st.badge("Deprecated", color="red")
st.badge("Beta", color="orange")
st.badge("v1.40.0", color="blue")
st.badge("Experimental", color="violet")

Los badges son especialmente útiles en documentación técnica dentro de la app para señalar el estado de funcionalidades o versiones.

st.divider y st.space: separación visual

import streamlit as st

st.header("Sección A")
st.write("Contenido de la sección A.")

st.divider()  # Línea horizontal de separación

st.header("Sección B")
st.write("Contenido de la sección B.")

st.space(height=2)  # Espacio vertical en unidades relativas

Ejemplo completo: dashboard estructurado

import streamlit as st
import pandas as pd
import numpy as np

st.set_page_config(page_title="Panel de ventas", page_icon="💰", layout="wide")

st.title("Panel de ventas 2026")
st.caption("Datos actualizados a 30 de marzo de 2026. Fuente: CRM interno.")

st.divider()

st.header("Resumen ejecutivo", divider="blue")
col1, col2, col3 = st.columns(3)
col1.metric("Ingresos Q1", "€ 124.500", "+15,3%")
col2.metric("Clientes activos", "842", "+67")
col3.metric("Ticket medio", "€ 148", "+€ 12")

st.header("Análisis detallado", divider="blue")

st.subheader("Evolución mensual")
df = pd.DataFrame({"mes": range(1, 4), "ventas": [38000, 41200, 45300]})
st.line_chart(df.set_index("mes"))

st.subheader("Top 5 productos")
st.text("SKU-001  |  Laptop Pro 14    |  €1.299  |  89 uds")
st.text("SKU-002  |  Monitor 27''     |  €349    |  134 uds")
st.text("SKU-003  |  Teclado mec.     |  €129    |  201 uds")

st.divider()
st.caption("Dashboard creado con Streamlit 1.40 y CertiDevs")

La estructura jerárquica clara no solo mejora la experiencia visual del usuario, sino que también facilita la navegación por teclado y la accesibilidad de la aplicación.

st.write: el comodín de salida

Aunque no es estrictamente un encabezado, st.write merece mención por su versatilidad. Es una función de propósito general que detecta automáticamente el tipo de dato que recibe y lo renderiza de la forma más apropiada:

import streamlit as st
import pandas as pd

st.write("Texto simple")
st.write("**Markdown** con _formato_")
st.write(42)
st.write({"clave": "valor", "lista": [1, 2, 3]})
st.write(pd.DataFrame({"A": [1, 2], "B": [3, 4]}))

st.write acepta cadenas, números, DataFrames, diccionarios, figuras de Matplotlib y Plotly, y cualquier objeto con representación __repr__. Es la forma más rápida de mostrar datos durante el desarrollo y prototipado, aunque para producción es preferible usar los componentes específicos (st.dataframe, st.metric, st.json) que ofrecen mayor control sobre la presentación.

Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Streamlit es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de Streamlit

Explora más contenido relacionado con Streamlit y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

Usar st.title, st.header y st.subheader para estructurar la jerarquía visual. Mostrar texto plano con st.text y notas auxiliares con st.caption. Aplicar el widget st.write para mostrar cualquier tipo de contenido. Crear badges y etiquetas visuales con st.badge. Separar secciones con st.divider y st.space.