Una página web no es un objeto mágico: es un fichero de texto. Lo escribes con letras normales, lo guardas, lo abres con el navegador y el navegador lo convierte en algo que se ve. Ese texto está escrito en HTML, y aprender frontend empieza por entender exactamente qué es ese texto y cómo se organiza. No hace falta nada previo: vamos desde la primera línea.
Aquí arranca el Overwatch Team Builder, el proyecto que crece contigo durante todo el curso. Su primera pieza es la más pequeña posible: una página que muestra la ficha de un héroe.
HTML describe, no programa#
HTML son las siglas de HyperText Markup Language: un lenguaje de marcado. Marcar significa rodear cada trozo de contenido con una marca que dice qué es: “esto es un título”, “esto es un párrafo”, “esto es una imagen”. Y ya está. HTML no hace cuentas, no toma decisiones, no guarda datos. Solo nombra las partes de la página.
Esa distinción importa desde el primer día, porque el frontend se reparte en tres lenguajes con tres trabajos distintos, y conviene no mezclarlos en la cabeza:
- HTML — la estructura: qué hay en la página y qué es cada cosa.
- CSS — el aspecto: cómo se ve (colores, tamaños, posición). Lo verás a partir del capítulo Qué es CSS.
- JavaScript — el comportamiento: qué pasa cuando interactúas. Es el Nivel 2.
En este capítulo solo tocamos el primero.
Una etiqueta, un elemento, un atributo#
Esta es la unidad básica de HTML. Míralo despacio:
<h1>Tracer</h1><h1>es una etiqueta de apertura. Le dice al navegador “aquí empieza un encabezado”.Traceres el contenido: lo que se verá.</h1>es la etiqueta de cierre. La barra/indica que aquí termina. El navegador no muestra las etiquetas: las usa para entender el texto.
Las tres cosas juntas —apertura, contenido y cierre— forman un elemento. Un elemento es la pieza completa; la etiqueta es solo la marca.
A una etiqueta de apertura se le pueden añadir atributos: información extra en forma
nombre="valor". Por ejemplo, para decir en qué idioma está la página:
<html lang="es">Aquí la etiqueta es <html> y el atributo es lang, con el valor "es" (español). Los atributos
no se ven en la página; configuran o describen el elemento.
Hay un puñado de elementos que no tienen contenido y, por tanto, no llevan cierre. Se escriben en una sola etiqueta, a menudo con una barra al final por costumbre:
<meta charset="utf-8" /><meta> no envuelve nada: solo aporta un dato (aquí, la codificación del texto). Estos elementos
“vacíos” son la excepción; la inmensa mayoría se abren y se cierran.
Cómo se anidan#
Los elementos se meten unos dentro de otros, formando una jerarquía. A eso se le llama anidamiento, y tiene una sola regla de oro: se cierran en el orden inverso al que se abren, como muñecas rusas. El último en abrirse es el primero en cerrarse.
<body>
<h1>Tracer</h1>
<p>Héroe de daño.</p>
</body><h1> y <p> están dentro de <body>, así que <body> se cierra el último. Esto está mal,
porque las etiquetas se cruzan:
<!-- MAL: <p> se abre dentro de <h1> pero se cierra fuera -->
<h1>Tracer <p>Héroe</h1></p>La sangría (los espacios al principio de cada línea) no es obligatoria para el navegador, pero hace el anidamiento evidente de un vistazo. Sángralo siempre.
El esqueleto de toda página#
Cualquier documento HTML, por pequeño que sea, tiene la misma estructura mínima. Este es el esqueleto que vas a escribir una y otra vez:
<!-- declara que el documento sigue HTML moderno -->
<!doctype html>
<!-- elemento raíz; lang="es" indica el idioma -->
<html lang="es">
<!-- información para el navegador (no se ve) -->
<head>
<!-- codificación del texto: tildes y ñ correctas -->
<meta charset="utf-8" />
<!-- le dice al móvil que use su ancho real -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- texto de la pestaña y los buscadores -->
<title>Tracer — Overwatch Team Builder</title>
</head>
<!-- todo lo que se ve en la ventana -->
<body>
<!-- encabezado principal: el título de la página -->
<h1>Tracer</h1>
<!-- párrafo de texto -->
<p>Héroe de daño.</p>
</body>
</html>Pieza a pieza:
<!doctype html>— la primera línea, siempre. Le dice al navegador “interpreta esto con las reglas modernas”. No es una etiqueta normal; es una declaración, y va sola.<html lang="es">— el elemento que envuelve todo lo demás. Ellangdeclara el idioma.<head>y<body>— los dos hijos de<html>, y la división más importante del documento.
head y body: lo que el navegador necesita y lo que se ve#
Es la distinción que más cuesta al principio, y la que más se usa:
- El
<head>guarda información para el navegador, que no se ve en la página: la codificación del texto (<meta charset>), el título de la pestaña (<title>) y, más adelante, los enlaces a las hojas de estilo. - El
<body>contiene todo lo que se ve en la ventana: títulos, párrafos, imágenes, enlaces, botones.
Dos piezas del <head> que ya usas en el esqueleto:
<meta charset="utf-8" />declara que el texto está en utf-8, la codificación que entiende cualquier carácter: tildes, la ñ, símbolos. Sin ella, “Campeón” puede acabar mostrándose como “Campeón”. Es de lo primero que se escribe.<title>es el nombre de la página: lo que aparece en la pestaña del navegador, en un marcador guardado y en los resultados de Google. No se ve dentro de la página, pero importa mucho fuera de ella.
También en el <head> irá casi siempre esta línea:
<!-- le dice al móvil que use su ancho real, no el de escritorio -->
<meta name="viewport" content="width=device-width, initial-scale=1" />Le dice al móvil que use su ancho real en vez de fingir ser una pantalla de escritorio. Sin ella, un diseño pensado para móvil no se activa. La verás a fondo en el capítulo de Responsive; por ahora basta con saber que va aquí y para qué sirve.
Tu primer fichero, paso a paso#
- Crea un fichero de texto y nómbralo
index.html. La extensión.htmles lo que le dice al sistema (y al navegador) que es una página. - Escribe dentro el esqueleto de arriba.
- Ábrelo en el navegador: doble clic sobre el fichero, o botón derecho → “Abrir con…”. No hace falta ningún programa especial ni ningún servidor: el navegador abre ficheros locales.
Una última herramienta: los comentarios. Un comentario es una nota para quien lee el código que
el navegador ignora por completo. Se escribe entre <!-- y -->:
<!-- Esto no se ve en la página: es una nota para mí -->Pruébalo#
Esta es una página mínima, con su esqueleto completo. A la izquierda, el HTML; a la derecha, lo que
el navegador pinta. Cambia el texto del <h1> o de los <p>, añade otro párrafo, y observa cómo
cambia al instante. Fíjate en que, sin una sola línea de CSS, el navegador ya muestra el título
grande: son sus estilos por defecto.
Comprueba lo que sabes#
Pregunta 1 de 5
¿Qué es HTML?
Tu turno#
Escribe tu primera página de cero aquí mismo, en el playground de abajo. No hay CSS: lo que importa es que el documento esté bien construido. Parte del starter, edita el HTML en la pestaña izquierda y observa el resultado en el preview. Cuando creas que lo tienes, despliega las soluciones y compáralas con la tuya.
Ejercicio · en esta página
Tu primera página HTML
Escribe de cero la ficha de un héroe en HTML: el esqueleto completo (doctype, html, head y body) con un meta charset, un title, un h1 con el nombre y uno o dos párrafos de descripción. Luego ábrela en tu navegador con doble clic, sin ningún servidor. No hay CSS todavía: lo que se evalúa es que el documento esté bien construido.
Paso 1: Que se vea
- El navegador muestra el nombre del héroe y su descripción.
- Vale aunque le falte el esqueleto (sin doctype, sin head, sin charset).
Paso 2: Bien formada
- Documento completo: doctype, html lang="es", head y body.
- meta charset="utf-8" para que las tildes y la ñ se vean bien.
- Un title que describe la página.
- Anidamiento e indentación correctos; ninguna etiqueta sin cerrar.
Paso 3: Cuidada
- Un comentario separa lo que es para el navegador (head) de lo que se ve (body).
- El title está pensado para la pestaña y el buscador: qué es y de qué proyecto.
- Estructura limpia y legible.
Ver soluciones
<html>
<body>
<h1>Tracer</h1>
<p>Héroe de daño. Rápida y escurridiza: su trabajo es presionar la retaguardia rival.</p>
<p>Partidas jugadas: 120. Victorias: 78.</p>
</body>
</html> Por qué este nivel
- Funciona: el navegador muestra el nombre y la descripción. Ese es el primer requisito, y lo cumple.
- Le falta el esqueleto. Sin <!doctype html>, el navegador puede caer en un modo de compatibilidad antiguo; y sin <head>, no hay sitio para la información que el navegador necesita.
- Sin <meta charset="utf-8">, las tildes y la ñ de la descripción pueden salir como caracteres rotos. Y sin <title>, la pestaña muestra la ruta del fichero en vez de un nombre.
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title>Tracer — Overwatch Team Builder</title>
</head>
<body>
<h1>Tracer</h1>
<p>Héroe de daño. Rápida y escurridiza: su trabajo es presionar la retaguardia rival.</p>
<p>Partidas jugadas: 120. Victorias: 78.</p>
</body>
</html> Por qué es mejor que el anterior
- Documento completo y bien formado: <!doctype html>, <html lang="es">, un <head> con charset y title, y el contenido dentro del <body>.
- charset="utf-8" arregla los acentos; lang="es" le dice al navegador y al lector de pantalla en qué idioma está, para pronunciarlo bien.
- El <title> describe la página: es lo que se ve en la pestaña, en un marcador y en los resultados de Google. Mismo contenido que el OK, pero ahora es una página de verdad.
<!doctype html>
<html lang="es">
<head>
<!-- Todo lo que va en <head> es para el navegador; no se ve en la página. -->
<meta charset="utf-8" />
<title>Tracer, héroe de daño · Overwatch Team Builder</title>
</head>
<body>
<!-- A partir de aquí, lo que el alumno ve en la ventana. -->
<h1>Tracer</h1>
<p>Héroe de daño. Rápida y escurridiza: su trabajo es presionar la retaguardia rival.</p>
<p>Lleva 78 victorias en 120 partidas: un 65 % de winrate.</p>
</body>
</html> Por qué es mejor que el anterior
- Todo lo de "mejor", y además un comentario separa lo que es para el navegador (<head>) de lo que se ve (<body>): el documento se explica solo a quien lo abra dentro de seis meses.
- El <title> está pensado para fuera de la página: "Tracer, héroe de daño · Overwatch Team Builder" dice qué es y de qué proyecto, que es lo que ayuda en una pestaña o en una búsqueda.
- El contenido cierra el bucle del dato: 78 victorias en 120 partidas es un 65 % de winrate, el número que de verdad importa. Estructura limpia y sin etiquetas a medio cerrar.