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

Bootstrap CSS: Componentes y Patrones de UI — Biblioteca de Componentes Reutilizables

URL: https://ruvebal.github.io/web-atelier-udit/lessons/es/bootstrap/components-navbar-cards/

📋 Tabla de contenidos

Bootstrap CSS: Componentes y Patrones de UI — Biblioteca de Componentes Reutilizables

Resumen de Sesión

Esta sesión explora el ecosistema de componentes de Bootstrap y patrones de UI. Los estudiantes aprenderán a usar componentes pre-construidos como barras de navegación, tarjetas, botones y formularios para crear interfaces consistentes y profesionales de manera rápida y eficiente.

Objetivos de Aprendizaje

  • Dominar la biblioteca de componentes de Bootstrap (navbar, tarjetas, botones, formularios)
  • Entender la composición y reutilización de componentes
  • Aprender a crear patrones de UI consistentes a través de proyectos
  • Practicar HTML semántico con estilizado de Bootstrap

Conceptos Core

Filosofía de Componentes de Bootstrap

Bootstrap proporciona un conjunto comprehensivo de componentes pre-construidos y reutilizables que siguen patrones de diseño consistentes. Cada componente es:

  • Accesible por defecto - Construido con atributos ARIA y navegación por teclado
  • Responsivo - Funciona a través de todos los tamaños de dispositivo
  • Personalizable - Puede ser temado y extendido
  • Bien documentado - Ejemplos de uso y documentación API claros

Categorías de Componentes

Los componentes de Bootstrap caen en varias categorías:

  1. Componentes de Diseño - Estructuran el contenido de la página
  2. Componentes de Navegación - Ayudan a los usuarios a moverse por el contenido
  3. Componentes de Contenido - Muestran información
  4. Componentes de Formularios - Recogen entrada del usuario
  5. Componentes de Feedback - Muestran el estado del sistema

Componentes Esenciales

Barra de Navegación (Navbar)

La navbar es el componente más comúnmente usado de Bootstrap para navegación del sitio:

<nav class="navbar navbar-expand-lg navbar-light bg-light">
	<div class="container">
		<a class="navbar-brand" href="#">Marca</a>

		<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
			<span class="navbar-toggler-icon"></span>
		</button>

		<div class="collapse navbar-collapse" id="navbarNav">
			<ul class="navbar-nav ms-auto">
				<li class="nav-item">
					<a class="nav-link active" href="#">Inicio</a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="#">Acerca de</a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="#">Proyectos</a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="#">Contacto</a>
				</li>
			</ul>
		</div>
	</div>
</nav>

Características Clave:

  • Colapso responsivo - Se colapsa automáticamente en móvil
  • Posicionamiento de marca - Colocación de logo o nombre del sitio
  • Alineación de navegación - Izquierda, centro o derecha
  • Soporte para dropdown - Navegación multinivel

Tarjetas

Las tarjetas son contenedores de contenido flexibles para mostrar información relacionada:

<div class="card">
	<img src="https://picsum.photos/300/200?random=1" class="card-img-top" alt="Imagen del proyecto" />
	<div class="card-body">
		<h5 class="card-title">Título del Proyecto</h5>
		<p class="card-text">Descripción breve del proyecto y sus características clave.</p>
		<a href="#" class="btn btn-primary">Ver Proyecto</a>
	</div>
</div>

Variaciones de Tarjetas:

  • Grupos de tarjetas - .card-group para tarjetas de altura igual
  • Decks de tarjetas - .card-deck para diseños responsivos de tarjetas
  • Columnas de tarjetas - .card-columns para diseños estilo Pinterest

Botones

Bootstrap proporciona estilizado de botones consistente con múltiples variantes:

<!-- Variantes de botones -->
<button type="button" class="btn btn-primary">Primario</button>
<button type="button" class="btn btn-secondary">Secundario</button>
<button type="button" class="btn btn-success">Éxito</button>
<button type="button" class="btn btn-danger">Peligro</button>
<button type="button" class="btn btn-warning">Advertencia</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-light">Claro</button>
<button type="button" class="btn btn-dark">Oscuro</button>

<!-- Botones outline -->
<button type="button" class="btn btn-outline-primary">Primario</button>
<button type="button" class="btn btn-outline-secondary">Secundario</button>

<!-- Tamaños de botones -->
<button type="button" class="btn btn-primary btn-lg">Grande</button>
<button type="button" class="btn btn-primary">Por Defecto</button>
<button type="button" class="btn btn-primary btn-sm">Pequeño</button>

Formularios

Los formularios de Bootstrap proporcionan estilizado consistente y estados de validación:

<form>
	<div class="mb-3">
		<label for="email" class="form-label">Dirección de email</label>
		<input type="email" class="form-control" id="email" placeholder="Ingrese email" />
		<div class="form-text">Nunca compartiremos su email con nadie más.</div>
	</div>

	<div class="mb-3">
		<label for="password" class="form-label">Contraseña</label>
		<input type="password" class="form-control" id="password" />
	</div>

	<div class="mb-3 form-check">
		<input type="checkbox" class="form-check-input" id="remember" />
		<label class="form-check-label" for="remember">Recordarme</label>
	</div>

	<button type="submit" class="btn btn-primary">Enviar</button>
</form>

Práctica Práctica

Ejercicio 1: Portafolio Completo con Componentes

Crea una página de portafolio comprehensiva usando componentes de Bootstrap:

<!DOCTYPE html>
<html lang="es">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Mi Portafolio Bootstrap</title>
		<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />
	</head>
	<body>
		<!-- Navegación -->
		<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
			<div class="container">
				<a class="navbar-brand" href="#">Portafolio</a>
				<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
					<span class="navbar-toggler-icon"></span>
				</button>
				<div class="collapse navbar-collapse" id="navbarNav">
					<ul class="navbar-nav ms-auto">
						<li class="nav-item"><a class="nav-link" href="#inicio">Inicio</a></li>
						<li class="nav-item"><a class="nav-link" href="#acerca">Acerca de</a></li>
						<li class="nav-item"><a class="nav-link" href="#proyectos">Proyectos</a></li>
						<li class="nav-item"><a class="nav-link" href="#contacto">Contacto</a></li>
					</ul>
				</div>
			</div>
		</nav>

		<!-- Sección Hero -->
		<section id="inicio" class="bg-primary text-white py-5">
			<div class="container">
				<div class="row align-items-center">
					<div class="col-lg-6">
						<h1 class="display-4">Bienvenido a Mi Portafolio</h1>
						<p class="lead">Soy un desarrollador web apasionado por crear sitios web hermosos y funcionales.</p>
						<a href="#proyectos" class="btn btn-light btn-lg">Ver Mi Trabajo</a>
					</div>
					<div class="col-lg-6">
						<img src="https://picsum.photos/600/400?random=hero" class="img-fluid rounded" alt="Imagen hero" />
					</div>
				</div>
			</div>
		</section>

		<!-- Sección Acerca de -->
		<section id="acerca" class="py-5">
			<div class="container">
				<div class="row">
					<div class="col-lg-8 mx-auto text-center">
						<h2>Acerca de Mí</h2>
						<p class="lead">Me especializo en diseño web responsivo y desarrollo front-end moderno.</p>
						<div class="row mt-4">
							<div class="col-md-4">
								<div class="card border-0 bg-light">
									<div class="card-body text-center">
										<h3>Diseño Responsivo</h3>
										<p>Creando sitios web que funcionan hermosamente en todos los dispositivos.</p>
									</div>
								</div>
							</div>
							<div class="col-md-4">
								<div class="card border-0 bg-light">
									<div class="card-body text-center">
										<h3>Código Limpio</h3>
										<p>Escribiendo HTML/CSS mantenible y semántico.</p>
									</div>
								</div>
							</div>
							<div class="col-md-4">
								<div class="card border-0 bg-light">
									<div class="card-body text-center">
										<h3>Rendimiento</h3>
										<p>Optimizando para carga rápida y gran experiencia de usuario.</p>
									</div>
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		</section>

		<!-- Sección de Proyectos -->
		<section id="proyectos" class="py-5 bg-light">
			<div class="container">
				<h2 class="text-center mb-5">Mis Proyectos</h2>
				<div class="row">
					<div class="col-lg-4 mb-4">
						<div class="card h-100">
							<img src="https://picsum.photos/400/250?random=1" class="card-img-top" alt="Sitio E-commerce" />
							<div class="card-body">
								<h5 class="card-title">Plataforma E-commerce</h5>
								<p class="card-text">Una plataforma de e-commerce responsiva construida con tecnologías web modernas.</p>
								<a href="#" class="btn btn-primary">Ver Detalles</a>
							</div>
						</div>
					</div>
					<div class="col-lg-4 mb-4">
						<div class="card h-100">
							<img src="https://picsum.photos/400/250?random=2" class="card-img-top" alt="CMS de Portafolio" />
							<div class="card-body">
								<h5 class="card-title">Sistema de Gestión de Contenido</h5>
								<p class="card-text">CMS personalizado para profesionales creativos.</p>
								<a href="#" class="btn btn-primary">Ver Detalles</a>
							</div>
						</div>
					</div>
					<div class="col-lg-4 mb-4">
						<div class="card h-100">
							<img src="https://picsum.photos/400/250?random=3" class="card-img-top" alt="App Móvil" />
							<div class="card-body">
								<h5 class="card-title">App de Gestión de Tareas</h5>
								<p class="card-text">App web progresiva para productividad y gestión de tareas.</p>
								<a href="#" class="btn btn-primary">Ver Detalles</a>
							</div>
						</div>
					</div>
				</div>
			</div>
		</section>

		<!-- Formulario de Contacto -->
		<section id="contacto" class="py-5">
			<div class="container">
				<div class="row justify-content-center">
					<div class="col-lg-6">
						<h2 class="text-center mb-4">Ponte en Contacto</h2>
						<form>
							<div class="mb-3">
								<label for="nombre" class="form-label">Nombre</label>
								<input type="text" class="form-control" id="nombre" required />
							</div>
							<div class="mb-3">
								<label for="email" class="form-label">Email</label>
								<input type="email" class="form-control" id="email" required />
							</div>
							<div class="mb-3">
								<label for="mensaje" class="form-label">Mensaje</label>
								<textarea class="form-control" id="mensaje" rows="4" required></textarea>
							</div>
							<div class="d-grid">
								<button type="submit" class="btn btn-primary">Enviar Mensaje</button>
							</div>
						</form>
					</div>
				</div>
			</div>
		</section>

		<!-- Pie de Página -->
		<footer class="bg-dark text-white py-4">
			<div class="container text-center">
				<p>&copy; 2024 Mi Portafolio. Construido con Bootstrap.</p>
			</div>
		</footer>

		<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
	</body>
</html>

Mejores Prácticas de Componentes

Consideraciones de Accesibilidad

  • HTML semántico - Usa jerarquía de encabezados y elementos landmark apropiados
  • Atributos ARIA - Los componentes de Bootstrap incluyen etiquetas ARIA apropiadas
  • Navegación por teclado - Todos los componentes interactivos son accesibles por teclado
  • Contraste de color - Asegura ratios de contraste suficientes para legibilidad de texto

Optimización de Rendimiento

  • Carga selectiva de componentes - Solo incluye componentes que realmente uses
  • Optimización CSS - Remueve CSS no usado de Bootstrap para bundles más pequeños
  • Optimización de imágenes - Usa imágenes responsivas con texto alt apropiado

Directrices de Personalización

  • Propiedades CSS personalizadas - Usa las propiedades CSS personalizadas de Bootstrap para temas
  • Variables Sass - Anula variables predeterminadas antes de compilación
  • Extensión de componentes - Extiende componentes existentes en lugar de reescribirlos completamente

Preguntas Críticas de Reflexión

Exploración

  • ¿Cuáles componentes de Bootstrap fueron más intuitivos de implementar versus aquellos que requirieron más experimentación?
  • ¿Cómo afectó usar componentes pre-construidos tu proceso creativo comparado con construir desde cero?

Reflexión

  • ¿De qué maneras encarnan los componentes de Bootstrap principios de mejora progresiva?
  • ¿Cómo se relaciona la reutilización de componentes con la mantenibilidad en proyectos más grandes?

Conceptualización

  • ¿Cómo se relacionan los patrones de diseño de Bootstrap con principios establecidos de UI/UX?
  • ¿Cuáles son las implicaciones de accesibilidad de usar bibliotecas de componentes pre-construidas?

Producción

  • ¿Cómo podrían escalar los componentes de Bootstrap para aplicaciones a nivel empresarial?
  • ¿Cuáles son las compensaciones entre usar una biblioteca de componentes versus construir componentes personalizados?

Exhibición

  • ¿Cómo demostrarás la consistencia y profesionalismo de tu uso de componentes Bootstrap?
  • ¿Qué enfoques alternativos de componentes podrían lograr consistencia de diseño similar?

Referencias y Lecturas Adicionales

Documentación Oficial

Teoría de Diseño de Componentes

Accesibilidad y Mejores Prácticas

Siguiente: S4 - Personalización CSS y Sass →