Bootstrap y Tailwind CSS

Frameworks CSS modernos para desarrollo rápido y consistente

Objetivos de Aprendizaje

Bootstrap

Grid System
Componentes
Personalización

Sistema de Grid

.col-md-4
.col-md-4
.col-md-4
.col-sm-6 .col-lg-3
.col-sm-6 .col-lg-3
.col-sm-6 .col-lg-3
.col-sm-6 .col-lg-3
<div class="row">
  <div class="col-md-4">Columna 1</div>
  <div class="col-md-4">Columna 2</div>
  <div class="col-md-4">Columna 3</div>
</div>

<div class="row">
  <div class="col-sm-6 col-lg-3">Col A</div>
  <div class="col-sm-6 col-lg-3">Col B</div>
  <div class="col-sm-6 col-lg-3">Col C</div>
  <div class="col-sm-6 col-lg-3">Col D</div>
</div>
12 columnas responsive breakpoints

Utilidades Responsivas

Visible solo en móviles
Visible desde tablets
Texto alineado diferente por breakpoint
<!-- Alineación responsiva -->
<div class="text-start text-md-center">
  Texto centrado en md+
</div>

<!-- Visibilidad responsiva -->
<div class="d-none d-lg-block">
  Solo visible en lg+
</div>

<!-- Espaciado responsivo -->
<div class="mt-2 mt-md-4">
  Margen superior variable
</div>
d-* text-* m/p-*

Componentes Comunes

Tarjeta de Bootstrap
Título especial

Texto de ejemplo en el cuerpo de la tarjeta.

Éxito! Esto es una alerta desechable.
<!-- Tarjeta -->
<div class="card">
  <div class="card-body">
    <h5 class="card-title">Título</h5>
    <p class="card-text">Contenido...</p>
  </div>
</div>

<!-- Alerta -->
<div class="alert alert-success">
  Mensaje de éxito
</div>
cards alerts buttons

Componentes Interactivos

<!-- Pestañas -->
<ul class="nav nav-tabs">
  <li class="nav-item">
    <a class="nav-link active" data-bs-toggle="tab" href="#home">Inicio</a>
  </li>
</ul>

<!-- Dropdown -->
<div class="dropdown">
  <button class="dropdown-toggle" data-bs-toggle="dropdown">
    Menú
  </button>
  <ul class="dropdown-menu">
    <li><a class="dropdown-item" href="#">Opción</a></li>
  </ul>
</div>
tabs dropdowns modals

Personalización con SASS

// Cambiar colores primarios
$primary: #3498db;
$danger: #e74c3c;

// Modificar breakpoints
$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 992px,
  xl: 1200px,
  xxl: 1400px
);

// Importar Bootstrap
@import "~bootstrap/scss/bootstrap";
variables SASS customización themificación

Buena Práctica:

Crea un archivo _variables.scss para sobreescribir las variables de Bootstrap antes de importar los estilos principales.

Componentes Personalizados

Alerta personalizada
// _custom.scss
.btn-custom {
  @extend .btn;
  background-color: var(--bs-purple);
  border: 2px solid darken($purple, 10%);
  
  &:hover {
    background-color: darken($purple, 10%);
  }
}

.custom-alert {
  @extend .alert;
  background: linear-gradient(to right, $primary, $info);
  color: white;
}
@extend mixins componentes

Tailwind CSS

Utilidades
Responsive
Personalización

Clases Utilitarias

Título

Este es un cuadro con sombra y borde.

Etiqueta Otra
<div class="flex justify-between p-4 bg-gray-100 rounded">
  <h4 class="text-xl font-bold text-primary">Título</h4>
  <button class="px-4 py-2 bg-primary text-white rounded">
    Botón
  </button>
</div>

<div class="border border-gray-300 rounded p-4 shadow">
  <p class="text-gray-700">Contenido...</p>
  <div class="flex space-x-2">
    <span class="px-3 py-1 bg-green-100 rounded-full">
      Etiqueta
    </span>
  </div>
</div>
flex padding colors

Flexbox y Grid

Columna 1
Columna 2
Item 1
Item 2
Item 3
<!-- Grid -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
  <div>Columna 1</div>
  <div>Columna 2</div>
</div>

<!-- Flexbox -->
<div class="flex flex-col sm:flex-row gap-4">
  <div class="flex-1">Item 1</div>
  <div class="flex-1">Item 2</div>
</div>
grid flex gap

Diseño Responsivo

Texto con alineación responsiva
1
2
3
4
<!-- Alineación responsiva -->
<div class="text-center md:text-left">
  Texto adaptable
</div>

<!-- Visibilidad responsiva -->
<div class="hidden md:block">
  Visible en md+
</div>

<!-- Grid responsivo -->
<div class="grid grid-cols-2 md:grid-cols-4">
  <div>Item</div>
</div>
sm: md: lg:

Dark Mode

Título

Este componente cambia en modo oscuro.

<div class="bg-white dark:bg-gray-800">
  <h4 class="text-gray-900 dark:text-white">
    Título
  </h4>
  <p class="text-gray-700 dark:text-gray-300">
    Contenido...
  </p>
</div>

// tailwind.config.js
module.exports = {
  darkMode: 'class', // or 'media'
}
dark: configuración personalización

Configuración Tailwind

// tailwind.config.js
module.exports = {
  content: ['./src/**/*.{html,js}'],
  theme: {
    extend: {
      colors: {
        primary: '#3498db',
        secondary: {
          100: '#d1f2eb',
          500: '#2ecc71',
          900: '#186a3b',
        }
      },
      spacing: {
        '128': '32rem',
      }
    },
  },
  plugins: [],
}
tailwind.config.js colors spacing

Buena Práctica:

Extiende el tema en lugar de sobrescribirlo completamente para mantener compatibilidad con futuras actualizaciones.

Componentes con @apply

Tarjeta Tailwind

Estilo reutilizable con @apply

/* styles.css */
.btn-tailwind {
  @apply px-4 py-2 rounded font-semibold;
  @apply bg-primary text-white;
  @apply hover:bg-blue-600 transition;
}

.card-tailwind {
  @apply p-6 rounded-lg shadow-md;
  @apply bg-white dark:bg-gray-800;
  @apply border border-gray-200 dark:border-gray-700;
}
@apply componentes reutilizables

Comparación

Bootstrap

  • Ventajas: Componentes preconstruidos, documentación extensa, comunidad grande
  • Desventajas: Menos flexible, CSS más grande, puede requerir sobrescrituras
  • Mejor para: Prototipado rápido, equipos que prefieren componentes listos, aplicaciones internas

Tailwind CSS

  • Ventajas: Extremadamente flexible, CSS mínimo, fácil personalización
  • Desventajas: Curva de aprendizaje, HTML más verboso, requiere configuración
  • Mejor para: Diseños personalizados, equipos que usan sistemas de diseño, proyectos con requisitos únicos

Recomendaciones

  • Usa Bootstrap cuando necesites velocidad y consistencia
  • Elige Tailwind para diseños altamente personalizados
  • Considera PurgeCSS con Bootstrap para producción
  • Tailwind funciona excelente con frameworks JS modernos
  • Ambos pueden usarse juntos en diferentes partes de un proyecto

Ejercicios de Laboratorio

Ejercicio 1: Landing Page con Bootstrap

Desarrollé una landing page responsive usando:

  • Navbar con dropdown responsive
  • Hero section con Jumbotron personalizado
  • Grid de características con cards
  • Formulario de contacto con validación
  • Footer con iconos y enlaces

Resultado:

Landing Page

Ejemplo de hero section con Bootstrap.

Característica 1

Descripción breve.

Característica 2

Descripción breve.

Característica 3

Descripción breve.

Ejercicio 2: Dashboard con Tailwind

Implementé un dashboard administrativo usando:

  • Sidebar colapsable
  • Cards con gráficos simulados
  • Tabla responsiva
  • Soporte para dark mode
  • Animaciones con transition

Resultado:

Ventas

$12,345

Usuarios

1,234

Tareas

12/24

Actividad Reciente

Usuario Acción
Juan Pérez Actualizó perfil
María Gómez Realizó compra

Reflexión sobre el Aprendizaje

¿Qué aprendí?

Durante esta semana de inmersión en Bootstrap y Tailwind CSS:

  • Enfoques diferentes: Comprendí la filosofía component-first de Bootstrap vs utility-first de Tailwind
  • Rapidez de desarrollo: Bootstrap permite prototipado rápido con componentes listos, mientras Tailwind ofrece mayor flexibilidad
  • Personalización: Aprendí a customizar ambos frameworks (variables SASS en Bootstrap, tailwind.config.js en Tailwind)
  • Responsive design: Dominé los sistemas de breakpoints en ambos frameworks
  • Casos de uso: Identifiqué cuándo es mejor usar cada framework según los requerimientos del proyecto

¿Cómo aprendí?

Mi proceso de aprendizaje combinó:

  • Práctica comparativa: Implementé los mismos componentes en ambos frameworks para entender diferencias
  • Documentación oficial: Estudié a profundidad las guías de Bootstrap y Tailwind
  • Proyectos reales: Creé páginas completas usando cada framework
  • Análisis crítico: Evalué ventajas/desventajas en rendimiento, personalización y mantenibilidad
  • Comunidad: Revisé ejemplos y soluciones de otros desarrolladores

El momento clave fue cuando implementé el mismo componente en ambos frameworks y pude comparar directamente la cantidad de código, flexibilidad y facilidad de mantenimiento.

Próximos Pasos

Para continuar mi aprendizaje:

  • Profundizar en la personalización avanzada de ambos frameworks
  • Explorar la integración con frameworks JavaScript (React, Vue)
  • Aprender a optimizar el rendimiento (PurgeCSS, tree-shaking)
  • Crear un sistema de diseño personalizado basado en Tailwind
  • Dominar el uso de plugins en Tailwind

También planeo crear una biblioteca de componentes reutilizables que pueda usar con ambos frameworks en proyectos futuros.

Resumen Semana 4

Conceptos Clave

  • Sistemas de grid y componentes en Bootstrap
  • Filosofía utility-first de Tailwind CSS
  • Personalización con variables y configuración
  • Diseño responsivo en ambos frameworks
  • Ventajas y casos de uso para cada uno

Herramientas Dominadas

  • Componentes Bootstrap (cards, modals, navs)
  • Clases utilitarias de Tailwind
  • Configuración de tailwind.config.js
  • Personalización con SASS en Bootstrap
  • Dark Mode en Tailwind

Próximos Pasos

  • Profundizar en SASS para Bootstrap
  • Explorar plugins de Tailwind
  • Integrar con frameworks JavaScript
  • Automatizar procesos con PostCSS
  • Crear sistemas de diseño completos