Tablas HTML-CSS
Ejercicio para practicar habilidades de HTML y CSS. Tablas adaptables para todos los dispositivos sin framework.
Podés visitar el ejercicio que desarrollaremos aquí ↩
💻 Ver explicación en video de youtube.
HTML
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
<title>Tablas</title>
</head>
<body>
<header>
<div class="contenido">
<span>Geografía</span>
<h1>Países destacados de <span>África</span></h1>
</div>
</header>
<main>
<section id="tarjeta1">
<div class="encabezado">
<div class="">
<h2>Comparación Internacional</h2>
<p>Según PBI y su influencia demográfica y regional en el continente.</p>
</div>
<span>2026</span>
</div>
<div class="latabla">
<!-- Comienza la tabla -->
<table>
<thead>
<tr>
<th>#</th>
<th>País</th>
<th>Capital</th>
<th>Tipo de Gobierno</th>
<th>Población</th>
<th>Principales Actividades</th>
</tr>
</thead>
<tbody>
<tr>
<td data-label="#">01</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/ng.png" alt="Bandera Nigeria">
<strong>Nigeria</strong>
</div>
</td>
<td data-label="Capital">Abuya</td>
<td data-label="Tipo de gobierno">República Federal Presidencialista</td>
<td data-label="Población">~223 M</td>
<td data-label="Actividades">
Petróleo, agricultura, servicios, telecomunicaciones.
</td>
</tr>
<tr>
<td data-label="#">02</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/eg.png" alt="Bandera Egipto">
<strong>Egipto</strong>
</div>
</td>
<td data-label="Capital">El Cairo</td>
<td data-label="Tipo de gobierno">República Semipresidencialista</td>
<td data-label="Población">~112 M</td>
<td data-label="Actividades">
Turismo, Canal de Suez, agricultura, gas natural.
</td>
</tr>
<tr>
<td data-label="#">03</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/za.png" alt="Bandera Sudáfrica">
<strong>Sudáfrica</strong>
</div>
</td>
<td data-label="Capital">Pretoria / Ciudad del Cabo / Bloemfontein</td>
<td data-label="Tipo de gobierno">República Parlamentaria</td>
<td data-label="Población">~60 M</td>
<td data-label="Actividades">
Minería(oro, platino), finanzas, turismo, manufactura.
</td>
</tr>
<tr>
<td data-label="#">04</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/et.png" alt="Bandera Etiopía">
<strong>Etiopía</strong>
</div>
</td>
<td data-label="Capital">Adís Abeba</td>
<td data-label="Tipo de gobierno">República Federal Parlamentaria</td>
<td data-label="Población">~126 M</td>
<td data-label="Actividades">
Agricultura (café), ganadería, construcción, floricultura.
</td>
</tr>
<tr>
<td data-label="#">05</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/ke.png" alt="Bandera Kenia">
<strong>Kenia</strong>
</div>
</td>
<td data-label="Capital">Nairobi</td>
<td data-label="Tipo de gobierno">República Presidencialista</td>
<td data-label="Población">~55 M</td>
<td data-label="Actividades">
Turismo (safaris), agricultura (té, flores), tecnología.
</td>
</tr>
<tr>
<td data-label="#">06</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/ma.png" alt="Bandera Marruecos">
<strong>Marruecos</strong>
</div>
</td>
<td data-label="Capital">Rabat</td>
<td data-label="Tipo de gobierno">Monarquía Constitucional</td>
<td data-label="Población">~37 M</td>
<td data-label="Actividades">
Turismo, minería (fosfatos), agricultura, automoción.
</td>
</tr>
<tr>
<td data-label="#">07</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/dz.png" alt="Bandera Argelia">
<strong>Argelia</strong>
</div>
</td>
<td data-label="Capital">Argel</td>
<td data-label="Tipo de gobierno">República Semipresidencialista</td>
<td data-label="Población">~45 M</td>
<td data-label="Actividades">
Petróleo, gas natural, minería, agricultura.
</td>
</tr>
<tr>
<td data-label="#">08</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/gh.png" alt="Bandera Gana">
<strong>Gana</strong>
</div>
</td>
<td data-label="Capital">Acra</td>
<td data-label="Tipo de gobierno">República Presidencialista</td>
<td data-label="Población">~34 M</td>
<td data-label="Actividades">
Exportación de cacao, minería de oro, petróleo, servicios.
</td>
</tr>
<tr>
<td data-label="#">09</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/ao.png" alt="Bandera Angola">
<strong>Angola</strong>
</div>
</td>
<td data-label="Capital">Luanda</td>
<td data-label="Tipo de gobierno">República Presidencialista</td>
<td data-label="Población">~36 M</td>
<td data-label="Actividades">
Extracción de petróleo, diamantes, agricultura, construcción.
</td>
</tr>
<tr>
<td data-label="#">10</td>
<td data-label="País">
<div class="pais">
<img src="https://flagcdn.com/w80/tz.png" alt="Bandera Tanzania">
<strong>Tanzania</strong>
</div>
</td>
<td data-label="Capital">Dodoma</td>
<td data-label="Tipo de gobierno">República Presidencialista</td>
<td data-label="Población">~65 M</td>
<td data-label="Actividades">
Turismo (Kilimanjaro, Zanzíbar), agricultura, minería (oro).
</td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="nota">
<strong>Importante</strong>
<p>
El PBI per cápita es un promedio estadístico que no representa
directamente el salario de los habitantes ni la distribución de
la riqueza dentro de un país.
</p>
</section>
<div id="divisor"></div>
<section id="tarjeta2">
<h1>Tabla simple</h1>
<table border="1">
<caption>Países destacados de África</caption>
<thead>
<tr>
<th>#</th>
<th>País</th>
<th>Capital</th>
<th>Población</th>
</tr>
</thead>
<tbody>
<tr>
<td>01</td>
<td>Nigeria</td>
<td>Abuya</td>
<td>223M</td>
</tr>
<tr>
<td>02</td>
<td>Egipto</td>
<td>El Cairo</td>
<td>112M</td>
</tr>
<tr>
<td>03</td>
<td>Sudáfrica</td>
<td>Pretoria / El Cabo / Bloemfontein</td>
<td>60M</td>
</tr>
<tr>
<td>04</td>
<td>Etiopía</td>
<td>Adís Abeba</td>
<td>126M</td>
</tr>
</tbody>
</table>
</section>
</main>
<footer>
<p>Creado por <strong>caterinaweb.net</strong></p>
</footer>
</body>
</html>
CSS
/* Los colores pueden ser cualquiera, en este caso los eligió una diseñadora gráafica. Carecen de importancia en el ejercicio. */
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
font-family: "Poppins", sans-serif;
line-height: 1.5;
}
header{
/* Al no poner un color liso, le da otro aspecto al diseño */
background: linear-gradient(135deg, #111827,#1e293b);
color: white;
padding: 2rem;
}
header .contenido{
/* lo limitamos para pantallas muy grandes */
width: min(1200px, 100%);
/* lo centramos */
margin: auto;
}
/* Para que solo afecte al hijo directo y no a todos los span en su interior */
header .contenido > span{
padding: 6px 12px;
border: 1px solid rgba(255,255,255,0.2);
/* Al poner un valor gigante, hace el efecto de cápsula. */
border-radius: 999px;
font-size: 0.75rem;
font-weight: 700;
color: #67e8f9;
background: rgba(255,255,255,0.06);
}
header .contenido h1{
/* Limita el tamaño en pantallas grandes y hace que baje. */
max-width: 800px;
margin-top: 20px;
/* Empieza con un valor base del 5% del tamaño de la pantalla del dispositivo, se agranda hasta un máximo de 4.5rem o se achica hasta un mínimo de 2.2rem */
/* 1 rem = 16px (si el usuario no lo cambió en su computadora */
font-size: clamp(2.2rem, 5vw, 4.5rem);
line-height: 1.05;
/* Las letras se juntan en un 0.05% de su tamaño inicial */
letter-spacing: -0.05em;
}
header .contenido h1 > span{
color:#22d3ee;
}
main{
/* Cuando ocupa menos de 1200px, al 100% le dejamos un margen interior */
width: min(1200px, calc(100% - 40px));
/* Arriba y abajo deja 50px, en los laterales lo centra. */
margin:50px auto;
}
main section#tarjeta1{
background: white;
border: 1px solid #e2e8f0;
border-radius: 20px;
box-shadow: 0 20px 50px rgba(15,23,42,0.07);
overflow: hidden;
}
main section#tarjeta1 .encabezado{
display: flex;
justify-content: space-between;
align-items: center;
gap:20px;
padding: 28px 30px;
border-bottom: 1px solid #e2e8f0;
}
main section#tarjeta1 .encabezado h2{
font-size: 1.4rem;
}
main section#tarjeta1 .encabezado p{
font-size: 0.9rem;
color: #64748b;
margin-top: 5px;
}
main section#tarjeta1 .encabezado > span{
padding: 8px 14px;
border-radius: 999px;
background-color: #ecfeff;
color: #0891b2;
font-weight: 700;
}
main section#tarjeta1 .latabla{
overflow-x: hidden;
}
/* Comienza la tabla */
main section#tarjeta1 table{
width: 100%;
border-collapse: collapse;
min-width: 950px;
}
main section#tarjeta1 thead{
background: #f8fafc;
}
main section#tarjeta1 thead th{
/* Es lo que le da tamaño a las celdas */
padding: 16px 18px;
text-align: left;
color: #64748b;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.06em;
white-space: nowrap;
}
main section#tarjeta1 tbody td{
padding: 20px 18px;
border-top: 1px solid #eef2f7 ;
vertical-align: middle;
font-size: 0.92rem;
}
main section#tarjeta1 tbody tr{
transition: background 0.2s ease, transform 0.2s ease;
}
main section#tarjeta1 tbody tr:hover{
background: #f8fafc;
cursor: default;
}
main section#tarjeta1 tbody .pais{
display: flex;
align-items: center;
gap:12px;
min-width: 150px;
}
main section#tarjeta1 tbody .pais strong{
white-space: nowrap;
font-size: 1.1rem;
}
main section#tarjeta1 tbody .pais img{
width: 30px;
height: 20px;
object-fit: cover;
border-radius: 4px;
box-shadow: 0 1px 3px rgba(0,0,0,0.2);
display: block;
}
footer{
padding: 35px 20px;
text-align: center;
color: #94a3b8;
font-family: 0.85rem;
}
main section#nota{
margin-top: 25px;
padding: 22px;
border-left: 4px solid #0891b2;
border-radius: 10px;
background: white;
border-top: 1px solid #e2e8f0;
border-right: 1px solid #e2e8f0;
border-bottom: 1px solid #e2e8f0;
}
main section#nota strong{
display: block;
margin-bottom: 5px;
}
main section#nota p{
color: #64748b;
font-size: 0.9rem;
}
/* Parte adicional no filmada */
#divisor{
width: 100%;
height: 2rem;
background: linear-gradient(135deg,#111827,#1e293b);
margin: 6rem 0 2rem;
}
section#tarjeta2{
width: min(1200px, calc(100% - 40px));
padding: 5rem ;
margin: 2rem auto;
}
section#tarjeta2 h1{
margin-bottom:3rem;
width: 100%;
text-align: left;
}
section#tarjeta2 table{
border-collapse:collapse;
overflow: hidden;
border-radius: 0.3rem;
width: 100%;
}
section#tarjeta2 table caption{
font-size: 1.3rem;
margin-bottom: 20px;
font-weight: 700;
}
section#tarjeta2 th, section#tarjeta2 td{
padding: 10px 15px;
}
section#tarjeta2 thead{
background-color: black;
color: white;
}
section#tarjeta2 tr:nth-child(even){
background-color: #e2e8f0;
}
section#tarjeta2 tbody tr:hover{
background-color: #64748b;
color: #f3f3f3;
cursor: default;
}
section#tarjeta2 tbody td:nth-child(4), section#tarjeta2 tbody td:nth-child(1){
text-align: center;
}
/* Celulares */
@media (max-width:1000px) {
header{
padding: 1rem;
}
main{
width: min(100% - 24px, 600px);
margin: 30px auto;
}
main section#tarjeta1{
border-radius: 16px;
}
main section#tarjeta1 .encabezado{
padding: 22px;
align-items: flex-start;
flex-direction: column;
}
main section#tarjeta1 .latabla{
overflow: visible;
}
/* Comienzan los cambios en la tabla */
main section#tarjeta1 table{
min-width: 0;
}
main section#tarjeta1 thead{
display: none;
}
/* transformamos la tabla en tarjetas */
main section#tarjeta1 tbody, main section#tarjeta1 tr, main section#tarjeta1 td{
display: block;
width: 100%;
}
main section#tarjeta1 tr{
margin: 0;
padding: 20px;
}
main section#tarjeta1 tr:not(:last-child){
border-bottom: 1px solid #e2e8f0;
}
main section#tarjeta1 tbody td{
display: flex;
justify-content: space-between;
align-items: center;
border: none;
text-align: right;
font-size: 0.9rem;
}
/* Antes de renderizar el dato, renderizar esto */
main section#tarjeta1 tbody td::before{
content: attr(data-label);
color: #64748b;
font-size: 0.75rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
text-align: left;
}
main section#tarjeta1 tbody td:first-child{
display: none;
}
main section#tarjeta1 tbody td:nth-child(2):before{
display: none;
}
main section#tarjeta1 tbody td:nth-child(2){
display: block;
padding-bottom: 15px;
margin-bottom: 5px;
border-bottom: 1px solid #f1f5f9;
text-align: left;
}
main section#tarjeta1 tbody td:nth-child(3){
padding-top: 14px;
}
main section#tarjeta1 tbody tr:hover{
background-color: white;
}
section#tarjeta2 table {
padding: 2rem;
display: block;
border: none;
overflow-x: auto;
white-space: nowrap;
}
section#tarjeta2{
padding: 1rem ;
margin: 1rem auto;
}
section#tarjeta2 h1{
font-size: 1.4rem;
margin-bottom:1rem;
}
}
/* celulares pequeños */
@media (max-width:420px) {
header h1{
font-size: 2.4rem;
}
main{
width: calc(100% - 16px);
}
main section#tarjeta1 .encabezado{
padding: 18px;
}
main section#tarjeta1 tbody tr{
padding: 17px;
}
main section#tarjeta1 tbody td{
font-size: 0.85rem;
}
}
Recursos
Íconos y fuentes: https://fonts.google.com