WEB ATELIER (UDIT) · Aprender haciendo, con teoría, práctica y reflexión compartida

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:

  1. Sistema de Atributos de Datos - Aprende cómo Bootstrap usa data-* atributos
  2. Diálogos Modales - Ventanas de diálogo superpuestas con todos los tamaños y opciones
  3. Carruseles - Slideshows rotativos con indicadores y subtítulos
  4. Dropdowns & Tooltips - Menús y consejos contextuales
  5. Portafolio Interactivo - Ejemplo completo integrando todos los componentes
  6. 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:

  1. HTML-first - El contenido funciona sin JavaScript
  2. Mejora CSS - Mejoras visuales con CSS
  3. 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>

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:

  1. Navegación Sticky con collapse en móviles
  2. Cards de Proyecto con hover effects
  3. Modales de Detalle con información completa
  4. Badges de Tecnología con tooltips
  5. 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

Siguiente: S6 - Construcción y Despliegue →