Partes de la portada de la sesión anterior y la conviertes en un sitio de cuatro páginas enlazadas. El recorrido orientativo reserva 5 minutos al punto de partida, 25 a la explicación, 140 al trabajo y 10 a comprobar lo aprendido.
Hoy · Hoja de ruta
- 1. Aprende: Que los encabezados son el índice del documento, qué relación expresa cada tipo de lista, y desde dónde se resuelve una ruta relativa.
- 2. Haz: Interpreta información sin marcar, crea la segunda página, monta el sitio de cuatro páginas con su navegación y resuelve el laberinto de rutas.
- 3. Comprueba: Ningún encabezado se salta un nivel, y el proyecto entero sigue funcionando al abrir una copia en otra ubicación.
Antes de empezar · 5 minutos, sin apuntes
- ¿Qué contenido pertenece a
heady cuál abody? - ¿Para qué sirven
langymeta charset? - Predice qué problema puede causar una página sin
meta name="viewport"en un móvil.
Se explica
25 minutos · conceptos y demostración
Hoy aparecen tres familias de elementos —texto, listas y enlaces— y en las tres la decisión es la misma: qué relación hay entre estas piezas de información. Los catálogos de sintaxis quedan como material de consulta dentro de cada paso; aquí van las decisiones.
HTML no sirve para decir «quiero esto grande»
Sirve para decir:
«Esto es el título principal del documento.»
Es la diferencia entre describir la apariencia y describir el significado, y explica casi todos los errores de esta unidad.
Los encabezados son el índice del documento
Hay seis niveles, de h1 a h6, y los niveles indican jerarquía, no tamaño:
<h1>PixelStore</h1>
<h2>Productos</h2>
<h3>Ordenadores portátiles</h3>
Juntos construyen un índice:
h1 PixelStore
h2 Productos
h3 Portátiles
h3 Monitores
h2 Servicios
h3 Reparaciones
h2 Contacto
Ese índice es exactamente lo que usa un lector de pantalla para saltar de sección en sección, y lo que usa un buscador para entender de qué habla la página.
Cómo elegir el nivel sin equivocarse
No preguntes «¿qué tamaño quiero?». Pregunta «¿de qué es esto una parte?». Si es parte de la sección anterior, baja un nivel. Si es una sección nueva del mismo rango, usa el mismo nivel.
Y no saltes niveles hacia abajo: después de un h1 viene un h2, no un h3. Saltar es como escribir un índice con el capítulo 1, el apartado 1.1.1 y nada en medio.
Si el tamaño resultante no te gusta, es un problema de CSS. Con CSS podrás dar a cualquier encabezado el tamaño que necesites.
Párrafos, no saltos de línea
<!-- Incorrecto -->
Texto uno
<br>
<br>
Texto dos
<!-- Correcto -->
<p>Texto uno.</p>
<p>Texto dos.</p>
Las dos versiones se ven casi igual. La primera dice «un texto suelto con saltos de línea»; la segunda dice «dos párrafos». <br> existe para saltos que forman parte del contenido: los versos de un poema, las líneas de una dirección postal. HTML describe la estructura; CSS controlará el espacio.
Énfasis y significado
<strong>Importante</strong>
<em>énfasis</em>
strong indica importancia; em indica énfasis. No pienses:
strong = negrita
em = cursiva
Eso describe su apariencia habitual, no su significado. Con CSS podrías hacer que strong se viera de cualquier otra forma, y seguiría significando lo mismo.
Tres listas para tres relaciones
Una lista no es «texto con viñetas». Cada tipo declara una relación distinta entre sus elementos.
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
<ol>
<li>Crear el proyecto</li>
<li>Escribir HTML</li>
<li>Validar</li>
</ol>
En la segunda, el orden tiene significado: no puedes validar antes de escribir.
<dl>
<dt>HTML</dt>
<dd>Lenguaje utilizado para estructurar contenido web.</dd>
<dt>CSS</dt>
<dd>Lenguaje utilizado para definir su presentación.</dd>
</dl>
dt es el término y dd su descripción. Un mismo dt puede tener varios dd, y varios dt pueden compartir un dd.
- HTML
- CSS
- JavaScript
- Crear el proyecto
- Escribir HTML
- Validar
- HTML
- Estructura el contenido.
- CSS
- Define su presentación.
La viñeta o el número ayudan a leer, pero la diferencia importante es la relación que declara cada elemento.
| Lista | Se usa cuando | Ejemplo |
|---|---|---|
<ul> |
El orden no cambia el significado | Los componentes que vende la tienda |
<ol> |
El orden es el significado | Los pasos para tramitar una devolución |
<dl> |
Cada elemento es un término y su definición | El glosario de la ficha técnica |
La prueba que distingue ul de ol
Reordena mentalmente los elementos. Si la información sigue siendo cierta, es ul. Si deja de serlo, es ol.
No decide el hecho de que se vean números: los números son apariencia, y con CSS se pueden poner y quitar.
Cuando una lista va dentro de otra, el segundo <ul> va dentro del <li> del que depende, no detrás de él. Es el error más común de la sesión: sacarlo fuera declara que «Portátiles» es hermano de «Hardware» en lugar de una parte suya.
<ul>
<li>
Hardware
<ul>
<li>Portátiles</li>
<li>Monitores</li>
</ul>
</li>
<li>
Software
</li>
</ul>
El enlace y la ruta relativa
<a href="https://developer.mozilla.org/">MDN Web Docs</a>
href indica el destino y el contenido del elemento es el texto visible. Ese texto importa: «pincha aquí» no dice nada fuera de contexto, y mucha gente navega saltando de enlace en enlace sin leer lo que hay alrededor.
Para otra página del mismo sitio basta su nombre de archivo:
<a href="productos.html">Productos</a>
Lo que desatasca todo lo demás es de dónde parte una ruta. Cuando escribes href="productos.html", el navegador no busca desde la raíz del proyecto: busca desde la carpeta del archivo que contiene el enlace.
No hay rutas correctas en abstracto
La misma ruta, escrita en dos archivos distintos, apunta a sitios distintos. Hay rutas correctas desde un origen, y por eso el procedimiento tiene siempre tres pasos: dónde estoy, dónde voy, y cuántos niveles subo antes de empezar a bajar.
Por qué C:\Users\... no es un enlace
Esto puede funcionar en tu ordenador:
<img src="C:\Users\Laura\Desktop\foto.jpg">
Y deja de funcionar en cuanto mueves el proyecto, lo entregas o lo publicas, que es justo para lo que se hace una web. Lo mismo con file:///. Nuestros proyectos deben ser transportables.
La navegación es una lista de enlaces
<nav aria-label="Navegación principal">
<ul>
<li><a href="index.html">Inicio</a></li>
<li><a href="productos.html">Productos</a></li>
<li><a href="acerca.html">Acerca de</a></li>
<li><a href="contacto.html" aria-current="page">Contacto (página actual)</a></li>
</ul>
</nav>
<nav>declara que ese bloque es navegación. Un lector de pantalla ofrece saltar a él, o saltárselo entero para ir al contenido, que es lo que hace casi todo el mundo que navega así.- La lista dice que son cuatro enlaces hermanos, y permite anunciar «lista de 4 elementos». Cuatro enlaces sueltos separados por espacios no dicen ni cuántos son ni dónde acaban.
aria-label="Navegación principal"da un nombre a este bloque para las tecnologías de asistencia.aria-current="page"identifica el enlace de la página actual para esas tecnologías. Por sí solo no cambia su aspecto: el texto «(página actual)» ofrece también una indicación visible.
El ejemplo corresponde a contacto.html. En cada una de las demás páginas, cambia de enlace tanto el atributo como la indicación visible; solo uno debe marcarse como actual.
No elegimos las etiquetas pensando en cómo queremos que se vea. Elegimos las que representan mejor la información.
Se trabaja
140 minutos · práctica sobre tu propio proyecto
Hoy el proyecto pasa de una página suelta a un sitio de cuatro páginas enlazadas. Los pasos 1 a 4 trabajan el contenido; los pasos 5 a 7, la navegación y las rutas.
Paso 1 · Revisa la jerarquía de tu portada · 10 min
Antes de añadir páginas nuevas, arregla la que ya tienes. Los ejemplos siguientes presentan las marcas que podrás utilizar en este paso; no necesitas emplearlas todas.
Consulta antes de empezar · texto y entidades
| Elemento | Significa |
|---|---|
mark |
Resaltado por relevancia en el contexto actual, como un subrayador |
small |
Letra pequeña en el sentido legal: avisos, notas al pie |
del / ins |
Contenido eliminado y contenido añadido. El par es perfecto para un precio rebajado |
abbr |
Una abreviatura, con su significado en title |
code |
Un fragmento de código o un nombre de archivo |
<mark>texto destacado</mark>
<small>información secundaria</small>
<del>49,99 €</del> <ins>39,99 €</ins>
<abbr title="HyperText Markup Language">HTML</abbr>
<code>index.html</code>
Para escribir un < sin que abra una etiqueta se usan entidades:
| Escribes | Se ve |
|---|---|
< |
< |
> |
> |
& |
& |
" |
" |
|
Un espacio que no se parte al final de línea |
© |
© |
Es imprescindible cuando quieres mostrar código HTML dentro de una página, que es lo que hacen estos apuntes.
- Dibuja en papel el índice de tu
index.html: qué esh1, qué esh2, qué esh3. - Comprueba que no hay ningún salto de nivel y que solo hay un
h1. - Sustituye cualquier
<br><br>que hayas usado para separar por párrafos reales. - Añade al menos un
abbr, uncodeo un pardel/insdonde tenga sentido de verdad. Si no lo tiene en tu tema, no lo fuerces: dilo en un comentario.
Antes de eso, resuelve este caso y explica qué principio incumple:
<p>
<h2>Nuestros productos</h2>
</p>
Ver respuesta
Un <p> solo puede contener contenido en línea: texto, strong, em, a, img… Un encabezado es un elemento de bloque y no cabe dentro de un párrafo.
El navegador no muestra un error: cierra el párrafo por su cuenta justo antes del <h2> y, al procesar el </p> final, genera otro párrafo vacío. El encabezado queda fuera del párrafo, no dentro como sugiere el código. Otra vez el mismo patrón: se ve bien, y la estructura real no es la que escribiste.
Paso 2 · De texto plano a estructura · 25 min
Recibes esta información sin ningún marcado:
Componentes de un ordenador
Procesador
Memoria RAM
Almacenamiento SSD
Pasos para instalar un sistema operativo
Descargar la imagen oficial
Crear el medio de instalación USB
Arrancar el equipo desde el USB
Completar el asistente de instalación
Reiniciar y actualizar controladores
Esto no es «escribir etiquetas»: es interpretar la información. Tu trabajo:
- Decide qué es título de bloque y con qué nivel de encabezado, teniendo en cuenta dónde va a vivir dentro de tu página.
- Decide qué bloque es
uly cuál esol, y escribe en un comentario por qué, aplicando la prueba de reordenar. - Añade debajo una
<dl>que defina tres conceptos: CPU, RAM y SSD.
Estoy atascado · no sé si los componentes van ordenados
Aplica la prueba de forma literal. Con «Memoria RAM, Almacenamiento SSD, Procesador», la afirmación de que esos son los componentes de un ordenador se mantiene con independencia del orden. Con «Reiniciar, Descargar la imagen, Arrancar desde el USB», en cambio, ya no describe una instalación posible.
Paso 3 · Los módulos de DAW · 10 min
Representa esta estructura con el mínimo HTML razonable y semánticamente correcto:
DAW
├ Lenguajes de Marcas
├ Programación
└ Bases de Datos
Ver respuesta
Una solución que permite practicar la anidación es representar DAW y sus módulos mediante una lista dentro de otra:
<ul>
<li>DAW
<ul>
<li>Lenguajes de Marcas</li>
<li>Programación</li>
<li>Bases de Datos</li>
</ul>
</li>
</ul>
En esta solución, la lista anidada va dentro del <li> de DAW. También puedes representar DAW como un encabezado seguido de una lista de módulos; justifica la elección según el contexto de la página.
Paso 4 · Crea productos.html · 25 min
Crea la segunda página de tu proyecto. Debe contener:
- Un encabezado principal y al menos dos niveles de encabezado.
- Varios párrafos.
- Una lista no ordenada.
- Una lista ordenada, donde el orden importe de verdad.
- Una lista de descripciones (
dl), con sus términos (dt) y descripciones (dd). - Una lista anidada dentro de un
li. - Al menos dos elementos de significado textual de la sesión anterior.
Todavía no la enlazaremos con la portada: eso es el paso 5.
Antes de continuar: ul, ol y dl están presentes y cada una declara la relación que le corresponde, no la que da el aspecto deseado.
Paso 5 · El sitio multipágina · 35 min
Amplía tu proyecto hasta tener cuatro páginas en la raíz:
mi-web/
├── index.html
├── productos.html
├── acerca.html
└── contacto.html
Requisitos:
- Las cuatro tienen el esqueleto completo y su propio
<title>distinto y descriptivo. - Las cuatro incluyen el mismo bloque de navegación, con los mismos enlaces en el mismo orden.
- Cada página marca su propio enlace con
aria-current="page"y el texto visible «(página actual)», como en el ejemplo. Quita ambas marcas de los otros enlaces. - Cada página tiene un único
h1que coincide con su tema.
Recorre después el ciclo completo: Inicio → Productos → Acerca de → Contacto → Inicio. Si algún enlace falla, no lo arregles todavía: anótalo, porque es exactamente el problema que ataca el paso siguiente.
Estoy atascado · el título de cada página
El <title> se lee fuera de contexto: en una pestaña estrecha, en un favorito, en un resultado de búsqueda. «Contacto» no dice de qué web es. Escribe primero lo específico y después el sitio, porque las pestañas se recortan por el final: Contacto | PixelStore.
Consultar · enlaces internos, especiales y a otra pestaña
Para saltar dentro de la misma página se enlaza un id:
<a href="#contacto">Ir a contacto</a>
<section id="contacto">
<h2>Contacto</h2>
</section>
id
Identifica un elemento de forma única dentro del documento. Dos elementos con el mismo id son un error, y uno que los validadores sí detectan.
<a href="mailto:contacto@example.com">Enviar correo</a>
<a href="tel:+34960000000">960 000 000</a>
tel: es especialmente útil en móvil, donde convierte el número en algo que se puede pulsar para llamar.
<a href="https://example.com"
target="_blank"
rel="noopener noreferrer">
Abrir recurso
</a>
target="_blank" abre en pestaña nueva y rel="noopener noreferrer" corta la referencia que la página abierta obtendría hacia la tuya. Los navegadores actuales ya lo hacen por su cuenta, pero escribirlo sigue siendo lo correcto: no dependes de la versión del navegador y dejas la intención por escrito.
Abrir pestañas automáticamente no debería ser la opción por defecto. Quien navega debería mantener el control de su navegación, y el botón de volver atrás deja de funcionar en una pestaña nueva.
Paso 6 · El laberinto de rutas · 25 min
Este ejercicio se hace en una carpeta independiente llamada practica-rutas, junto a mi-web, no dentro de ella. No muevas las cuatro páginas del proyecto. Así puedes practicar con otra estructura sin romper la navegación que acabas de terminar.
Crea estas carpetas y archivos desde el explorador de VS Code:
practica-rutas/
├── index.html
├── recursos/
│ └── ayuda.html
└── paginas/
├── productos.html
└── contacto.html
En cada HTML, reutiliza el esqueleto que ya conoces y escribe un title y un h1 que identifiquen el archivo, por ejemplo «Ayuda» en ayuda.html. Guarda los cuatro antes de probar los enlaces. Todos los destinos de este ejercicio son páginas HTML; las imágenes llegarán en la sesión siguiente.
6.1 · Ejemplo resuelto
Desde paginas/productos.html, enlazar recursos/ayuda.html.
- ¿Dónde estoy?
- En
practica-rutas/paginas/, porque ahí vive el archivo que escribe el enlace. - ¿Dónde está el destino?
- En
practica-rutas/recursos/. - ¿Cuál es el camino?
- Subir de
paginas/apractica-rutas/, y desde ahí bajar arecursos/. - Ruta
../recursos/ayuda.html
En paginas/productos.html, escribe <a href="../recursos/ayuda.html">Ayuda</a> dentro del body, guarda y abre la página en el navegador. Pulsa el enlace y comprueba que aparece el encabezado «Ayuda».
El procedimiento tiene tres pasos: dónde estoy, dónde voy y cuántos niveles subo antes de empezar a bajar.
6.2 · Ahora tú
- Desde
productos.html, volver aindex.html. - Desde
index.html, enlazarrecursos/ayuda.html. - Desde
contacto.html, enlazarproductos.html. - Desde
index.html, enlazarcontacto.html. - Desde
index.html, saltar a un encabezado conid="envios"en esa misma página. Crea primero el destino:<h2 id="envios">Envíos</h2>.
Escribe cada enlace en el archivo de origen, dentro del body, con un texto que describa el destino. Guarda y prueba uno a uno; comprueba el nombre del archivo en la barra de direcciones. Si el salto a «Envíos» apenas mueve la pantalla, comprueba que la dirección termina en #envios: el destino puede estar ya a la vista.
Consultar · qué significa cada forma de ruta
| Escribes | Significa |
|---|---|
pagina.html |
Un archivo en mi misma carpeta |
./pagina.html |
Lo mismo, escrito de forma explícita |
carpeta/pagina.html |
Bajar a una carpeta que está dentro de la mía |
../pagina.html |
Subir un nivel y buscar allí |
../../pagina.html |
Subir dos niveles |
#seccion |
Saltar a un elemento con ese id en esta misma página |
Ver soluciones
1 · ../index.html — subo de paginas/ a la raíz.
2 · recursos/ayuda.html — ya estoy en la raíz, solo bajo.
3 · productos.html — los dos están en paginas/, misma carpeta.
4 · paginas/contacto.html — bajo un nivel desde la raíz.
5 · #envios — sin nombre de archivo: el destino está en el documento actual.
Paso 7 · La prueba de portabilidad · 10 min
Comprobación de portabilidad · un minuto
Vuelve a tu proyecto de cuatro páginas, mi-web. Copia su carpeta completa a otra ubicación, abre el index.html de esa copia y navega por todos los enlaces. Si algo falla, revisa el origen del enlace, la ruta y si has copiado todos los archivos. El objetivo es comprobar que el sitio no depende de su ubicación inicial.
En la copia, recorre las cuatro páginas en los dos sentidos y anota qué enlaces has comprobado y cualquier fallo encontrado. Verifica en la barra de direcciones que sigues dentro de la copia y no has vuelto a los archivos originales. Un proyecto que solo funciona en la carpeta donde se escribió no está terminado.
Ampliación si has completado el trabajo
Primero termina y comprueba los siete pasos. Estos dos retos no añaden etiquetas nuevas: exigen resolver rutas sobre estructuras que no has diseñado tú y juzgar decisiones ajenas.
Reto 1 · Un árbol de carpetas que no es el tuyo
tienda/
├── index.html
├── assets/
│ ├── marca/
│ │ └── historia.html
│ └── docs/
│ └── garantia.html
├── catalogo/
│ ├── index.html
│ ├── portatiles.html
│ └── fichas/
│ └── portatil-14.html
└── legal/
└── privacidad.html
Escribe la ruta relativa para cada caso, aplicando los tres pasos del procedimiento. No compruebes en el navegador hasta haberlas escrito todas:
- Desde
catalogo/portatiles.html, enlazarfichas/portatil-14.html. - Desde
catalogo/fichas/portatil-14.html, enlazarassets/marca/historia.html. - Desde
catalogo/fichas/portatil-14.html, volver a la portada del sitio. - Desde
legal/privacidad.html, enlazarassets/docs/garantia.html. - Desde
index.html, enlazarcatalogo/index.html, incluyendo el nombre del archivo para poder probarlo al abrir el sitio localmente. - Desde
catalogo/index.html, enlazarprivacidad.html. - Desde
catalogo/fichas/portatil-14.html, enlazarportatiles.html.
Al terminar, crea una carpeta independiente tienda con esa estructura. En cada archivo escribe el esqueleto HTML y un encabezado que identifique la página. Añade los enlaces en sus archivos de origen y comprueba cuántas rutas acertaste a la primera. Las que falles, resuélvelas otra vez escribiendo los tres pasos por separado.
Reto 2 · La navegación de una web real
Abre tres sitios que uses y examina su menú principal con Ctrl + U o con el inspector. Responde por cada uno:
- ¿El bloque de navegación es un
nav, o son enlaces sueltos dentro de undiv? - ¿Los enlaces están dentro de una lista, de modo que se pueda anunciar cuántos son?
- ¿Se indica de alguna forma, además del color, cuál es la página actual?
- ¿Hay algún enlace cuyo texto no signifique nada fuera de contexto, del tipo «aquí», «leer más» o «ver»? Cópialo y propón una redacción que sí funcione leída en voz alta y aislada.
Los tres menús funcionan con el ratón. La pregunta de esta unidad es siempre la misma: qué le queda a quien no usa el ratón ni ve el color.
productos.html.Cierre
10 minutos · comprobación y recuerdo
Lista de verificación de la sesión
- La portada no salta ningún nivel de encabezado y tiene un solo
h1. - La elección entre
ulyolestá justificada por escrito en un comentario. - Las listas anidadas van dentro del
lidel que dependen. - El sitio tiene cuatro páginas con títulos distintos y descriptivos.
- La navegación es un
navcon una lista, y cada página identifica la actual conaria-currenty un texto visible. - El proyecto sigue funcionando al abrirlo desde una copia en otra ubicación.
Antes de cerrar · 3 minutos, sin mirar
- ¿Por qué está mal pasar de
h2ah4? - ¿Cuál es la diferencia de significado entre
strongyem? - ¿Cómo se escribe «<p>» para que aparezca literalmente en la página?
- Da la prueba de una frase que distingue
uldeol. - ¿Dónde va el
<ul>de una lista anidada? - ¿Desde dónde se resuelve una ruta relativa?
Ver respuestas
1 · Porque los encabezados forman el índice del documento y saltar deja un hueco: quien navegue por encabezados no sabrá de qué es parte ese h4.
2 · strong marca importancia; em marca énfasis, el matiz que cambiaría el tono al leer la frase en voz alta. Ninguno de los dos significa «negrita» o «cursiva».
3 · <p>.
4 · Si al reordenar los elementos la información sigue siendo cierta, es ul; si deja de serlo, es ol.
5 · Dentro del <li> del que depende, no detrás de él.
6 · Desde la carpeta del archivo que contiene el enlace, no desde la raíz del proyecto.
Comprobación individual 2 · últimos 5 minutos del cierre
Individual, sin IA y sin apuntes.
- Escribe una jerarquía con un
h1, dos apartados y un subapartado. - Decide si tres instrucciones ordenadas necesitan
ol,ulo tres párrafos y justifica. - Desde
paginas/acerca.html, enlazaindex.htmly explica cómo resolviste la ruta.