Skip to content
This page has been auto-translated and may contain errors.View in English

Tu primera página HTML

docs.scrimba.com

Todo documento HTML comparte el mismo marco pequeño: una línea que declara el tipo de documento, un elemento raíz que envuelve todo, un head para información sobre la página, y un body para el contenido que la gente ve. Este capítulo desglosa ese marco línea por línea y luego lo guarda en un archivo que puedes abrir en un navegador.

El esqueleto del documento

Aquí está el esqueleto del que comienza cada página. Puedes copiarlo exactamente y cambiar las partes dentro del body:

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Mi primera página</title>
  </head>
  <body>
    <h1>Hola</h1>
    <p>Esta es mi primera página web.</p>
  </body>
</html>

La primera línea, <!DOCTYPE html>, le dice al navegador que esta es una página HTML moderna. Después viene el elemento raíz, <html>, que envuelve todo lo demás en la página. Dentro de él hay dos cajas: <head> para información detrás de escenas, y <body> para las palabras e imágenes que ve un visitante. Tu encabezado y párrafo van en el body, porque esa es la parte que se muestra.

Piensa en todo como en un paquete etiquetado. El doctype es el sello que indica qué sistema postal usar, <html> es la caja, el head es la etiqueta en el exterior, y el body es lo que está empaquetado dentro.

Todo documento está construido a partir de las mismas cuatro partes, y es útil nombrar cada una por su función:

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Mi primera página</title>
  </head>
  <body>
    <h1>Hola</h1>
    <p>Esta es mi primera página web.</p>
  </body>
</html>

<!DOCTYPE html> es la declaración del tipo de documento. No es una etiqueta HTML, es un interruptor: su presencia le dice al navegador que renderice en modo estándar en lugar del viejo modo compatibilidad mantenido para páginas de los años 90. <html> es el elemento raíz, el elemento único que contiene todos los demás. Su atributo lang="en" indica el idioma de la página. Luego <head> contiene información sobre la página y <body> contiene el contenido. La indentación no es requerida, pero anidar el head y body dentro de <html> y sus hijos dentro de ellos mantiene la estructura legible.

El esqueleto parece código repetitivo, pero cada línea cambia cómo el navegador trata el documento.

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Mi primera página</title>
  </head>
  <body>
    <h1>Hola</h1>
    <p>Esta es mi primera página web.</p>
  </body>
</html>

<!DOCTYPE html> es la declaración del tipo de documento, y a pesar de los ángulos no es un elemento. Es un interruptor de modo. Con él, el navegador usa modo estándar, lo que significa que sigue la especificación actual para layout y dimensionamiento de cajas. Omítelo y el navegador cae al modo compatibilidad, una emulación del comportamiento de los años 90 que comete errores en detalles como anchos de cajas. Hay exactamente un doctype correcto para HTML hoy, y es este corto; los doctypes largos y versionados de la era XHTML están obsoletos.

<html> es el elemento raíz, el nodo único del que desciende todo el árbol del documento. Todo lo demás es descendiente de él. El atributo lang va aquí porque establece el idioma base para todo el documento. <head> y <body> son sus únicos dos hijos permitidos, en ese orden: metadatos primero, contenido segundo. Si omites las etiquetas <head> o <body>, el parser las inserta por ti (ese análisis tolerante nuevamente), pero escribirlas mantiene tu fuente y el árbol resultante en acuerdo, que es lo que quieres cuando estás razonando sobre uno u otro.

JunoEl esqueleto del documento Cada página comienza con el mismo marco: <!DOCTYPE html>, luego <html> envolviendo un <head> y un <body>. Cópialo tal cual y pon tus propias palabras en el body. No se espera que lo memorices aún; lo escribirás suficientes veces como para que se quede por sí solo.
JunoEl esqueleto del documento Cuatro partes, cada una con una función: el doctype activa el modo estándar, <html> es la raíz, <head> es información sobre la página, <body> es el contenido. El atributo lang va en <html> porque describe todo el documento. Mete esta forma en tus dedos y cada nueva página comienza de la misma manera confiable.
JunoEl esqueleto del documento El doctype es un interruptor de modo, no una etiqueta: con él obtienes modo estándar, sin él modo compatibilidad y dimensionamiento de cajas incorrecto. <html> es la raíz con exactamente dos hijos, head luego body, y el parser los insertará si los olvidas. Escríbelos de todas formas para que tu fuente coincida con el árbol que realmente estás analizando.

Qué va en el head versus el body

Las dos cajas dentro de <html> tienen diferentes funciones. El <head> contiene cosas que el navegador necesita saber pero que el visitante no lee en la página. El <body> contiene todo lo que el visitante sí ve.

html
<head>
  <title>Mis notas de recetas</title>
</head>
<body>
  <h1>Pan de plátano</h1>
  <p>Mezcla, vierte, hornea durante una hora.</p>
</body>

El <title> está en el head, y es el nombre de la página: aparece en la pestaña del navegador, no en el medio de la página. El encabezado y el párrafo están en el body, así que aparecen en la página misma. Una regla simple para empezar: si un visitante debe leerlo, va en el body.

La división es información sobre la página versus contenido de la página. El <head> es para metadatos: datos sobre el documento en lugar del contenido del documento. El <body> es el contenido en sí, la parte renderizada en la ventana del navegador.

html
<head>
  <title>Receta de pan de plátano</title>
</head>
<body>
  <h1>Pan de plátano</h1>
  <p>Mezcla, vierte, hornea durante una hora.</p>
</body>

El ejemplo más claro es <title>. Vive en el head porque no es parte del contenido de la página, pero hace trabajo real: nombra la pestaña, es la etiqueta guardada cuando alguien marca la página, y es el titular que un motor de búsqueda muestra en sus resultados. Otros elementos del head siguen la misma lógica. Configuran o describen la página. Nada en el head se dibuja en el área de la página, así que si te encuentras queriendo poner un encabezado o una imagen en el head, pertenece al body en su lugar.

El head es donde el documento se describe y configura a sí mismo; el body es el contenido al que esa descripción se aplica. Todo en el head es metadatos, datos sobre el documento en lugar de contenido mostrado en el área de la página.

html
<head>
  <title>Receta de pan de plátano</title>
  <meta name="description" content="Un pan rápido: mezcla, vierte, hornea." />
</head>
<body>
  <h1>Pan de plátano</h1>
  <p>Mezcla, vierte, hornea durante una hora.</p>
</body>

<title> se lo merece varias veces. Nombra la pestaña del navegador, es el texto por defecto cuando la página se marca o se comparte, y es el titular clickeable en resultados de búsqueda, lo que lo hace una de las cadenas de mayor valor en la página. Un elemento <meta name="description"> proporciona la línea de resumen que un motor de búsqueda puede mostrar debajo de ese titular; nunca se renderiza en la página, que es el punto.

El head también contiene los elementos que traen tus otros archivos: <link rel="stylesheet"> para CSS y <script> para JavaScript, aunque un script a menudo se sienta al final del body en su lugar para que el contenido se analice primero. La regla que mantiene esto limpio: el head se analiza antes del body, así que cualquier cosa que la página necesite configurada antes de que su contenido se lea (su codificación, su hoja de estilos, su título) va allá, y todo lo que una persona realmente lee va en el body.

JunoQué va en el head versus el body Head es detrás de escenas, body es lo que se muestra. El <title> vive en el head y nombra la pestaña del navegador; tus encabezados y párrafos viven en el body donde la gente los lee. Si un visitante debe verlo, va en el body. Esa una pregunta ordena casi todo.
JunoQué va en el head versus el body El head son metadatos, información sobre la página; el body es el contenido de la página. <title> es el nombre de la pestaña, la etiqueta de marcador, y el titular de búsqueda todo a la vez, por eso se merece un lugar en el head. Nada en el head se dibuja en la página, así que un encabezado o imagen que pretendías mostrar pertenece al body.
JunoQué va en el head versus el body El head describe y configura el documento, el body es el contenido al que esa configuración se aplica, y el head se analiza primero. <title> y <meta name="description"> son cadenas de alto valor que un motor de búsqueda lee, nunca dibujadas en la página. Cualquier cosa que la página necesite configurar antes de su contenido, su codificación y hoja de estilos, va en el head; todo lo que una persona lee va en el body.

Charset y viewport

Dos líneas más van en el head de casi todas las páginas. Puedes copiarlas tal cual:

html
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Mi primera página</title>
</head>

La primera línea le dice al navegador cómo leer tu texto para que las letras acentuadas, comillas curvas y emojis salgan bien en lugar de convertirse en símbolos raros. La segunda línea le dice al navegador que ajuste la página al ancho de la pantalla, que es lo que la hace verse sensato en un teléfono en lugar de una versión diminuta y alejada de la página de escritorio. No necesitas entender cada palabra aún. Pon ambas cerca del inicio del head y tus páginas se comportarán bien.

Dos elementos <meta> pertenecen al head de esencialmente todas las páginas. Un elemento <meta> es un elemento vacío que lleva un solo dato de metadatos en sus atributos.

html
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Mi primera página</title>
</head>

El primero establece la codificación de caracteres: el esquema que el navegador usa para convertir los bytes almacenados nuevamente en letras. UTF-8 es la codificación que cubre cada carácter que probablemente usarás, desde inglés a emojis, y es el estándar moderno. Pon esta línea primero en el head.

El segundo es la etiqueta viewport, y controla cómo la página se asigna a una pantalla móvil. width=device-width le dice al navegador que trate el ancho de la página como el ancho real del dispositivo, e initial-scale=1.0 establece el zoom inicial en 100%. Sin esto, los teléfonos asumen que la página fue diseñada para escritorio y encogen todo para que quepas, por lo que tu texto llega ilegiblemente pequeño. Estas dos líneas están cerca de ser innegociables, por eso las plantillas de inicio las incluyen por defecto.

Dos elementos <meta> son efectivamente requeridos, y las razones se remontan a cómo el navegador procesa el archivo.

html
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Mi primera página</title>
</head>

<meta charset> declara la codificación de caracteres, el mapeo que el navegador usa para convertir los bytes sin procesar del archivo nuevamente en caracteres (las letras, puntuación y símbolos que escribiste). Esto debe ser lo primero en el head, e idealmente dentro de los primeros 1024 bytes del documento, debido a un problema de secuenciación: el parser tiene que decodificar los bytes en texto antes de poder leer cualquiera de ellos, incluyendo la declaración de charset en sí. Los navegadores resuelven la paradoja comenzando con una decodificación provisional, luego reanalizar si el charset declarado difiere. Pon la declaración primero y no hay nada que reanalizar. Usa UTF-8; codifica todo Unicode y es el estándar asumido de la web moderna.

El atributo lang de vuelta en <html> también es una preocupación de análisis, aunque semántica. Nombra el idioma natural del documento para software que no puede inferirlo: un lector de pantalla (software que lee la página en voz alta para personas que no pueden verla) usa lang para elegir las reglas de pronunciación y voz correctas, y herramientas de traducción lo usan para saber el idioma fuente. Un lang faltante o incorrecto le da a usuarios ciegos una página leída en el acento incorrecto, o peor, fonéticamente sin sentido.

<meta name="viewport"> aborda un estándar de renderizado móvil. Los primeros smartphones, para hacer frente a páginas solo de escritorio, renderizaban en un lienzo virtual de alrededor de 980 píxeles de ancho y luego lo reducían para que quepa en la pantalla. width=device-width anula eso, mapeando el ancho del layout de la página al ancho de su propio dispositivo para que tu CSS responsivo tenga el tamaño real de la pantalla con el que trabajar; initial-scale=1.0 establece el zoom inicial en 1:1. Omite esta etiqueta y un layout responsivo aún calcula contra la suposición de 980 píxeles, así que tu cuidadosamente construido diseño móvil renderiza a ancho de escritorio y luego se reduce, anulando el ejercicio completo. La etiqueta en sí no hace estilo; le entrega a tu CSS las dimensiones correctas para estilizar.

JunoCharset y viewport Dos líneas van cerca de la parte superior del head en casi todas las páginas: una para que tu texto se lea correctamente, acentos y emojis incluidos, y una para que la página quepa en una pantalla de teléfono en lugar de reducirse. Cópiala ambas y no pienses demasiado en las palabras aún. Silenciosamente arreglan problemas que de otro modo pasarías una tarde persiguiendo.
JunoCharset y viewport<meta charset="UTF-8"> establece cómo los bytes se convierten en letras, así que ponlo primero en el head; UTF-8 cubre todo desde inglés simple a emojis. La etiqueta viewport con width=device-width detiene que los teléfonos reduzcan una página de tamaño de escritorio a nada. Omite la línea viewport y tu layout móvil llega minúsculo, que es el clásico bug "por qué mi sitio se ve roto en mi teléfono".
JunoCharset y viewportcharset va primero porque el parser debe decodificar bytes en texto antes de poder leer la declaración en sí; ponlo arriba y no hay nada que reanalizar. lang en <html> es lo que un lector de pantalla usa para elegir la pronunciación, así que un valor incorrecto lee la página en el acento incorrecto. Suelta la etiqueta viewport y tu CSS responsivo calcula contra un lienzo de 980px, así que el diseño móvil que construiste renderiza a ancho de escritorio y se reduce.

Guardando y abriendo un archivo .html

Una página HTML es un archivo de texto plano, así que puedes hacer uno en cualquier editor de texto. Lo único que importa es el nombre: guárdalo terminando en .html.

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Mi primera página</title>
  </head>
  <body>
    <h1>Hola</h1>
    <p>Esta es mi primera página web.</p>
  </body>
</html>

Guárdalo como index.html. Luego encuentra el archivo en tu computadora y haz doble clic: se abre en tu navegador y muestra tu encabezado y párrafo. No hay servidor que iniciar y nada que instalar. La terminación .html es la señal que le dice a tu computadora que lo abra como una página web en lugar de como un muro de código. Cambia una palabra, guarda, y actualiza la pestaña del navegador para ver la actualización.

Un documento HTML es un archivo de texto plano. Escríbelo en cualquier editor y guárdalo con una extensión .html. La extensión de archivo, la parte del nombre después del punto, es lo que le dice al sistema operativo y al navegador que traten el archivo como HTML.

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Mi primera página</title>
  </head>
  <body>
    <h1>Hola</h1>
    <p>Esta es mi primera página web.</p>
  </body>
</html>

Guárdalo como index.html. El nombre index es una convención que vale la pena adoptar temprano: un servidor web sirviendo una carpeta busca index.html por defecto, así que se convierte en la página de inicio de cualquier sitio que construyas más tarde. Para verlo ahora, haz doble clic en el archivo, o arrástralo a una ventana del navegador. La barra de direcciones leerá algo como file:///Users/tú/index.html, el file:// diciéndote que el navegador está leyendo directamente desde disco en lugar de sobre la red. La edición es un loop: cambia el archivo, guarda, actualiza la pestaña.

Un documento HTML es texto plano, y el navegador necesita solo el archivo en sí para renderizarlo. Guárdalo con una extensión .html para que el sistema operativo lo asocie con el navegador y el navegador lo sirva como HTML en lugar de como texto para mostrar literalmente.

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Mi primera página</title>
  </head>
  <body>
    <h1>Hola</h1>
    <p>Esta es mi primera página web.</p>
  </body>
</html>

Abrir un archivo local usa el protocolo file://: la dirección se convierte en algo como file:///Users/tú/index.html, y el navegador lee directamente desde disco. Eso es perfecto para una página única, pero tiene un techo. Bajo file://, el navegador aplica una estricta política del mismo origen (la regla de seguridad que limita lo que una página puede cargar desde otras ubicaciones), y trata cada archivo local como un origen separado, así que cosas como solicitudes fetch para cargar datos, e importaciones de módulos ES, están bloqueadas. Características que dependen de ser servidas sobre http:// no funcionarán desde un archivo abierto por doble clic.

La corrección, cuando llegas a ese punto, es un servidor de desarrollo local: un pequeño programa que sirve tu carpeta sobre http://localhost para que el navegador la trate como un sitio real. Las extensiones del editor y comandos de una línea hacen esto por ti. Para una página primera simple, aunque, file:// es exactamente correcto: sin servidor, sin paso de compilación, sin dependencias. Guarda el archivo, haz doble clic, y el navegador lo renderiza. El nombre index.html vale la pena conservar, ya que un servidor sirviendo un directorio devuelve index.html por defecto, convirtiéndolo en el punto de entrada una vez que te muevas a http://.

JunoGuardando y abriendo un archivo .html Una página web es un archivo de texto cuyo nombre termina en .html. Guarda la tuya como index.html, haz doble clic, y el navegador la abre de inmediato, sin configuración alguna. Para ver un cambio, guarda el archivo y actualiza la pestaña. Ese loop de guardar y actualizar es todo el ritmo de construir una página.
JunoGuardando y abriendo un archivo .html Guarda el archivo con una extensión .html y el navegador sabe renderizarlo como una página; haz doble clic o arrástralo y la barra de direcciones muestra file://, significando que está leyendo desde disco. Nómbralo index.html porque los servidores lo tratan como la página de inicio por defecto más tarde. Luego es un loop: edita, guarda, actualiza.
JunoGuardando y abriendo un archivo .html Hacer doble clic abre el archivo sobre file://, que está bien para una página pero refuerza una estricta política del mismo origen, así que fetch e importaciones de módulos ES están bloqueadas. Cuando golpees esa pared, ejecuta un servidor de desarrollo local para que la página cargue sobre http://localhost y se comporta como un sitio real. Mantén el nombre index.html, ya que ese es el por defecto que un servidor devuelve para una carpeta.