css4-ejer2-html
EXPLICACIÓN DETALLADA DE CÓMO FUNCIONA
Arquitectura completa de la página
┌─────────────────────────────────────────────────────────────────────────┐ │ BODY (fondo gris #f0f0f0) │ │ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ .container (display: flex, justify-content: center) │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ │ │ .card (width:600px, fondo blanco) │ │ │ │ │ │ ┌───────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ .card-header (fondo gris, borde inferior) │ │ │ │ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ │ │ │ │ H1: "Sotelo" (centrado) │ │ │ │ │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ │ │ │ ├───────────────────────────────────────────────────────┤ │ │ │ │ │ │ │ .card-body (padding 30px 20px, display:flex column) │ │ │ │ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ │ │ │ │ H2: "Lista de Productos" (centrado) │ │ │ │ │ │ │ │ │ ├─────────────────────────────────────────────────┤ │ │ │ │ │ │ │ │ │ P: "Productos disponibles en nuestra tienda" │ │ │ │ │ │ │ │ │ ├─────────────────────────────────────────────────┤ │ │ │ │ │ │ │ │ │ TABLA (.tabla-productos, width:100%) │ │ │ │ │ │ │ │ │ │ ┌───────────────────────────────────────────┐ │ │ │ │ │ │ │ │ │ │ │ THEAD: ID, Producto, Categoría, Precio, │ │ │ │ │ │ │ │ │ │ │ │ Stock (fondo gris claro, negrita) │ │ │ │ │ │ │ │ │ │ │ ├───────────────────────────────────────────┤ │ │ │ │ │ │ │ │ │ │ │ TBODY: 5 filas de productos │ │ │ │ │ │ │ │ │ │ │ │ - Filas pares: fondo #f8f9fa (cebra) │ │ │ │ │ │ │ │ │ │ │ │ - Hover: fondo #e9ecef │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ ├─────────────────────────────────────────────────┤ │ │ │ │ │ │ │ │ │ BUTTON: "Ver catálogo completo" │ │ │ │ │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ │ │ │ ├───────────────────────────────────────────────────────┤ │ │ │ │ │ │ │ .card-footer (texto centrado, gris claro) │ │ │ │ │ │ │ │ "Total de productos: 5 | Actualizado hoy" │ │ │ │ │ │ │ └───────────────────────────────────────────────────────┘ │ │ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘
Conceptos clave de las tablas en CSS
1. border-collapse: collapse
.tabla-productos {
border-collapse: collapse; /* Bordes simples en lugar de dobles */
}Sin collapse: Cada celda tiene su propio borde → bordes DOBLES
Con collapse: Los bordes se fusionan → bordes SIMPLES
Visualmente:
SIN collapse: CON collapse:
┌──────┬──────┐ ┌──────┬──────┐
│ │ │ │ │ │
│ a │ b │ │ a │ b │
│ │ │ │ │ │
├──────┼──────┤ ├──────┼──────┤
│ │ │ │ │ │
│ c │ d │ │ c │ d │
│ │ │ │ │ │
└──────┴──────┘ └──────┴──────┘
(Doble borde) (Borde único)2. nth-child(even) - Efecto "raya de cebra"
.tabla-productos tbody tr:nth-child(even) {
background-color: #f8f9fa; /* Filas pares: fondo gris claro */
}nth-child(even)= filas 2, 4, 6, 8...nth-child(odd)= filas 1, 3, 5, 7...Mejora la LEGIBILIDAD al alternar colores
3. tr:hover - Feedback visual
.tabla-productos tbody tr:hover {
background-color: #e9ecef; /* Resalta la fila bajo el mouse */
}Da una respuesta VISUAL inmediata al usuario
Ayuda a saber qué fila está seleccionando
Estructura semántica de una tabla HTML
<table>
<thead> ← Cabecera (títulos de columnas)
<tr> ← Fila de cabecera
<th>Título 1</th> ← th = cabecera (negrita por defecto)
<th>Título 2</th>
</tr>
</thead>
<tbody> ← Cuerpo (datos reales)
<tr> ← Fila de datos
<td>Dato 1</td> ← td = datos normales
<td>Dato 2</td>
</tr>
</tbody>
<tfoot> ← Pie de tabla (totales, sumas) - opcional
<tr>
<td>Total:</td>
<td>100</td>
</tr>
</tfoot>
</table>🧠 MÉTODO PARA APRENDER Y MEMORIZAR
Técnica 1: La "Regla de las 5 propiedades" para tablas
| Propiedad | Valor común | Qué hace | Frase para recordar |
|---|---|---|---|
border-collapse | collapse | Fusiona bordes | "Colapso los bordes para que sean simples" |
width | 100% | Ocupa todo el ancho | "La tabla se estira como chicle" |
padding | 12px | Espacio interno | "Las celdas respiran con aire" |
text-align | left | Alinea texto | "El texto se va a la izquierda" |
border | 1px solid #dee2e6 | Borde gris | "Borde sutil como línea de cuaderno" |
Técnica 2: Asociaciones visuales (mnemotecnia)
border-collapse: collapse → 🧩 "Fusiona piezas como rompecabezas"
nth-child(even) → 🦓 "Cebra: rayas en filas pares"
tr:hover → 🖱️ "El ratón ilumina el camino"
th → 👑 "Corona (cabecera, más importante)"
td → 📦 "Datos normales (cajas simples)"
thead / tbody → 📑 "Separador de secciones como en un libro"Técnica 3: El método de "construcción por capas" para tablas
CAPA 1: Contenedor de la tabla
.tabla-productos {
width: 100%;
border-collapse: collapse;
}
CAPA 2: Celdas (unificar estilo)
.tabla-productos th,
.tabla-productos td {
border: 1px solid #dee2e6;
padding: 12px;
text-align: left;
}
CAPA 3: Cabecera (diferenciar)
.tabla-productos th {
background-color: #f8f9fa;
font-weight: bold;
}
CAPA 4: Efectos visuales (mejora UX)
.tabla-productos tbody tr:nth-child(even) {
background-color: #f8f9fa;
}
.tabla-productos tbody tr:hover {
background-color: #e9ecef;
}Técnica 4: Práctica de "5 minutos diarios" (plan de una semana)
| Día | Actividad | Tiempo |
|---|---|---|
| Lunes | Escribe la estructura HTML de una tabla (thead + tbody) | 5 min |
| Martes | Escribe el CSS básico (border-collapse + bordes) | 5 min |
| Miércoles | Añade padding y text-align a las celdas | 5 min |
| Jueves | Añade efecto "cebra" con nth-child(even) | 5 min |
| Viernes | Añade efecto hover (tr:hover) | 5 min |
| Sábado | Crea una tabla de 4 columnas con 6 filas desde cero | 15 min |
| Domingo | Explica en voz alta cómo funciona cada propiedad | 15 min |
Técnica 5: Preguntas de autoevaluación
¿Qué diferencia hay entre
<th>y<td>?Respuesta:
<th>es para celdas de CABECERA (negrita por defecto),<td>para celdas de DATOS
¿Para qué sirve
border-collapse: collapse?Respuesta: Fusiona los bordes de las celdas para que no aparezcan dobles
¿Qué significa
nth-child(even)?Respuesta: Selecciona los elementos en posiciones pares (2º, 4º, 6º, etc.)
¿Por qué separamos
<thead>y<tbody>?Respuesta: Para organizar semánticamente la tabla y aplicar estilos diferenciados
¿Qué hace el selector
tr:hover?Respuesta: Aplica estilos cuando el mouse pasa por encima de una fila (feedback visual)
Técnica 6: El "esqueleto mental" que debes memorizar
<!-- ESTRUCTURA BÁSICA DE TABLA (MEMORIZA ESTO) -->
<table>
<thead>
<tr><th>Col1</th><th>Col2</th></tr>
</thead>
<tbody>
<tr><td>Dato1</td><td>Dato2</td></tr>
<tr><td>Dato3</td><td>Dato4</td></tr>
</tbody>
</table>/* CSS BÁSICO DE TABLA (MEMORIZA ESTO) */
.tabla {
width: 100%;
border-collapse: collapse;
}
.tabla th, .tabla td {
border: 1px solid #ddd;
padding: 12px;
text-align: left;
}
.tabla th {
background-color: #f8f9fa;
font-weight: bold;
}
.tabla tbody tr:nth-child(even) {
background-color: #f8f9fa;
}
.tabla tbody tr:hover {
background-color: #e9ecef;
}Técnica 7: La "prueba de la tabla completa"
Cierra los ojos y visualiza esta secuencia:
1. Crear contenedor de tabla: <table class="tabla">
2. Añadir cabecera: <thead> → <tr> → 5 <th>
3. Añadir cuerpo: <tbody> → filas con <tr> → celdas con <td>
4. En CSS: border-collapse, width:100%, border, padding
5. Mejorar: nth-child(even) para cebra, hover para interactividadTécnica 8: Comparativas visuales para entender
SIN border-collapse:
┌─────┬─────┐ │ │ │ ← Bordes dobles ├─────┼─────┤ │ │ │ └─────┴─────┘
CON border-collapse: collapse:
┌─────┬─────┐ │ │ │ ← Bordes simples ├─────┼─────┤ │ │ │ └─────┴─────┘
SIN nth-child(even):
Fila 1: fondo blanco
Fila 2: fondo blanco ← Difícil de leer
Fila 3: fondo blancoCON nth-child(even):
Fila 1: fondo blanco
Fila 2: fondo gris ← ¡Fácil de leer!
Fila 3: fondo blanco🎯 Resumen final: Lo que DEBES memorizar
Propiedades esenciales de tablas:
border-collapse: collapse; /* Bordes simples */
padding: 12px; /* Espacio en celdas */
text-align: left; /* Alineación izquierda */
border: 1px solid #dee2e6; /* Borde gris suave */Selectores esenciales para tablas:
th { font-weight: bold; } /* Cabecera negrita */
tr:nth-child(even) { } /* Filas pares */
tr:hover { } /* Efecto hover */Estructura HTML esencial:
<table>
<thead>
<tr><th></th></tr> <!-- Cabecera -->
</thead>
<tbody>
<tr><td></td></tr> <!-- Datos -->
</tbody>
</table>Fórmula mágica para recordar tablas:
"Para una tabla bonita: colapso bordes, doy padding, alineo izquierda, cebra en pares y hover en filas"
Repite esta frase 10 veces al día durante una semana. No la olvidarás nunca.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- Define la codificación UTF-8 para soportar caracteres especiales (ñ, tildes, €) --> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Hace la página responsive en dispositivos móviles --> <title>Tarjeta con Tabla</title> <!-- Título que aparece en la pestaña del navegador --> </head> <style> /* ============================================================ RESET BÁSICO - Elimina márgenes y paddings por defecto ============================================================ */ * { margin: 0; /* Elimina el margen EXTERNO predeterminado de TODOS los elementos HTML */ padding: 0; /* Elimina el padding INTERNO predeterminado de TODOS los elementos HTML */ /* NOTA: No se incluye box-sizing: border-box para mantener el comportamiento clásico de las tablas */ } /* ============================================================ ESTILOS DEL BODY - Fondo de la página ============================================================ */ body { background-color: #f0f0f0; /* Color gris claro de fondo para toda la página */ } /* ============================================================ CONTENEDOR PRINCIPAL (centra la tarjeta horizontalmente) ============================================================ */ .container { display: flex; /* Activa Flexbox para alinear el contenido */ justify-content: center; /* Centra horizontalmente la tarjeta dentro del contenedor */ padding-top: 10px; /* Espacio superior de 10px separa la tarjeta del borde superior */ } /* ============================================================ TARJETA PRINCIPAL (CARD) ============================================================ */ .card { background-color: white; /* Fondo blanco para la tarjeta (contrasta con fondo gris) */ display: flex; /* Activa Flexbox dentro de la tarjeta para organizar su contenido */ flex-direction: column; /* Organiza el contenido VERTICALMENTE (header, body, footer apilados) */ width: 600px; /* Ancho fijo de 600px (más ancho para acomodar la tabla de 5 columnas) */ border-radius: 8px; /* Bordes redondeados de 8px en las 4 esquinas */ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* Sombra: X=0, Y=2px, difuminado=5px, negro 10% opaco */ } /* ============================================================ HEADER DE LA TARJETA (Parte superior) ============================================================ */ .card-header { background-color: #f8f9fa; /* Color gris muy claro para el fondo del header */ border-radius: 8px 8px 0 0; /* Bordes redondeados SOLO arriba (esquinas superiores) */ padding: 20px; /* Espacio interno de 20px alrededor del contenido del header */ display: flex; /* Activa Flexbox para alinear el contenido del header */ align-items: center; /* Centra VERTICALMENTE el contenido dentro del header */ justify-content: center; /* Centra HORIZONTALMENTE el contenido dentro del header */ border-bottom: 1px solid #dee2e6; /* Línea divisoria inferior (separa header de body) */ } /* ============================================================ BODY DE LA TARJETA (Contenido principal: tabla y botón) ============================================================ */ .card-body { padding: 30px 20px; /* Padding vertical 30px, horizontal 20px alrededor del contenido */ background: white; /* Fondo blanco para el body */ display: flex; /* Activa Flexbox para organizar el contenido del body */ flex-direction: column; /* Organiza el contenido VERTICALMENTE (h2, p, tabla, botón) */ gap: 20px; /* Espacio de 20px ENTRE cada elemento dentro del body (separación uniforme) */ } /* ============================================================ ESTILOS PARA LA TABLA DE 5 COLUMNAS ============================================================ */ /* La tabla ocupa todo el ancho disponible y usa bordes colapsados */ .tabla-productos { width: 100%; /* La tabla ocupa el 100% del ancho de su contenedor (.card-body) */ border-collapse: collapse; /* Elimina los espacios dobles ENTRE los bordes de las celdas */ /* border-collapse: separate; sería el valor por defecto (bordes separados) */ font-family: Arial, sans-serif; /* Fuente Arial para toda la tabla (legible y profesional) */ } /* Estilo para las celdas de CABECERA (th) y celdas de DATOS (td) */ .tabla-productos th, .tabla-productos td { border: 1px solid #dee2e6; /* Borde gris suave de 1px alrededor de CADA celda */ padding: 12px; /* Espacio interno de 12px dentro de cada celda (aire para el texto) */ text-align: left; /* Texto alineado a la izquierda en todas las celdas */ /* text-align: center; centraría el texto, pero left es más legible para tablas de datos */ } /* Estilo ESPECIAL para las celdas de CABECERA (th) */ .tabla-productos th { background-color: #f8f9fa; /* Fondo gris claro para diferenciar la cabecera del cuerpo */ font-weight: bold; /* Texto en NEGRITA para destacar los títulos de las columnas */ } /* EFECTO "RAYA DE CEBRA" - Alterna colores en filas pares/impares (mejora la legibilidad) */ .tabla-productos tbody tr:nth-child(even) { background-color: #f8f9fa; /* Fondo gris muy claro en las filas PARES (2, 4, 6, etc.) */ /* nth-child(even) selecciona elementos en posiciones pares */ } /* EFECTO HOVER - Cambia el fondo cuando el mouse pasa por encima de una fila */ .tabla-productos tbody tr:hover { background-color: #e9ecef; /* Fondo gris un poco más oscuro al pasar el ratón (feedback visual) */ /* Esto ayuda al usuario a saber qué fila está seleccionando */ } /* ============================================================ ESTILOS PARA TEXTOS DENTRO DEL BODY ============================================================ */ /* Párrafos dentro del body: centrados horizontalmente */ .card-body p { width: 100%; /* Ocupa todo el ancho disponible */ text-align: center; /* Centra el texto horizontalmente */ } /* Títulos H2 dentro del body: centrados horizontalmente */ .card-body h2 { width: 100%; /* Ocupa todo el ancho disponible */ text-align: center; /* Centra el texto horizontalmente */ } /* ============================================================ BOTÓN DENTRO DEL BODY ============================================================ */ .card-body button { align-self: flex-start; /* Alinea el botón al INICIO (izquierda) del contenedor flex */ background-color: #0d6efd; /* Color azul primario (azul Bootstrap) para el fondo del botón */ color: white; /* Texto en color blanco para máximo contraste */ border: none; /* Elimina el borde predeterminado del botón */ padding: 10px 20px; /* Padding vertical 10px, horizontal 20px */ border-radius: 6px; /* Bordes redondeados de 6px */ cursor: pointer; /* Cambia el cursor a "mano" al pasar por encima (indica clickeable) */ font-size: 16px; /* Tamaño de fuente de 16px para el texto del botón */ } /* EFECTO HOVER para el botón (cuando el mouse pasa por encima) */ .card-body button:hover { background-color: #0b5ed7; /* Azul ligeramente más oscuro al pasar el mouse (efecto visual) */ } /* ============================================================ FOOTER DE LA TARJETA (Parte inferior) ============================================================ */ .card-footer { background-color: #f8f9fa; /* Color gris muy claro para el fondo del footer */ padding: 15px 20px; /* Padding vertical 15px, horizontal 20px alrededor del contenido */ border-top: 1px solid #dee2e6; /* Línea divisoria SUPERIOR (Separa body de footer) */ border-radius: 0 0 8px 8px; /* Bordes redondeados SOLO abajo (esquinas inferiores) */ text-align: center; /* Centra el texto horizontalmente dentro del footer */ color: #6c757d; /* Color gris oscuro para el texto (suave, no compite con el contenido principal) */ } /* ============================================================ NOTAS ADICIONALES SOBRE LAS TABLAS: 1. border-collapse: collapse → Hace que los bordes sean simples (no dobles) 2. nth-child(even) → Selecciona filas pares para el efecto "cebra" 3. tr:hover → Da feedback visual al usuario 4. th vs td → th es para cabeceras (negrita por defecto), td para datos 5. Siempre usar <thead> y <tbody> para organizar la tabla semánticamente ============================================================ --> </style> <body> <div class="container"> <div class="card"> <!-- CABECERA DE LA TARJETA --> <div class="card-header"> <h1>Sotelo</h1> <!-- Título principal de la tarjeta --> </div> <!-- CUERPO DE LA TARJETA (Contenido) --> <div class="card-body"> <h2>Lista de Productos</h2> <!-- Subtítulo --> <p>Productos disponibles en nuestra tienda</p> <!-- Descripción --> <!-- =============================================== TABLA DE 5 COLUMNAS - LA PARTE IMPORTANTE =============================================== --> <table class="tabla-productos"> <!-- CABECERA DE LA TABLA (define los nombres de las columnas) --> <thead> <tr> <!-- Fila de cabecera --> <th>ID</th> <!-- Columna 1: Identificador único del producto --> <th>Producto</th> <!-- Columna 2: Nombre del producto --> <th>Categoría</th> <!-- Columna 3: Categoría a la que pertenece --> <th>Precio</th> <!-- Columna 4: Valor económico del producto --> <th>Stock</th> <!-- Columna 5: Cantidad disponible en inventario --> </tr> </thead> <!-- CUERPO DE LA TABLA (datos de ejemplo) --> <tbody> <!-- Producto 1: Portátil profesional --> <tr> <td>001</td> <!-- ID --> <td>Portátil Pro</td> <!-- Producto --> <td>Informática</td> <!-- Categoría --> <td>899€</td> <!-- Precio --> <td>15</td> <!-- Stock (unidades disponibles) --> </tr> <!-- Producto 2: Monitor de 24 pulgadas --> <tr> <td>002</td> <td>Monitor 24"</td> <td>Periféricos</td> <td>199€</td> <td>8</td> </tr> <!-- Producto 3: Teclado mecánico para gaming --> <tr> <td>003</td> <td>Teclado Mecánico</td> <td>Periféricos</td> <td>89€</td> <td>23</td> </tr> <!-- Producto 4: Ratón inalámbrico --> <tr> <td>004</td> <td>Ratón Inalámbrico</td> <td>Periféricos</td> <td>29€</td> <td>42</td> </tr> <!-- Producto 5: Auriculares para gaming --> <tr> <td>005</td> <td>Auriculares Gaming</td> <td>Audio</td> <td>59€</td> <td>11</td> </tr> </tbody> </table> <!-- Botón de acción --> <button>Ver catálogo completo</button> </div> <!-- PIE DE LA TARJETA (información adicional) --> <div class="card-footer"> Total de productos: 5 | Actualizado hoy <!-- Texto informativo --> </div> </div> </div> </body> </html>

Comentarios
Publicar un comentario