# Sistema de Temas
Personaliza la apariencia visual de los componentes de Dynamic Framework usando variables CSS y el sistema de temas de Bootstrap.
# Cómo Funciona el Theming
Dynamic Framework está construido sobre Bootstrap 5, que usa propiedades personalizadas CSS (variables) extensivamente. Puedes personalizar la apariencia mediante:
- Sobrescribir variables CSS - Cambiar valores en tiempo de ejecución
- Agregar CSS personalizado - Estilizar componentes específicos
# Referencia de Variables CSS
# Colores Base
Bootstrap define estas variables de color que afectan todos los componentes:
:root {
/* Colores del tema */
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
/* Versiones RGB (para uso con rgba()) */
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
/* ... */
/* Body */
--bs-body-color: #212529;
--bs-body-bg: #fff;
}
# Tipografía
:root {
--bs-body-font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
}
# Espaciado y Dimensiones
:root {
--bs-border-width: 1px;
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-pill: 50rem;
}
# Personalizando tu Tema
# Sobrescritura con Archivo CSS
Crea un archivo CSS que sobrescriba las variables por defecto:
/* src/styles/theme.css */
:root {
/* Colores de tu marca */
--bs-primary: #004B8D;
--bs-primary-rgb: 0, 75, 141;
--bs-secondary: #00A0DF;
--bs-secondary-rgb: 0, 160, 223;
/* Tipografía */
--bs-body-font-family: 'Inter', system-ui, sans-serif;
/* Bordes redondeados */
--bs-border-radius: 0.5rem;
--bs-border-radius-lg: 0.75rem;
}
Importa este archivo después del CSS de Dynamic Framework:
// src/main.tsx
import '@dynamic-framework/ui-react/dist/css/dynamic-ui.css';
import './styles/theme.css'; // Tus sobrescrituras
# Theming por Componente
# Botones
/* Todos los botones */
.btn {
--bs-btn-padding-x: 1.5rem;
--bs-btn-padding-y: 0.625rem;
--bs-btn-font-size: 0.875rem;
--bs-btn-font-weight: 600;
--bs-btn-border-radius: 2rem;
}
/* Botón primario */
.btn-primary {
--bs-btn-bg: #004B8D;
--bs-btn-border-color: #004B8D;
--bs-btn-hover-bg: #003d73;
--bs-btn-hover-border-color: #003d73;
--bs-btn-active-bg: #00315c;
--bs-btn-disabled-bg: #6c9dc4;
}
# Cards
.card {
--bs-card-spacer-y: 1.5rem;
--bs-card-spacer-x: 1.5rem;
--bs-card-border-radius: 1rem;
--bs-card-border-color: transparent;
--bs-card-box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
# Controles de Formulario
.form-control {
--bs-border-radius: 0.5rem;
padding: 0.75rem 1rem;
border-color: #dee2e6;
}
.form-control:focus {
border-color: var(--bs-primary);
box-shadow: 0 0 0 0.2rem rgba(0, 75, 141, 0.15);
}
# Alertas
.alert-primary {
--bs-alert-bg: #e7f1f9;
--bs-alert-border-color: #b8d4ea;
--bs-alert-color: #003d73;
}
# Estilizando Componentes Dynamic
Los componentes de Dynamic Framework usan clases de Bootstrap. Consulta el Storybook (opens new window) para propiedades CSS específicas de cada componente.
# DButton
import { DButton } from '@dynamic-framework/ui-react';
// El componente renderiza clases de botón de Bootstrap
<DButton text="Clic aquí" variant="primary" />
// Renderiza: <button class="btn btn-primary">Clic aquí</button>
Estiliza con CSS estándar de botones Bootstrap:
.btn-primary {
/* Tus estilos */
}
# DCard
import { DCard } from '@dynamic-framework/ui-react';
<DCard>
<DCard.Header>Título</DCard.Header>
<DCard.Body>Contenido</DCard.Body>
</DCard>
// Renderiza estructura de card de Bootstrap
Estiliza con CSS estándar de cards Bootstrap:
.card {
/* Tus estilos */
}
.card-header {
/* Estilos del header */
}
.card-body {
/* Estilos del body */
}
# DInput
import { DInput } from '@dynamic-framework/ui-react';
<DInput label="Email" type="email" />
// Renderiza form-control de Bootstrap
Estiliza con clases de formulario:
.form-control {
/* Tus estilos */
}
.form-label {
/* Estilos del label */
}
# Modo Oscuro
Implementa modo oscuro definiendo valores de variables alternativos:
/* Modo claro (por defecto) */
:root {
--bs-body-bg: #ffffff;
--bs-body-color: #212529;
--bs-card-bg: #ffffff;
}
/* Modo oscuro */
[data-bs-theme="dark"] {
--bs-body-bg: #121212;
--bs-body-color: #e0e0e0;
--bs-card-bg: #1e1e1e;
--bs-border-color: #2d2d2d;
}
Alternar con JavaScript:
function toggleDarkMode() {
const html = document.documentElement;
const current = html.getAttribute('data-bs-theme');
html.setAttribute('data-bs-theme', current === 'dark' ? 'light' : 'dark');
}
# Mejores Prácticas
- Usa variables CSS para valores dinámicos - Colores que pueden cambiar en runtime
- No sobrescribas con
!important- Usa especificidad CSS adecuada - Prueba ratios de contraste - Asegura accesibilidad con WebAIM Contrast Checker (opens new window)
- Revisa Storybook - Ve propiedades CSS de componentes en react.dynamicframework.dev (opens new window)