HTML — HyperText Markup Language
El lenguaje de marcado estándar para crear la estructura del contenido en la web. Define el significado y la organización de cada elemento que el navegador renderiza, desde un título hasta un formulario de pago.
¿Qué es HTML?
HTML (HyperText Markup Language) es el lenguaje de marcado con el que se define la estructura y el significado del contenido web. No es un lenguaje de programación — no tiene variables, bucles ni condiciones — sino un sistema de etiquetas (tags) que envuelven el contenido para decirle al navegador qué es cada pieza: un título, un párrafo, una imagen, un enlace, un formulario…
Fue creado por Tim Berners-Lee en el CERN en 1991. La versión actual, HTML5, es un estándar vivo mantenido por el WHATWG (Web Hypertext Application Technology Working Group) con contribuciones continuas. Los navegadores actualizan su soporte de forma incremental, sin versiones mayores futuras planeadas.
HTML trabaja siempre junto a CSS (que da estilo visual) y JavaScript (que añade comportamiento e interactividad). Los tres forman la tríada fundamental del desarrollo frontend:
Estructura y semántica del contenido. Define qué es cada cosa.
Presentación visual. Define cómo se ve cada cosa.
Comportamiento dinámico. Define qué hace cada cosa.
Anatomía de un elemento HTML
Un elemento HTML típico tiene cuatro partes: etiqueta de apertura, atributos, contenido y etiqueta de cierre.
de apertura
atributo
atributo
del elemento
de cierre
- Etiqueta de apertura —
<nombre>. Inicia el elemento. Puede incluir atributos. - Atributos — pares
nombre="valor"separados por espacios dentro de la etiqueta de apertura. Los booleanos no necesitan valor:<input disabled>. - Contenido — texto, otros elementos HTML, o ambos. Puede estar vacío.
- Etiqueta de cierre —
</nombre>. Obligatoria en la mayoría de elementos. Los elementos vacíos no la tienen.
Tipos de elementos
Los elementos HTML se clasifican según su comportamiento de renderizado por defecto:
Elementos de bloque
Ocupan todo el ancho disponible y fuerzan un salto de línea antes y después. Se apilan verticalmente.
<div> <p> <h1>–<h6>
<ul> <ol> <table>
<form> <section> <article>
<header> <main> <footer>
<blockquote> <pre>
Elementos en línea
Fluyen dentro del texto, solo ocupan el espacio de su contenido y no fuerzan saltos de línea.
<span> <a> <strong>
<em> <code> <img>
<button> <label> <abbr>
<mark> <kbd> <time>
<sub> <sup>
Elementos vacíos (void)
No tienen contenido ni etiqueta de cierre. Pueden escribirse como <br> o <br /> — ambas son válidas en HTML5.
<br> <hr> <img>
<input> <link> <meta>
<source> <track> <wbr>
<area> <base> <col>
<embed>
CSS puede cambiar el comportamiento de cualquier elemento con display: block,
display: inline, display: flex o display: grid,
pero el HTML semántico no cambia.
Atributos globales
Todos los elementos HTML aceptan estos atributos independientemente de su tipo:
idstringIdentificador único en el documento. Usado por CSS, JS y anclas de enlace.
classlistLista de clases CSS separadas por espacios. No tiene que ser única.
langBCP 47Idioma del contenido: es, en, fr, pt-BR…
direnumltr (izq. a der.), rtl (der. a izq.), auto (detecta el idioma).
hiddenbooleanOculta el elemento semánticamente. Equivale a display:none pero con significado HTML.
tabindexinteger0 = enfocable en orden natural, -1 = solo por JS, valores positivos no recomendados.
contenteditableenumtrue, false, plaintext-only. Hace el elemento editable por el usuario.
data-*stringDatos personalizados accesibles desde JS via element.dataset.
titlestringTooltip al pasar el cursor. En <abbr>, contiene la expansión.
aria-*variesAtributos de accesibilidad ARIA: roles, estados y propiedades para tecnologías asistivas.
Estructura básica de un documento HTML5
Todo documento HTML debe comenzar con esta estructura mínima. Cada parte tiene un propósito específico:
Semántica y accesibilidad
HTML semántico significa usar el elemento correcto para cada tipo de contenido,
no el que quede mejor visualmente. Un <nav> le dice al navegador (y a los
lectores de pantalla) que ese bloque es navegación; un <div> no dice nada.
Los beneficios son concretos: los lectores de pantalla ofrecen atajos de
teclado basados en landmarks semánticos (<main>, <nav>,
<aside>), los motores de búsqueda entienden mejor la
jerarquía del contenido, y el código es más mantenible para otros
desarrolladores.
- Usa
<button>para acciones,<a>para navegación — nunca al revés. - Añade
langen<html>. Es requerimiento WCAG 3.1.1 (Level A). - Todo
<img>necesitaalt. Las imágenes decorativas usanalt="". - Los formularios deben vincular
<label>a sus<input>confor/id. - No uses encabezados (
h1–h6) solo por el tamaño visual — respeta la jerarquía.
Secciones de esta guía
Cada sección cubre un grupo temático de etiquetas con documentación detallada, atributos y demos interactivos:
<!DOCTYPE>, <html>, <head>,
<body>, <title>, <meta>,
<link>, <style>, <div>,
<span>, atributos globales y SEO.
13 elementos y conceptos →
Texto y Tipografía
Encabezados, párrafos, énfasis semántico, citas, código, abreviaturas,
marcas de tiempo, tipografía especial y saltos de línea.
29 elementos →
Listas
<ul>, <ol>, <li>,
listas de definición <dl>, <menu>,
estilos de marcador y contadores CSS.
9 elementos y conceptos →
Imágenes y Media
<a>, <img>, <picture>,
<video>, <audio>, <canvas>,
<svg>, iframes y medios embebidos.
16 elementos →
Tablas
<table>, <thead>, <tbody>,
<tr>, <th>, <td>,
colspan, rowspan, accesibilidad y estilos.
7 elementos y conceptos →
Formularios
<form>, todos los tipos de <input>,
<select>, <textarea>, validación nativa,
FormData API y eventos de formulario.
20 elementos y conceptos →
Semántica HTML5
<header>, <nav>, <main>,
<article>, <section>, <aside>,
<footer>, <dialog>, <template>.
14 elementos →
Interactividad y Accesibilidad
Atributos tabindex, contenteditable, draggable,
aria-*, ARIA landmarks, navegación por teclado y Web Components.
11 conceptos →
Scripts y Meta
<script> con defer/async,
loading="lazy", srcset, Open Graph,
Resource Hints, JSON-LD, Web App Manifest y PWA.
10 conceptos →
Referencia rápida de reglas esenciales
- Siempre incluye
<!DOCTYPE html>como primera línea. - Siempre incluye
langen<html>. - Siempre incluye
<meta charset="UTF-8">como primer hijo de<head>. - Un solo
<h1>por página. No saltes niveles de encabezado. - Todo
<img>necesitaalt; las imágenes decorativas usanalt="". - No uses tablas para maquetar páginas — usa CSS Flexbox o Grid.
- Usa elementos semánticos (
<nav>,<main>,<article>) antes de recurrir a<div>. - Añade
rel="noopener noreferrer"a todos los enlaces contarget="_blank". - Los scripts externos deben tener
defero colocarse antes de</body>. - Valida tu HTML en
validator.w3.organtes de publicar.