Lección 8 de 1515 min
Lenguajes y formatos de la web
HTML5, CSS moderno, JavaScript, TypeScript y los formatos que lo rodean todo: JSON, XML, SVG, Markdown y YAML.
Una web se construye con tres lenguajes que el navegador entiende de forma nativa: HTML para la estructura, CSS para la presentación y JavaScript para el comportamiento. Alrededor de ellos gira un puñado de formatos que encontrarás en cualquier proyecto: para intercambiar datos, para configurar herramientas, para dibujar o para documentar.
En esta lección los repasamos todos. No hace falta memorizar su sintaxis: la idea es que sepas qué es cada uno, para qué sirve y cuándo elegirlo.
Los lenguajes del navegador
Piensa en una página como en una casa: HTML son las paredes y las habitaciones, CSS la pintura y los muebles, y JavaScript la electricidad que hace que las cosas funcionen. TypeScript no es un cuarto lenguaje del navegador, sino una forma más segura de escribir JavaScript.
HTML5
El lenguaje que da estructura y significado al contenido.
- Mantiene:
- WHATWG
- Desde:
- 1993
HTML (HyperText Markup Language) describe qué es cada parte de una página: un título, un párrafo, un enlace, un formulario. «HTML5» fue la última versión con número, en 2014; desde entonces es un estándar vivo que mantiene el WHATWG y que se llama, simplemente, HTML.
HTML5 trajo elementos semánticos como <header>, <nav>, <main> o <article>, audio y vídeo nativos con <audio> y <video>, nuevos tipos de campo (email, date, range) y la base de muchas de las APIs de JavaScript que verás al final de este módulo.
Úsalo cuando
Siempre: todo lo que se muestra en una web acaba siendo HTML, aunque lo genere un framework como Angular.
Ten en cuenta
HTML no es un lenguaje de programación: no tiene variables ni bucles. Elegir bien la etiqueta importa para la accesibilidad y el SEO, como viste en la lección sobre el DOM.
<article>
<h2>Receta de gazpacho</h2>
<video src="gazpacho.mp4" controls></video>
<label>
Comensales
<input type="number" min="1" value="4">
</label>
</article>CSS3 y módulos CSS modernos
El lenguaje que decide cómo se ve todo: color, tamaño, posición y movimiento.
- Mantiene:
- W3C
- Desde:
- 1996
CSS (Cascading Style Sheets) aplica estilos a los elementos HTML mediante selectores y propiedades. La «cascada» es la regla que resuelve los conflictos cuando varias reglas afectan al mismo elemento: gana la más específica y, a igualdad, la última.
No existe un «CSS4»: desde CSS3, el lenguaje se divide en módulos que avanzan cada uno a su ritmo. Los más útiles hoy son Flexbox y Grid para maquetar, las variables (custom properties), las consultas de contenedor (@container), el anidamiento nativo, el selector :has() y las capas de cascada (@layer).
Ojo con el nombre: los CSS Modules son otra cosa. Son archivos .module.css que tu herramienta de build procesa para que cada nombre de clase sea único y no choque con el de otro componente.
Úsalo cuando
Para todo lo visual. Las funciones modernas eliminan muchas razones para recurrir a JavaScript o a un preprocesador: el anidamiento, las variables, :has() y @container ya funcionan en todos los navegadores principales.
Ten en cuenta
Antes de usar una función recién llegada, comprueba su estado Baseline en MDN, como viste en la lección de estándares.
:root { --marca: oklch(55% 0.25 293); }
.tarjetas {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
gap: 1rem;
}
.tarjeta {
container-type: inline-size;
border: 1px solid var(--marca);
/* Anidamiento nativo: resalta la tarjeta si contiene una imagen */
&:has(img) { border-width: 3px; }
/* Cambia de diseño según el ancho de la tarjeta, no de la ventana */
@container (width > 30rem) { display: flex; }
}JavaScript (ECMAScript)
El único lenguaje de programación que entienden todos los navegadores.
- Estándar:
- ECMAScript
- Mantiene:
- Ecma TC39
- Desde:
- 1995
JavaScript añade comportamiento: responder a un clic, pedir datos al servidor, modificar el DOM. Su estándar se llama ECMAScript y el comité TC39 publica una edición cada año. ES2015 (también llamado ES6) fue el gran salto: trajo let y const, funciones flecha, clases, módulos y promesas.
Es un lenguaje dinámico, en el que las variables no tienen un tipo fijo, y asíncrono por naturaleza: no se queda bloqueado esperando a la red, sino que reacciona cuando llega la respuesta. Con Node.js también se ejecuta en el servidor; lo verás a fondo en el módulo de lenguajes de programación.
Úsalo cuando
Para cualquier interactividad en el navegador y, si quieres un solo lenguaje en todo el proyecto, también en el backend.
Ten en cuenta
Que algo se pueda hacer con JavaScript no significa que deba hacerse así. Si se resuelve con HTML o CSS (un desplegable con <details>, una animación con transition), suele ser más rápido y más accesible.
const boton = document.querySelector("#cargar");
boton.addEventListener("click", async () => {
const respuesta = await fetch("/api/recetas");
const recetas = await respuesta.json();
console.log(`Hay ${recetas.length} recetas`);
});TypeScript
JavaScript con tipos estáticos, que se comprueba antes de ejecutarse.
- Creado por:
- Microsoft
- Desde:
- 2012
TypeScript, creado por Microsoft en 2012, es un superconjunto de JavaScript: todo JavaScript válido es TypeScript válido y, además, puedes anotar tipos. El compilador revisa el código y te avisa de errores, como pasar un texto donde se esperaba un número, antes de que lleguen al usuario.
Los navegadores no entienden TypeScript, así que se compila a JavaScript, que en la práctica consiste sobre todo en quitarle los tipos. Las versiones recientes de Node.js ya hacen eso por su cuenta al cargar un archivo .ts.
Úsalo cuando
En cualquier proyecto que vaya a crecer o en el que trabaje más de una persona. Angular lo usa por defecto y la mayoría de frameworks lo recomiendan.
Ten en cuenta
Los tipos desaparecen al ejecutar: TypeScript no comprueba los datos que llegan de una API mientras la app funciona. Para eso necesitas validación, que verás en el módulo de formularios.
type Receta = {
nombre: string;
minutos: number;
vegana?: boolean;
};
function resumen(receta: Receta): string {
return `${receta.nombre} (${receta.minutos} min)`;
}
resumen({ nombre: "Gazpacho", minutos: "15" });
// Error: el tipo 'string' no se puede asignar al tipo 'number'.Nota
En la web real casi nunca escribes estos lenguajes «a pelo»: un framework genera el HTML, un bundler empaqueta tu JavaScript y TypeScript se compila antes de publicar. Pero lo que llega al navegador siempre es HTML, CSS y JavaScript.
Formatos para datos y configuración
Cuando dos programas se pasan información, o cuando una persona configura una herramienta, hace falta un formato que ambos entiendan. Los tres más comunes describen lo mismo (textos, números, listas y objetos anidados) con sintaxis muy distintas.
JSON
El formato de intercambio de datos de la web: ligero y fácil de procesar.
- Tipo MIME:
- application/json
- Estándar:
- RFC 8259
JSON (JavaScript Object Notation) representa datos con la sintaxis de los objetos de JavaScript, pero más estricta: claves entre comillas dobles, sin comas al final y sin comentarios. Solo admite seis tipos de valor: texto, número, booleano, null, objeto y lista.
Es el formato por defecto de casi todas las APIs. En JavaScript conviertes un objeto en texto con JSON.stringify() y un texto en objeto con JSON.parse(), o directamente con respuesta.json() al usar fetch.
Úsalo cuando
Para enviar y recibir datos entre cliente y servidor, y para archivos de configuración que lee sobre todo una máquina, como package.json.
Ten en cuenta
No admite comentarios ni fechas: las fechas viajan como texto ("2026-11-07"). Y los números se leen como coma flotante, así que un identificador muy largo puede perder dígitos; en ese caso, envíalo como texto.
{
"nombre": "Gazpacho",
"minutos": 15,
"vegana": true,
"ingredientes": ["tomate", "pepino", "pimiento"],
"autor": null
}YAML
Un formato de configuración pensado para que lo lean y escriban personas.
- Desde:
- 2001
- Extensiones:
- .yaml, .yml
YAML describe los mismos datos que JSON, pero con indentación en lugar de llaves y comillas. Admite comentarios con #, textos de varias líneas y referencias para no repetir bloques. De hecho, casi cualquier JSON es también YAML válido.
Es el idioma de la configuración en el mundo DevOps: Docker Compose, Kubernetes, GitHub Actions, GitLab CI y OpenAPI usan archivos .yaml o .yml.
Úsalo cuando
Para archivos de configuración que se editan a mano y que conviene comentar.
Ten en cuenta
La indentación es parte de la sintaxis y solo admite espacios, no tabuladores. Y cuidado con la conversión automática de tipos: en YAML 1.1, no se lee como false, el famoso «problema de Noruega» con el código de país NO. Si dudas, pon el texto entre comillas.
# Receta de ejemplo
nombre: Gazpacho
minutos: 15
vegana: true
ingredientes:
- tomate
- pepino
- pimiento
pais: "NO" # entre comillas, para que no se lea como falseXML
Un lenguaje de marcado extensible para documentos y datos estructurados.
- Mantiene:
- W3C
- Desde:
- 1998
XML (eXtensible Markup Language) se parece a HTML, pero no tiene etiquetas predefinidas: inventas las tuyas. Es muy estricto (toda etiqueta se cierra y un solo error invalida el documento) y admite atributos, espacios de nombres y validación con esquemas XSD.
Dominó en los años 2000 y sigue muy presente: los servicios SOAP, los feeds RSS, los sitemaps para buscadores, los documentos de Office (un .docx es XML comprimido) y el propio SVG son XML.
Úsalo cuando
Cuando el sistema con el que te integras lo exige (SOAP, banca, administraciones públicas) o para documentos con mucho texto y metadatos, donde los atributos y los espacios de nombres aportan.
Ten en cuenta
Es más verboso que JSON y todo es texto: <minutos>15</minutos> no dice que 15 sea un número salvo que lo indique un esquema. Al procesar XML de terceros, desactiva las entidades externas para evitar ataques XXE.
<?xml version="1.0" encoding="UTF-8"?>
<receta vegana="true">
<nombre>Gazpacho</nombre>
<minutos>15</minutos>
<ingredientes>
<ingrediente>tomate</ingrediente>
<ingrediente>pepino</ingrediente>
</ingredientes>
</receta>Interactivo
Un mismo dato, tres formatos
Edita la receta y compara cómo se escribe en JSON, YAML y XML, y cuánto ocupa cada versión.
{
"nombre": "Gazpacho",
"minutos": 15,
"vegana": true,
"ingredientes": [
"tomate",
"pepino",
"pimiento"
]
}Tamaño de cada versión
- JSON129 bytes
- YAML90 bytes
- XML274 bytes
Prueba a escribir «no» o «yes» como ingrediente y mira qué hace el YAML. Y fíjate en que en XML los minutos son texto: nada indica que sean un número.
Formatos para gráficos y documentación
SVG
Gráficos vectoriales descritos en texto: nítidos a cualquier tamaño.
- Mantiene:
- W3C
- Tipo MIME:
- image/svg+xml
SVG (Scalable Vector Graphics) describe imágenes con formas geométricas (círculos, rectángulos, trazados) en lugar de píxeles. Como es XML, puedes escribirlo a mano, incrustarlo directamente en el HTML, darle estilo con CSS y modificarlo con JavaScript.
Al ser vectorial, un icono SVG se ve igual de nítido en un reloj que en un monitor 4K, y suele pesar mucho menos que un PNG equivalente. Todos los iconos de esta app son SVG.
Úsalo cuando
Para iconos, logotipos, ilustraciones planas, gráficos de datos y diagramas: todo lo que se pueda describir con formas.
Ten en cuenta
No sirve para fotografías; para eso están JPEG, WebP o AVIF. Y no incrustes tal cual un SVG que suba un usuario: puede contener scripts.
<svg viewBox="0 0 100 100" width="48" height="48"
role="img" aria-label="Completado">
<circle cx="50" cy="50" r="45" fill="currentColor" />
<path d="M30 52 L45 66 L72 36" stroke="white"
stroke-width="10" fill="none" stroke-linecap="round" />
</svg>Markdown
Texto plano con unas pocas marcas que se convierte en HTML.
- Desde:
- 2004
- Extensión:
- .md
Markdown, creado por John Gruber en 2004, te permite dar formato escribiendo de forma natural: # para un título, dos asteriscos para la negrita, un guion para cada elemento de una lista o [texto](url) para un enlace. Después, un programa lo convierte en HTML.
Es el formato de los README.md de GitHub y GitLab, de mucha documentación técnica y de herramientas de notas como Obsidian. La variante de referencia es CommonMark, y GitHub Flavored Markdown le añade tablas y listas de tareas.
Úsalo cuando
Para documentación, READMEs, artículos de blog y cualquier texto que quieras versionar con Git y leer cómodamente sin convertirlo.
Ten en cuenta
Existen muchas variantes con pequeñas diferencias. Si conviertes Markdown que escriben tus usuarios, limpia el HTML resultante: Markdown admite HTML incrustado y podría colarse un script.
# Receta de gazpacho
Listo en **15 minutos**. Más recetas en [mi blog](https://ejemplo.com).
## Ingredientes
- Tomate
- Pepino
## Pasos
- [x] Triturar
- [ ] Enfriar dos horasInteractivo
JSON, YAML y XML cara a cara
Activa o desactiva opciones para compararlas cara a cara.
| Característica | JSON | YAML | XML |
|---|---|---|---|
| Sintaxis | Llaves, corchetes y comillas dobles | Indentación con espacios | Etiquetas de apertura y cierre, con atributos |
| Comentarios | No | Sí, con # | Sí, con <!-- … --> |
| Tipos de datos | Texto, número, booleano, null, objeto y lista | Los de JSON y fechas, deducidos del valor | Todo es texto, salvo que un esquema XSD diga otra cosa |
| Lo lee mejor | Una máquina | Una persona | Una máquina con un esquema |
| Uso típico | APIs, package.json | Configuración: Docker Compose, Kubernetes, CI | SOAP, RSS, sitemaps, documentos de Office |
Ponlo en práctica
Saber qué es cada cosa es la mitad del trabajo. La otra mitad es reconocer cuándo usarla.
Interactivo
¿Qué usarías?
Lee cada situación y elige la opción que mejor la resuelve. Fallar aquí no cuenta: es para practicar.
Tu app móvil pide al servidor la lista de pedidos del usuario. Necesitas un formato ligero que JavaScript entienda sin librerías.
Para recordar
- HTML estructura, CSS presenta y JavaScript da comportamiento. TypeScript no llega al navegador: se convierte en JavaScript antes.
- Ni HTML ni CSS tienen ya versiones numeradas: evolucionan de forma continua, CSS además por módulos independientes.
- JSON es el formato de intercambio por defecto; YAML, el de la configuración que editan personas; XML sigue vivo en integraciones empresariales, documentos y SVG.
- SVG es para gráficos que se describen con formas; para fotografías, usa formatos de imagen como WebP o AVIF.
- Markdown es texto plano legible que se convierte en HTML: ideal para documentación.
Comprueba lo aprendido
Cuestionario
Responde las 5 preguntas para completar la lección.
1.¿Por qué no existe «CSS4»?
2.¿Cuál de estos textos es JSON válido?
3.¿Qué hace el navegador con un archivo de TypeScript?
4.En un archivo YAML escribes
pais: NO. ¿Qué riesgo corres?5.Quieres un icono que se vea perfecto a 16 y a 512 píxeles y cuyo color puedas cambiar con CSS. ¿Qué formato eliges?