Este tutorial adapta pedagógicamente el Día 42. Las secciones 📝 Ejercicio original del curso provienen de los archivos del curso (transcripciones de las lecciones 316 a 321). Los archivos de inicio se descargan desde Udemy y no están en la carpeta, así que los fragmentos de los ejercicios originales son reconstrucciones a partir de lo que describe la profesora. Los retos 🟢🟡🟠🔴, el proyecto extra y el proyecto integrador son creaciones de esta adaptación. Las correcciones al material original aparecen como 🛠️ Nota técnica.
Nota sobre las verificaciones: el 26 de septiembre de 2026 se comprobó con Google Chrome 153 (modo headless) el comportamiento de los ejemplos marcados como "verificado".
Tabla de contenidos
- Antes de empezar: de etiquetas sueltas a documentos completos
- La plantilla HTML (boilerplate)
- Listas:
ul,olyli - Anidamiento e indentación
- Atributos y el elemento ancla:
a - El elemento imagen:
img - 🚀 Proyecto del día: invitación de cumpleaños
- 🌟 Proyecto extra: la Feria de Emprendimiento del colegio
- 🏆 Proyecto integrador del bloque web (Días 41 a 44) — Etapa 2
- 🧩 Comprueba lo aprendido
- 🤖 Programar con apoyo de IA
- 🛠️ Correcciones técnicas al material original
- 📋 Matriz de trazabilidad
- 📦 Evidencias de aprendizaje del Día 42
0. Antes de empezar: de etiquetas sueltas a documentos completos
(Adaptación pedagógica.)
Ayer escribimos etiquetas "sueltas" (h1, p, hr, br). Funcionaban porque el navegador es tolerante, pero una página profesional tiene una estructura completa. Hoy aprenderemos:
- La plantilla que debe tener todo archivo HTML.
- Listas con viñetas y numeradas, y listas dentro de listas.
- Atributos: información extra que se escribe dentro de una etiqueta.
- Enlaces e imágenes, lo que convierte un documento en una página web de verdad.
Conexión con Python: el anidamiento de HTML se parece a las estructuras anidadas que ya conoces (listas dentro de listas, diccionarios dentro de diccionarios, Día 9), y la indentación cumple el mismo papel que en Python: mostrar qué está dentro de qué. La gran diferencia es que en HTML la indentación no es obligatoria (el navegador la ignora), mientras que en Python un error de indentación detiene el programa.
Prerequisito: Día 41 (etiquetas, elementos, encabezados, párrafos y elementos vacíos).
1. La plantilla HTML (boilerplate)
(Fuente: 316 - HTML Boilerplate.md)
🎯 Objetivo de aprendizaje
Escribir de memoria la plantilla básica de un documento HTML5 y explicar la función de cada línea.
🧠 ¿Qué aprenderemos?
<!DOCTYPE html>, html y el atributo lang, head, meta charset, title, meta viewport, body, anidamiento e indentación, y el atajo ! de VS Code.
📖 Explicación conceptual
Así como una carta tiene partes fijas (dirección, saludo, cuerpo, despedida y firma), un archivo HTML tiene una estructura fija llamada boilerplate:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mi sitio web</title>
</head>
<body>
<h1>Hola</h1>
</body>
</html>| Línea | Qué hace |
|---|---|
<!DOCTYPE html> |
Declaración del tipo de documento: indica al navegador que el archivo está escrito en HTML5. Va siempre en la primera línea |
<html lang="es"> |
Elemento raíz: todo lo demás va dentro de él. lang indica el idioma del contenido; los lectores de pantalla lo usan para pronunciar bien ("es" español, "en" inglés) |
<head> |
Información sobre la página que el usuario no ve como contenido |
<meta charset="UTF-8" /> |
Codificación de caracteres. Con UTF-8 se ven bien tildes, la ñ, emojis y símbolos como × o ÷ |
<meta name="viewport" ...> |
Cómo mostrar la página según el tamaño de la pantalla (importante en celulares) |
<title> |
El texto que aparece en la pestaña del navegador |
<body> |
Todo el contenido visible: títulos, párrafos, imágenes, enlaces |
La analogía de la hamburguesa (del curso): <html> y </html> son el pan de arriba y el de abajo; head y body son capas intermedias; el contenido del body es "la carne". Todo lo que se abre dentro de algo debe cerrarse dentro de ese mismo algo.
Indentación: cada nivel de anidamiento se desplaza (por ejemplo, dos espacios) para ver de un vistazo qué está dentro de qué. Un elemento corto puede ir en una sola línea (<title>Mi sitio</title>); sigue teniendo apertura y cierre.
Atajo de VS Code: en un archivo que termine en .html, escribe ! y presiona Enter: VS Code (con su herramienta Emmet) inserta la plantilla. La profesora recomienda escribirla a mano las primeras veces para aprenderla.
🛠️ Nota técnica: en el video, el atajo
!inserta también<meta http-equiv="X-UA-Compatible" content="IE=edge">. Esa línea solo servía para Internet Explorer, que ya no tiene soporte. La profesora recomienda borrarla, y las versiones recientes de VS Code ya no la incluyen. Además, el atajo ponelang="en": si tu página está en español, cámbialo alang="es".
💡 Ver el código de cualquier página: clic derecho → Ver código fuente de la página. Verás el
DOCTYPE, elhtml, elheadcon sucharsety eltitle.
⚠️ Errores frecuentes
| Error | Qué ocurre | Cómo solucionarlo |
|---|---|---|
Poner contenido visible dentro de head |
El navegador lo mueve al body o lo oculta; el código queda confuso |
Todo lo visible va en body |
Olvidar <meta charset="UTF-8" /> |
Tildes y ñ pueden verse como ó o ñ en algunos servidores |
Inclúyelo siempre como primera línea del head |
Dejar lang="en" en una página en español |
El lector de pantalla pronuncia el español con acento inglés | lang="es" |
Escribir ! en un archivo .txt |
El atajo no aparece | Guarda primero el archivo como .html |
📝 Ejercicio original del curso: construye tu propia hamburguesa
- Enunciado: escribe en VS Code una "hamburguesa" en código HTML, inventando elementos como
<bun>,<tomato>o<lettuce>, cada uno con etiqueta de apertura y de cierre, y agrega atributos (nombre, signo igual y valor). - Objetivo: practicar anidamiento, indentación y la sintaxis de los atributos.
- Condición: mantener la indentación correcta; todo lo que se abre, se cierra.
Ejemplo del formato que muestra la profesora (el resto lo inventas tú):
<bun type="sesame">
<lettuce fresh="true"></lettuce>
<!-- ...tus capas... -->
</bun>🛠️ Nota técnica: los elementos inventados como
<bun>no son HTML válido. El navegador no da error: los trata como elementos desconocidos sin significado. Sirven para practicar la sintaxis del anidamiento, pero no se usan en páginas reales. (Existen los custom elements de JavaScript, pero su nombre debe llevar un guion, como<mi-hamburguesa>, y se estudian mucho más adelante.)
🔍 Antes de programar
- ¿Qué capa es "la raíz" de tu hamburguesa, la que contiene a todas las demás?
- ¿Qué capas van dentro de otras y cuáles están al mismo nivel?
- ¿Qué información extra (atributo) tiene sentido para cada ingrediente?
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: escribe de memoria la plantilla completa, sin usar el atajo
!. Compárala con la de esta guía y anota qué olvidaste. - 🟡 Reto 2: cambia
langa"en"en una página escrita en español y escúchala con el lector de pantalla (Narrador:Ctrl + Win + Enter). Describe qué cambia. - 🟠 Reto 3 — Depuración: esta plantilla tiene cuatro errores. Encuéntralos:
<html lang="es">
<!DOCTYPE html>
<head>
<title>Club de lectura</title>
<h1>Bienvenidos</h1>
</head>
<body>
<p>Nos reunimos los martes.</p>
</html>
</body>- 🔴 Reto 4 — Pensamiento computacional: representa el horario semanal de tu curso como una hamburguesa HTML inventada (
<semana>,<dia nombre="lunes">,<clase hora="7:00">…). Luego responde: ¿cómo representarías la misma información en Python? Escribe la estructura equivalente con listas y diccionarios y compara ambas.
2. Listas: ul, ol y li
(Fuente: 317 - The List Element.md)
🎯 Objetivo de aprendizaje
Elegir entre lista desordenada y lista ordenada según el significado del contenido.
📖 Explicación conceptual
Internet está lleno de listas: los artículos de "10 cosas que…", la lista de "Los diez más buscados del FBI" (que, como muestra la profesora con Inspeccionar, está hecha con una lista)…
| Elemento | Nombre | Se ve como | Úsalo cuando… |
|---|---|---|---|
<ul> |
Unordered list (lista desordenada) | Viñetas • | El orden no importa (lista de mercado) |
<ol> |
Ordered list (lista ordenada) | Números 1, 2, 3 | El orden sí importa (pasos de una receta) |
<li> |
List item (elemento de lista) | Cada ítem | Siempre, dentro de ul u ol |
<ul>
<li>Leche</li>
<li>Huevos</li>
<li>Pan</li>
</ul>ul y ol no llevan texto directamente: su contenido son elementos li. En una ol, el número de cada ítem depende de su posición.
Estilo de escritura: la profesora prefiere cada <li> en una sola línea para contar los ítems de un vistazo. Si el texto es largo, VS Code puede pasar el cierre a la siguiente línea. Las dos formas son válidas.
🔎 Ejemplo explicado
<h2>Para la salida pedagógica</h2>
<ul>
<li>Gorra</li>
<li>Bloqueador solar</li>
<li>Agua</li>
</ul>
<h2>Protocolo en caso de sismo</h2>
<ol>
<li>Mantén la calma.</li>
<li>Aléjate de ventanas.</li>
<li>Sigue la ruta de evacuación.</li>
</ol>¿Por qué dos tipos? Da igual si empacas primero la gorra o el agua, pero en un protocolo de sismo el orden salva vidas.
⚠️ Errores frecuentes
| Error | Qué ocurre | Solución |
|---|---|---|
Escribir texto directamente dentro de <ul> sin <li> |
HTML inválido; el texto aparece sin viñeta | Cada ítem va en un <li> |
Escribir los números a mano dentro de una ol (<li>1. Mezclar</li>) |
Aparecen dos números: "1. 1. Mezclar" | Deja que ol numere |
Usar ol para algo sin orden |
Comunica un orden que no existe | Pregúntate: ¿cambia el significado si reordeno? |
📝 Ejercicio original del curso: receta de rollos de canela (3.0 List Elements)
- Enunciado: el
index.htmltrae el texto de una receta de rollos de canela. Hay que convertirlo en una página con encabezados y listas. - Resultado esperado (según el video):
- Un
h1para el nombre de la receta. h2para "Ingredientes" e "Instrucciones".h3para las subsecciones de ingredientes (la masa y el relleno). El nivel exacto de los encabezados es libre; lo que importa son las listas.- Una
ulcon los ingredientes de la masa y otraulcon los tres ingredientes del relleno. - Una
olcon los pasos de preparación.
- Un
- Restricción: el texto ya está escrito; solo se agregan etiquetas.
🔍 Antes de programar
- ¿Importa el orden en que se listan los ingredientes? ¿Y el de los pasos?
- ¿Cuántas listas hay en total? ¿De qué tipo es cada una?
- Si alguien leyera solo los encabezados, ¿entendería cómo está organizada la receta?
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: escribe la receta de un plato típico de tu región (arepas, sancocho, empanadas…) con ingredientes en
uly pasos enol. - 🟡 Reto 2: consulta en MDN el atributo
reversedde<ol>y úsalo para un "conteo regresivo" de las 5 mejores canciones del año. - 🟠 Reto 3: convierte los útiles escolares pedidos para grado décimo en una lista agrupada por asignatura. ¿Cuál es la forma más clara sin usar todavía listas anidadas?
- 🔴 Reto 4: escribe un programa en Python que reciba una lista de Python (
["Leche", "Huevos", "Pan"]) y un valor booleanoordenada, y genere el código HTML de la lista (<ol>o<ul>con sus<li>). Pruébalo con dos listas distintas.
3. Anidamiento e indentación
(Fuente: 318 - Nesting and Indentation.md)
🎯 Objetivo de aprendizaje
Crear listas anidadas correctamente y usar la indentación para encontrar errores de cierre.
📖 Explicación conceptual
Se puede poner una lista dentro de un elemento de lista. La regla clave del curso:
Cuando anidas una lista, el
</li>del elemento "padre" no va justo después de su texto: va después de cerrar la lista anidada.
<ul>
<li>A</li>
<li>
B
<ol>
<li>B1</li>
<li>B2</li>
</ol>
</li> <!-- aquí se cierra el li de "B" -->
<li>C</li>
</ul>¿Por qué indentar? Mira este mismo código sin sangría:
<ul><li>A</li><li>B<ol><li>B1</li><li>B2</li></ol></li><li>C</li></ul>Funciona igual, pero para entenderlo hay que leer cada etiqueta. Con indentación, la estructura se ve a simple vista. "Cuando escribes código, piensa en cómo lo van a leer otras personas" (idea de la profesora).
VS Code te ayuda: al guardar (Ctrl + S), el formateador vuelve a indentar todo, y unas líneas verticales guía conectan cada apertura con su cierre.
🔎 Ejemplo explicado: diagnosticar un cierre faltante (del curso)
La profesora muestra que, si falta un </ol>, la letra C aparece dentro de la lista numerada en vez de en la lista principal. Siguiendo las líneas guía de VS Code descubre que un <ol> "se empareja" con un </li>: señal de que falta una etiqueta de cierre. A esto se le llama depuración.
⚠️ Errores frecuentes
| Error | Síntoma | Solución |
|---|---|---|
Cerrar el </li> del padre antes de la lista anidada |
La sublista queda "suelta" dentro de la ul, fuera de cualquier li: HTML inválido, con sangría rara |
Cierra el li después de la sublista |
| Olvidar el cierre de una sublista | Los ítems siguientes quedan dentro de la sublista (el síntoma de la "C" del curso) | Sigue las líneas guía y cuenta aperturas y cierres |
Cerrar un <ol> con </ul> |
Según lo que haya alrededor, el navegador ignora ese cierre (y la lista sigue abierta) o cierra una lista distinta a la esperada | Cada cierre debe coincidir con su apertura |
📝 Ejercicio original del curso: la lista anidada compleja
- Enunciado: reproducir exactamente la estructura de la imagen objetivo.
- Estructura esperada (según el video):
- Lista desordenada: A, B, C.
- Dentro de B: lista ordenada B1, B2, B3.
- Dentro de B2: lista desordenada B2a, B2b, B2c.
- Dentro de B2a: lista desordenada B2aa, B2ab.
- Dentro de B3: lista ordenada B31, B32.
- Consejo del curso: los nombres (B2a, B2ab…) indican dónde va cada ítem. Usa la vista previa mientras escribes.
- Palabras de la profesora: "No vas a aprender a programar solo viéndome programar". Inténtalo antes de ver cualquier solución.
🔍 Antes de programar
- Dibuja la estructura como un árbol en papel. ¿Cuántos niveles de profundidad tiene?
- ¿Cuántas listas (
ul+ol) hay en total? ¿Cuántosli? - Para cada
lique contiene una sublista, ¿dónde irá su</li>?
Pista para comprobar
Hay 5 listas en total (3 ul y 2 ol) y 13 elementos li. Si tus números no coinciden, revisa tu árbol.
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: crea el plan de estudios del área de Tecnología: periodos (lista ordenada) y, dentro de cada uno, los temas (lista desordenada).
- 🟡 Reto 2: representa la organización del gobierno escolar (rector, consejo directivo, consejo académico, personero, consejo estudiantil con sus representantes) con al menos tres niveles de anidamiento.
- 🟠 Reto 3 — Depuración: este código muestra "Postres" dentro de "Bebidas". Encuentra el error sin abrir el navegador y corrígelo:
<ul>
<li>Bebidas
<ul>
<li>Jugo</li>
<li>Agua</li>
</li>
<li>Postres</li>
</ul>- 🔴 Reto 4 — Pensamiento computacional: escribe en Python la estructura del ejercicio original como listas anidadas (por ejemplo,
["A", ["B", [...]], "C"]) y una función recursiva que imprima cada ítem con una sangría proporcional a su profundidad. ¿Qué tienen en común la recursión y el anidamiento de HTML?
4. Atributos y el elemento ancla: a
(Fuente: 319 - Anchor Elements.md)
🎯 Objetivo de aprendizaje
Crear enlaces con <a href="..."> y distinguir entre atributos específicos y globales.
📖 Explicación conceptual
Atributo: información adicional sobre un elemento. Se escribe en la etiqueta de apertura, después del nombre y separado por un espacio:
<a href="https://www.mintic.gov.co">Ministerio TIC</a>
<!-- nombre de la etiqueta · nombre del atributo = "valor" · contenido -->- Puede haber varios atributos, separados por espacios.
- El valor va entre comillas dobles porque es un texto. Así se distingue de las palabras reservadas del lenguaje (
a,li,href…).
El elemento ancla (a): crea hipervínculos. Sin el atributo href, el texto aparece pero no es un enlace activo. Con href, el navegador lo muestra en azul y subrayado, y al hacer clic lleva a la dirección indicada.
| Tipo de atributo | Ejemplos | ¿Dónde se usa? |
|---|---|---|
| Específico | href (en a), src y alt (en img), start (en ol) |
Solo en ciertos elementos |
| Global | draggable, id, class, style, lang |
En cualquier elemento |
La documentación de MDN lista los atributos de cada elemento. Algunos están marcados como obsoletos (deprecated): no se deben usar en HTML5.
🛠️ Nota técnica: el video demuestra el atributo global
draggable="true"sobre un enlace y dice que, sin él, el enlace no se puede arrastrar. En realidad, en Chrome los enlaces conhrefy las imágenes ya son arrastrables por defecto (verificado:draggablevaletruesin escribir nada). El atributo sí cambia el comportamiento en elementos que no lo son, como un<p>o un<a>sinhref. Prueba<p draggable="true">Arrástrame</p>.
🔎 Ejemplo explicado
<ol>
<li><a href="https://www.colombiaaprende.edu.co">Colombia Aprende</a></li>
<li><a href="https://developer.mozilla.org/es/">MDN en español</a></li>
</ol>Hay tres capas de anidamiento: a dentro de li, dentro de ol. El número de la lista no es azul, porque pertenece al li, no al enlace.
⚠️ Errores frecuentes
| Error | Qué ocurre | Solución |
|---|---|---|
<a>Google</a> sin href |
Texto normal, no se puede hacer clic | Agrega href |
<a href="www.google.com"> |
El navegador lo interpreta como un archivo local llamado www.google.com y el enlace falla |
Escribe la URL completa: https://www.google.com |
Poner el atributo en el cierre: </a href="..."> |
No funciona | Los atributos van solo en la etiqueta de apertura |
| Olvidar las comillas o una de ellas | El atributo se "come" el resto de la etiqueta | Revisa que cada valor tenga comillas de apertura y cierre |
| Texto del enlace "clic aquí" | El lector de pantalla puede listar los enlaces fuera de contexto: diez veces "clic aquí" no dice nada | El texto del enlace debe describir el destino |
📝 Ejercicio original del curso: mis 5 sitios web favoritos
- Enunciado: el
h1ya está escrito. Crea una lista ordenada con cinco enlaces a tus sitios web favoritos. - Resultado esperado: números del 1 al 5 (no azules) y el nombre de cada sitio como enlace que funcione. (La profesora usa, por ejemplo, Product Hunt.)
- Reto extra del curso: consulta en MDN los atributos de
<ol>y usastartpara que la lista empiece en 5 (y termine en 9).
🔍 Antes de programar
- ¿En qué orden se anidan
ol,liya? - ¿Qué parte del enlace ve el usuario y qué parte usa el navegador?
- Para el reto extra: ¿en qué etiqueta va el atributo
start, enolo enli?
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: crea una lista de recursos para estudiar (diccionario de la RAE, calculadora en línea, biblioteca digital) con enlaces cuyo texto describa el destino.
- 🟡 Reto 2: investiga en MDN el atributo
target="_blank"y úsalo para abrir un enlace en una pestaña nueva. Averigua qué se recomienda escribir en el atributorelen ese caso y por qué. - 🟠 Reto 3: investiga cómo crear un enlace que abra el correo (
mailto:) y otro que marque un teléfono (tel:). Úsalos en una tarjeta de contacto de la secretaría del colegio (con datos ficticios). - 🔴 Reto 4 — Pensamiento computacional: crea dos archivos,
index.htmlyhorario.html, en la misma carpeta, enlazados entre sí (pista:href="horario.html"). ¿Por qué aquí no hace falta escribirhttps://? Esta idea de rutas relativas se profundiza en el Día 43.
5. El elemento imagen: img
(Fuente: 320 - Image Elements.md)
🎯 Objetivo de aprendizaje
Insertar imágenes con src y escribir textos alternativos (alt) útiles.
📖 Explicación conceptual
<img src="https://picsum.photos/200" alt="Paisaje aleatorio de ejemplo" />imges un elemento vacío (comohrybr): una imagen no tiene "contenido de texto", su contenido es el archivo que indicasrc.src(source, fuente): la ubicación de la imagen.alt(texto alternativo): lo que el lector de pantalla lee a una persona ciega o con baja visión. También aparece si la imagen no carga. La profesora lo muestra con la extensión Silktide en el sitio de la BBC: el lector anuncia "Delfín saltando del mar — Imagen", y ese texto está en elalt.picsum.photos: "el Lorem ipsum de las fotos".https://picsum.photos/200entrega una imagen aleatoria de 200 × 200 píxeles.- Los GIF animados funcionan igual que JPG o PNG: se ponen en
srcy se animan solos. altvacío (alt=""): para imágenes decorativas que no aportan información. Así el lector de pantalla las omite. Vacío no es lo mismo que ausente: si falta el atributo, algunos lectores leen el nombre del archivo.
⚠️ Errores frecuentes
| Error | Qué ocurre | Solución |
|---|---|---|
<img src="foto.jpg"></img> |
img no tiene cierre |
<img src="foto.jpg" alt="..." /> |
Ruta equivocada (src="Foto.JPG" si el archivo es foto.jpg) |
Ícono de imagen rota. En servidores reales las mayúsculas importan | Copia el nombre exacto del archivo |
alt="imagen" o alt="foto123.jpg" |
No describe nada útil | Describe lo que muestra y para qué está: alt="Estudiantes plantando árboles en la huerta" |
| Usar imágenes de Internet sin permiso | Problemas de derechos de autor | Usa imágenes propias, de bancos libres o con licencia Creative Commons, y cita la fuente |
📝 Ejercicio original del curso: ¿gatos o perros?
- Enunciado: el
index.htmltrae dos URL de ejemplo (un perro y un gato). Crea unh1que diga "Me gustan los gatos" o "Me gustan los perros" y, debajo, unimgcon la URL correspondiente. - Detalles del video: el perro es un GIF animado (un cachorro cavando en la arena); el gato es un JPG estático.
- Parte final: agrega un
altque describa la imagen. Visualmente no cambia nada, pero la página se vuelve accesible.
🔍 Antes de programar
- ¿Qué atributos necesita la imagen como mínimo?
- ¿Cómo describirías la imagen a alguien por teléfono? Ese es tu
alt.
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: descarga una imagen libre, guárdala en una carpeta
imagenes/junto a tuindex.htmly muéstrala con una ruta local (src="imagenes/huerta.jpg"). - 🟡 Reto 2: convierte una imagen en enlace: pon el
<img>dentro de un<a>. ¿Qué debería decir elalten ese caso: lo que muestra la imagen o a dónde lleva? - 🟠 Reto 3 — Evaluación de accesibilidad: escribe el
altde estas cinco imágenes y justifica cuál debería teneralt="": (a) el logo del colegio en el encabezado; (b) una línea decorativa de flores; (c) un gráfico con los resultados de las elecciones del personero; (d) la foto del equipo campeón; (e) un ícono de lupa junto a la palabra "Buscar". - 🔴 Reto 4: investiga en MDN los atributos
widthyheightdeimg. ¿Por qué se recomienda indicarlos aunque luego se cambie el tamaño con CSS? (Pista: lo que pasa con el resto de la página mientras la imagen carga.)
6. 🚀 Proyecto del día: invitación de cumpleaños
(Fuente: 321 - Day 42 Project - Birthday Invite Website.md)
Problema
"Las invitaciones de papel y las de WhatsApp son para quien no sabe crear sitios web", bromea la profesora. Vas a crear una página de invitación para tu próxima celebración.
Contexto
El resultado tendrá un aspecto "retro de los 90", porque aún no sabemos dar estilo (eso llega mañana con CSS). La página debe informar de qué se trata, cuándo es, qué llevar y dónde es.
Objetivo
Combinar en una sola página todo lo aprendido: plantilla, encabezados, listas, enlaces e imágenes.
Requisitos funcionales (originales del curso)
El curso lo plantea como proyecto, no como ejercicio evaluado: "no hay nada bueno o malo". Como mínimo debe tener:
- Una imagen.
- Una lista.
- Un enlace (ancla).
El código de inicio trae una URL de imagen de ejemplo y un enlace de Google Maps de ejemplo (con una "sorpresa": un lugar de Tokio lleno de palomas).
Solución de la profesora (resumen del video): h1 "¡Es mi cumpleaños!"; h2/h3 para la fecha, "qué llevar" y "dónde"; una imagen con src y alt; una ul con lo que hay que llevar; y un <a href="..."> al mapa.
Restricciones técnicas
- Plantilla HTML completa con
lang="es"ycharsetUTF-8. - Solo HTML (nada de CSS todavía).
- Toda imagen con
altdescriptivo.
Planificación
- Comprender: ¿qué necesita saber un invitado?
- Entradas: motivo, fecha, hora, lugar, qué llevar, una imagen.
- Proceso: decidir qué elemento HTML representa cada dato.
- Salida: una página clara que se entienda en 10 segundos.
- Dividir: plantilla / encabezado / imagen / fecha / lista / ubicación.
- Diseñar en papel → 7. Implementar → 8. Probar → 9. Corregir → 10. Mejorar.
Construcción paso a paso
- Versión 1 — Plantilla:
!o escrita a mano. Cambia eltitley ellang. - Versión 2 — Encabezados: el
h1y losh2de cada sección, sin contenido. - Versión 3 — Contenido: la fecha en un párrafo, la imagen con su
alt. - Versión 4 — Lista: "Qué llevar" en una
ul. - Versión final — Ubicación: enlace al mapa con un texto descriptivo ("Ver la ubicación en Google Maps", no "clic aquí").
Pruebas
| Prueba | Resultado esperado |
|---|---|
| Hacer clic en el enlace | Abre el mapa correcto |
| Desconectar Internet y recargar | La imagen no carga y aparece el texto alt |
| Leer la página con el Narrador | Se entiende la invitación sin ver la pantalla |
| Revisar el título de la pestaña | Muestra tu title, no "Document" |
Validar en validator.w3.org (pestaña Validate by Direct Input) |
Sin errores |
🧪 Prueba y depuración
Encuentra los cinco problemas de esta invitación (cuatro son errores; uno no rompe la página, porque el navegador cierra ciertos elementos solo, pero es mala práctica y hace el código inconsistente):
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<title>Fiesta de Sofía</title>
</head>
<body>
<h1>¡Cumpleaños de Sofía!</h1>
<img href="https://picsum.photos/300" />
<h2>Qué llevar</h2>
<ol>
<li>Traje de baño
<li>Toalla</li>
</ul>
<a>Ver ubicación</a>
</body>
</html>⭐ Extensión del proyecto
- Agrega un cronograma de la fiesta en una
ol(llegada, juegos, torta…). - Agrega un enlace
mailto:para confirmar asistencia. - Crea una segunda página,
galeria.html, con fotos de la celebración anterior, y enlaza ambas páginas.
7. 🌟 Proyecto extra: la Feria de Emprendimiento del colegio
(Proyecto creado para esta adaptación; no existe en el curso original.)
Situación
El colegio organiza una Feria de Emprendimiento con puestos de estudiantes. Necesitan una página informativa para compartir con las familias.
Requisitos
- Plantilla completa y válida.
- Una presentación de la feria (fecha, lugar, objetivo).
- Una agenda del día (lista ordenada).
- Los emprendimientos agrupados por categoría (alimentos, artesanías, tecnología…) en una lista anidada: categoría → emprendimiento → datos (curso, qué venden).
- Al menos dos imágenes con
altadecuado (una puede ser decorativa, conalt=""). - Al menos tres enlaces: la ubicación del colegio en un mapa, una página interna (
reglamento.html) y un recurso externo (por ejemplo, información sobre emprendimiento juvenil de una entidad oficial).
Decisiones que debes tomar (y justificar)
- ¿Qué tipo de lista usas en cada caso y por qué?
- ¿Qué imagen es informativa y cuál decorativa?
- ¿Cuántos niveles de anidamiento son necesarios sin volver la página confusa?
Casos de prueba
- El validador W3C no reporta errores.
- Todos los enlaces funcionan, incluido el enlace a
reglamento.html. - Leyendo solo la estructura (encabezados y listas), un familiar entiende la organización de la feria.
8. 🏆 Proyecto integrador del bloque web (Días 41 a 44) — Etapa 2
(Proyecto creado para esta adaptación. La situación problema, la pregunta orientadora y la etapa 1 están en el tutorial del Día 41.)
Recordatorio: estás construyendo el sitio web de un grupo o proyecto del colegio.
Etapa 2 (hoy): un documento HTML completo
- Envuelve tu
index.htmlde la etapa 1 en la plantilla completa (lang="es",charset,viewport, untitledescriptivo). - Convierte en listas la información que lo permita (actividades, logros, requisitos para unirse). Usa al menos una lista anidada.
- Agrega al menos dos imágenes con
altbien escrito (preferiblemente fotos propias o con licencia libre, en una carpetaimagenes/). - Crea una segunda página,
unete.html, con los pasos para unirse (lista ordenada), y enlaza ambas páginas en los dos sentidos. - Agrega un enlace externo relacionado con el tema del grupo.
- Entregable de la etapa: carpeta del proyecto con
index.html,unete.html,imagenes/y una captura del validador W3C sin errores.
9. 🧩 Comprueba lo aprendido
Conceptuales
- ¿Qué pasa si falta
<!DOCTYPE html>? ¿Y si falta<meta charset="UTF-8" />? - ¿Cuál es la diferencia entre
headybody? - ¿Cuándo usarías
uly cuándool? Da un ejemplo de cada una tomado del colegio. - ¿Qué es un atributo? ¿En qué se diferencian los atributos específicos de los globales?
- ¿Para qué sirve
alt? ¿Cuándo debe estar vacío?
Análisis de código
Explica qué muestra este código y cuántos niveles de anidamiento tiene:
<ol start="3">
<li>Revisar la tarea</li>
<li>Resolver dudas
<ul>
<li>Matemáticas</li>
<li>Física</li>
</ul>
</li>
</ol>Predicción
¿Qué número tendrá "Resolver dudas"? ¿Qué símbolo tendrán "Matemáticas" y "Física"? Compruébalo en el navegador.
Depuración
<ul>
<li><a href="https://www.sena.edu.co">SENA</li></a>
<li><img src="logo.png"></img></li>
</ul>Encuentra tres problemas (uno de anidamiento, uno de sintaxis de un elemento vacío y uno de accesibilidad).
Modificación
Toma tu lista de "5 sitios favoritos" y haz que cada sitio tenga debajo una sublista con dos razones por las que te gusta.
Creación
Crea la página "Ruta del bus escolar": una lista ordenada de paradas; en cada parada, una sublista con la hora de paso; un enlace a un mapa, y una imagen del bus con su alt.
10. 🤖 Programar con apoyo de IA
Recuerda el ciclo: formula el problema → inténtalo tú → consulta a la IA → lee y entiende → prueba → compara con MDN → modifica → explica con tus palabras.
Actividad 1 — Comprobar una afirmación del curso con la IA y con el navegador. Pregúntale a una IA: "¿Un enlace <a href> se puede arrastrar si no tiene el atributo draggable?". Luego compruébalo tú: crea un enlace sin draggable e intenta arrastrarlo a la barra de direcciones. ¿Quién acertó: la IA, el video o ninguno? ¿Qué dice MDN sobre el valor por defecto de draggable?
Actividad 2 — Revisar el alt generado. Pide a una IA que escriba el alt de una foto de tu colegio describiéndosela. Evalúa la respuesta: ¿describe lo importante?, ¿es demasiado larga?, ¿empieza con "Imagen de…" (algo innecesario, porque el lector ya anuncia que es una imagen)? Mejórala.
Actividad 3 — Listas anidadas. Pide a una IA el código del ejercicio de la lista anidada compleja (sección 3) describiéndole la estructura. Antes de aceptarlo, cuenta las listas y los li (deben ser 5 y 13) y revisa dónde puso cada </li>. Si hay diferencias, explica cuál es el error.
11. 🛠️ Correcciones técnicas al material original
| Archivo | Afirmación o comportamiento del curso | Observación | Tratamiento |
|---|---|---|---|
316 |
El atajo ! inserta X-UA-Compatible |
Solo servía para Internet Explorer (sin soporte). La profesora recomienda borrarlo; las versiones recientes de VS Code ya no lo incluyen | Nota técnica de la sección 1 |
316 |
El atajo pone lang="en" |
Para páginas en español debe ser lang="es" |
Nota técnica de la sección 1 |
316 |
Hamburguesa con elementos inventados (<bun>) |
No son HTML válido; el navegador los trata como desconocidos. Válido solo como práctica de sintaxis | Nota técnica de la sección 1 |
319 |
Sin draggable="true", un enlace no se puede arrastrar |
Los enlaces con href y las imágenes son arrastrables por defecto en Chrome 153 (verificado) |
Nota técnica de la sección 4; Actividad 1 de IA |
319 |
Nombre del atributo start en la narración ("inicio") |
La transcripción traduce el nombre, pero en el código es start; los nombres de atributos no se traducen |
Sección 4 |
320 |
"Etiqueta alt" | alt es un atributo, no una etiqueta |
Sección 5 |
12. 📋 Matriz de trazabilidad
| Contenido original | Archivo de origen | Concepto desarrollado | Ejercicio original | Reto adicional | Proyecto relacionado |
|---|---|---|---|---|---|
Plantilla: DOCTYPE, html y lang, head, meta charset, title, body, viewport, X-UA-Compatible, atajo !, analogía de la hamburguesa, indentación |
316 |
Sección 1 | Construye tu propia hamburguesa | Retos 1–4 de la sección 1 | Secciones 6, 7 y 8 |
ul, ol, li, sitio del FBI, estilo de una línea por li |
317 |
Sección 2 | 3.0 Receta de rollos de canela | Retos 1–4 de la sección 2 | Secciones 6, 7 y 8 |
Listas anidadas, cierre del li padre, indentación, líneas guía de VS Code, depuración de un </ol> faltante |
318 |
Sección 3 | Lista anidada compleja (A–C, B1–B3, B2a–B2c, B2aa–B2ab, B31–B32) | Retos 1–4 de la sección 3 | Secciones 7 y 8 |
Atributos, a y href, atributos específicos y globales, draggable, MDN |
319 |
Sección 4 | 5 sitios favoritos; reto extra start="5" |
Retos 1–4 de la sección 4 | Secciones 6, 7 y 8 |
img, src, alt, picsum.photos, GIF, lector de pantalla (Silktide, BBC), alt vacío |
320 |
Sección 5 | ¿Gatos o perros? | Retos 1–4 de la sección 5 | Secciones 6, 7 y 8 |
| Proyecto de invitación: imagen, lista y enlace como mínimo | 321 |
Sección 6 | Proyecto del día | 🧪 y ⭐ de la sección 6 | Sección 6 |
| (No existe en el curso original) | — | — | — | Feria de Emprendimiento | Sección 7 |
| (No existe en el curso original) | — | — | — | Sitio web de un grupo del colegio, etapa 2 | Sección 8 |
13. 📦 Evidencias de aprendizaje del Día 42
- Plantilla HTML escrita de memoria (Reto 1 de la sección 1) con tus anotaciones de lo que olvidaste.
- Los cinco ejercicios originales resueltos: hamburguesa, receta, lista anidada, 5 sitios favoritos (con
start="5") y gatos o perros. - El árbol dibujado de la lista anidada compleja.
- La invitación de cumpleaños con la tabla de pruebas diligenciada y el ejercicio 🧪 corregido.
- La Feria de Emprendimiento (proyecto extra) o la etapa 2 del proyecto integrador, con captura del validador W3C.
- Resultado de la Actividad 1 de IA (comprobación de
draggable). - Cuaderno de errores:
lipadre cerrado antes de la sublista, cierres que no coinciden,hrefsinhttps://,imgcon etiqueta de cierre,altausente o inútil,langequivocado.