Bootstrap CSS: Interactividad y Componentes JavaScript — Experiencias de Usuario Dinámicas
URL: https://ruvebal.github.io/web-atelier-udit/lessons/es/bootstrap/interactivity-js-components/
Bootstrap CSS: Interactividad y Componentes JavaScript — Experiencias de Usuario Dinámicas
Resumen de Sesión
Esta sesión introduce los componentes JavaScript de Bootstrap y características de interactividad. Los estudiantes aprenderán cómo añadir comportamiento dinámico a sus sitios web usando los componentes JavaScript pre-construidos de Bootstrap, atributos de datos, y principios de mejora progresiva.
🎯 Objetivos de Aprendizaje
- Entender la arquitectura de componentes JavaScript de Bootstrap
- Aprender a usar atributos de datos para configuración de componentes
- Dominar componentes interactivos como modales, carruseles y dropdowns
- Aplicar principios de mejora progresiva
- Controlar componentes programáticamente mediante API JavaScript
🚀 Demos Interactivas
Explora estas demos interactivas para aprender haciendo:
- Sistema de Atributos de Datos - Aprende cómo Bootstrap usa
data-*atributos - Diálogos Modales - Ventanas de diálogo superpuestas con todos los tamaños y opciones
- Carruseles - Slideshows rotativos con indicadores y subtítulos
- Dropdowns & Tooltips - Menús y consejos contextuales
- Portafolio Interactivo - Ejemplo completo integrando todos los componentes
- API JavaScript & Eventos - Control programático y manejo de eventos
📚 Conceptos Core
Arquitectura JavaScript de Bootstrap
El JavaScript de Bootstrap está construido alrededor de una arquitectura basada en componentes donde:
- Los componentes se inicializan usando atributos de datos o JavaScript API
- No se requiere JavaScript personalizado para funcionalidad básica
- La mejora progresiva asegura degradación graceful
- La accesibilidad está integrada con atributos ARIA apropiados
💡 Aprende más: Explora la Demo de Atributos de Datos para ver cómo funcionan en la práctica.
Sistema de Atributos de Datos
Bootstrap usa atributos de datos data-* para configurar y controlar componentes sin escribir JavaScript:
🎨 Demo Interactiva: Explora el Sistema de Atributos de Datos
<!-- Botón básico -->
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">Lanzar Modal</button>
<!-- Componente configurable -->
<div class="dropdown">
<button
class="btn btn-secondary dropdown-toggle"
type="button"
data-bs-toggle="dropdown"
data-bs-display="static"
aria-expanded="false">
Botón dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Acción</a></li>
<li><a class="dropdown-item" href="#">Otra acción</a></li>
</ul>
</div>
Mejora Progresiva
Bootstrap sigue principios de mejora progresiva:
- HTML-first - El contenido funciona sin JavaScript
- Mejora CSS - Mejoras visuales con CSS
- Mejora JavaScript - Características interactivas con JS
🎭 Componentes Interactivos Esenciales
Diálogos Modales
Los modales crean diálogos que se superponen al contenido principal:
🎨 Demo Interactiva: Explora Diálogos Modales - Diferentes tamaños, scroll, y posicionamiento
<!-- Botón para activar modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
Lanzar modal de demostración
</button>
<!-- Estructura del modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Título del modal</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
</div>
<div class="modal-body">
<p>El contenido del modal va aquí. Esto puede incluir texto, imágenes, formularios o cualquier otro contenido.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
<button type="button" class="btn btn-primary">Guardar cambios</button>
</div>
</div>
</div>
</div>
Características del Modal:
- Backdrop - Overlay oscuro detrás del modal
- Gestión de foco - Enfoca automáticamente en el modal cuando se abre
- Navegación por teclado - La tecla Escape cierra el modal
- Prevención de scroll - El scroll del body se deshabilita cuando el modal está abierto
Carrusel/Slideshow
Los carruseles crean displays de contenido rotativo:
🎨 Demo Interactiva: Explora Carruseles - Con indicadores, subtítulos, y efectos fade
<div id="carouselExample" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-indicators">
<button
type="button"
data-bs-target="#carouselExample"
data-bs-slide-to="0"
class="active"
aria-current="true"
aria-label="Slide 1"></button>
<button type="button" data-bs-target="#carouselExample" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#carouselExample" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="https://picsum.photos/800/400?random=1" class="d-block w-100" alt="Primera slide" />
<div class="carousel-caption d-none d-md-block">
<h5>Etiqueta de primera slide</h5>
<p>Contenido placeholder representativo para la primera slide.</p>
</div>
</div>
<div class="carousel-item">
<img src="https://picsum.photos/800/400?random=2" class="d-block w-100" alt="Segunda slide" />
<div class="carousel-caption d-none d-md-block">
<h5>Etiqueta de segunda slide</h5>
<p>Contenido placeholder representativo para la segunda slide.</p>
</div>
</div>
<div class="carousel-item">
<img src="https://picsum.photos/800/400?random=3" class="d-block w-100" alt="Tercera slide" />
<div class="carousel-caption d-none d-md-block">
<h5>Etiqueta de tercera slide</h5>
<p>Contenido placeholder representativo para la tercera slide.</p>
</div>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExample" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Anterior</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#carouselExample" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Siguiente</span>
</button>
</div>
Menús Dropdown
Los dropdowns crean menús colapsables:
🎨 Demo Interactiva: Explora Dropdowns & Tooltips - Direcciones, contenido avanzado, y tooltips
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Botón dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Acción</a></li>
<li><a class="dropdown-item" href="#">Otra acción</a></li>
<li><hr class="dropdown-divider" /></li>
<li><a class="dropdown-item" href="#">Algo más aquí</a></li>
</ul>
</div>
Tooltips y Popovers
Los tooltips muestran información adicional al hover/focus:
<button
type="button"
class="btn btn-secondary"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Tooltip en la parte superior">
Tooltip
</button>
<!-- Inicializar tooltips con JavaScript -->
<script>
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl);
});
</script>
💻 Práctica Práctica
Ejercicio 1: Portafolio Interactivo con Modales
🎨 Demo Completa: Ver Portafolio Interactivo
Esta demo muestra cómo combinar todos los componentes JavaScript de Bootstrap en una aplicación real. Incluye:
- Navegación responsiva con dropdowns
- Tarjetas de proyecto con modales de detalles
- Carrusel de testimonios
- Tooltips en habilidades
- Sistema de notificaciones con toasts
📝 Tarea: Examina el código fuente y personaliza el portafolio con tu propia información.
Características que debes implementar:
- Navegación Sticky con collapse en móviles
- Cards de Proyecto con hover effects
- Modales de Detalle con información completa
- Badges de Tecnología con tooltips
- Formulario de Contacto en modal
🔧 API JavaScript y Control Programático
Además de los atributos de datos, Bootstrap proporciona una API JavaScript completa para control programático:
🎨 Demo Avanzada: Explora API JavaScript & Eventos
Inicialización Manual
// Crear instancia de componente
const myModal = new bootstrap.Modal(document.getElementById('myModal'), {
backdrop: 'static',
keyboard: false,
});
// Controlar el componente
myModal.show();
myModal.hide();
myModal.toggle();
Eventos de Componentes
const modalEl = document.getElementById('myModal');
// Escuchar eventos
modalEl.addEventListener('show.bs.modal', function (event) {
console.log('Modal está por mostrarse');
// Tu código aquí
});
modalEl.addEventListener('shown.bs.modal', function (event) {
console.log('Modal está completamente visible');
// Enfocar un campo, iniciar animación, etc.
});
Métodos Disponibles
Todos los componentes comparten métodos comunes:
| Método | Descripción |
|---|---|
show() |
Muestra el componente |
hide() |
Oculta el componente |
toggle() |
Alterna entre mostrar/ocultar |
dispose() |
Destruye el componente y limpia memoria |
getInstance() |
Obtiene la instancia del componente |
🤔 Preguntas Críticas de Reflexión
Exploración
- ¿Cómo cambió añadir interactividad JavaScript tu percepción de las capacidades de Bootstrap?
- ¿Qué te sorprendió más sobre el sistema de atributos de datos para configuración de componentes?
- ¿Cuándo preferirías usar atributos de datos vs. API JavaScript?
Reflexión
- ¿Cómo encarna el enfoque de Bootstrap a componentes JavaScript principios de mejora progresiva?
- ¿De qué maneras afecta la interactividad sin código la experiencia del desarrollador comparado con JavaScript personalizado?
- ¿Qué ventajas ofrece el manejo de eventos del ciclo de vida de componentes?
Conceptualización
- ¿Cómo se relacionan los componentes interactivos con principios de diseño de experiencia de usuario?
- ¿Cuáles son las implicaciones de accesibilidad de diálogos modales y contenido superpuesto?
- ¿Cómo influye el timing de eventos en la arquitectura de aplicaciones?
Producción
- ¿Cómo podrían escalar los componentes JavaScript de Bootstrap para aplicaciones complejas a nivel empresarial?
- ¿Cuáles son las implicaciones de rendimiento de incluir el bundle JavaScript de Bootstrap?
- ¿Cuándo necesitarías combinar Bootstrap con frameworks como React o Vue?
Exhibición
- ¿Cómo demostrarás las características interactivas de tu portafolio mejorado con Bootstrap?
- ¿Qué enfoques alternativos a interactividad web podrían lograr experiencias de usuario similares?
- ¿Cómo documentarías el uso de componentes JavaScript en tu proyecto?
Referencias y Lecturas Adicionales
Documentación Oficial
JavaScript e Interactividad
Experiencia de Usuario y Diseño de Interacción
- No Me Hagas Pensar por Steve Krug
- El Diseño de las Cosas Cotidianas por Don Norman
- Microinteracciones por Dan Saffer
Siguiente: S6 - Construcción y Despliegue →