Nota: puede descargar una versión PDF / ePub / Mobi de este libro para poder leerlo sin conexión.

Introducción
¡Bienvenidos! Escribí este libro para ayudarlo a aprender HTML rápidamente y familiarizarse con los temas avanzados de HTML.
HTML, una abreviatura de Hyper Text Markup Language, es uno de los bloques de construcción más fundamentales de la Web.
HTML nació oficialmente en 1993 y desde entonces evolucionó a su estado actual, pasando de documentos de texto simples a aplicaciones web enriquecidas.
Este manual está dirigido a una amplia audiencia.
Primero, el principiante. Explico HTML desde cero de una manera sucinta pero completa, por lo que puede usar este libro para aprender HTML desde lo básico.
Luego, el profesional. HTML a menudo se considera algo secundario para aprender. Podría darse por sentado.
Sin embargo, muchas cosas son oscuras para muchas personas. Yo incluido. Escribí este manual para ayudarme a comprender el tema, porque cuando necesito explicar algo, es mejor que primero me asegure de conocer el tema de adentro hacia afuera.
Incluso si no escribe HTML en su trabajo diario, saber cómo funciona HTML puede ayudarlo a evitar algunos dolores de cabeza cuando necesite comprenderlo de vez en cuando, por ejemplo, al modificar una página web.
Puede comunicarse conmigo en Twitter @flaviocopes.
Mi sitio web es flaviocopes.com.
Índice de libros
- Prefacio
- Conceptos básicos de HTML
- El encabezado del documento
- El cuerpo del documento
- Etiquetas que interactúan con el texto
- Enlaces
- Etiquetas de contenedor y estructura de página HTML
- Formularios
- Mesas
- Etiquetas multimedia: audio y video
- iframes
- Imagenes
- Accesibilidad
PREFACIO
HTML es la base de la maravilla llamada Web.
Hay un poder increíble detrás de este conjunto de reglas bastante simple y limitado, que nos permite, desarrolladores, creadores, diseñadores, escritores y técnicos, crear documentos, aplicaciones y experiencias para personas de todo el mundo.
Mi primer libro HTML salió en 1997 y se llamó "HTML Unleashed". Un tomo grande, de muchas páginas y largo.
Han pasado más de 20 años, y HTML sigue siendo la base de la Web, con cambios mínimos desde entonces.
Claro, tenemos más etiquetas semánticas, HTML de presentación ya no existe, y CSS se ha encargado del diseño de las cosas.
El éxito de HTML se basa en una cosa: simplicidad .
Se resistió a ser secuestrado en un dialecto XML a través de XHTML, cuando finalmente la gente se dio cuenta de que eso era demasiado, demasiado complejo.
Lo hizo por otra característica que nos brinda: el perdón . Hay algunas reglas, cierto, pero después de aprenderlas, tienes mucha libertad.
Los navegadores aprendieron a ser resistentes y a intentar siempre hacer todo lo posible al analizar y presentar HTML a los usuarios.
Y toda la plataforma web hizo una cosa bien: nunca rompió la compatibilidad con versiones anteriores. Increíblemente, podemos volver a los documentos HTML escritos en 1991, y se ven más o menos como se veían entonces.
Incluso sabemos cuál fue la primera página web. Es esto: //info.cern.ch/hypertext/WWW/TheProject.html
Y puede ver la fuente de la página, gracias a otra gran característica de la Web y HTML: podemos inspeccionar el HTML de cualquier página web .
No dé esto por sentado. No conozco ninguna otra plataforma que nos brinde esta capacidad.
Las excepcionales herramientas de desarrollo integradas en cualquier navegador nos permiten inspeccionar e inspirarnos en HTML escrito por cualquier persona en el mundo.
Si es nuevo en HTML, este libro tiene como objetivo ayudarlo a comenzar. Si es un desarrollador web experimentado, este libro mejorará sus conocimientos.
Aprendí mucho mientras lo escribía, a pesar de que he trabajado con la Web durante más de 20 años, y estoy seguro de que también encontrará algo nuevo.
O volverás a aprender algo antiguo que olvidaste.
En cualquier caso, el objetivo del libro es serle útil y espero que tenga éxito.
Conceptos básicos de HTML
HTML es un estándar definido por WHATWG , un acrónimo de Web Hypertext Application Technology Working Group, una organización formada por personas que trabajan en el navegador web más popular. Esto significa que está básicamente controlado por Google, Mozilla, Apple y Microsoft.
En el pasado, el W3C (World Wide Web Consortium) era la organización encargada de crear el estándar HTML.
El control pasó informalmente de W3C a WHATWG cuando quedó claro que el impulso del W3C hacia XHTML no era una buena idea.
Si nunca ha oído hablar de XHTML, aquí tiene una breve historia. A principios de la década de 2000, todos creíamos que el futuro de la Web era XML (en serio). Entonces HTML pasó de ser un lenguaje de creación basado en SGML a un lenguaje de marcado XML.
Fue un gran cambio. Teníamos que conocer y respetar más reglas. Reglas más estrictas.
Con el tiempo, los proveedores de navegadores se dieron cuenta de que este no era el camino correcto para la Web y lo rechazaron, creando lo que ahora se conoce como HTML5.
El W3C no estuvo realmente de acuerdo en ceder el control de HTML, y durante años tuvimos 2 estándares en competencia, cada uno con el objetivo de ser el oficial. Finalmente, el 28 de mayo de 2019, el W3C hizo oficial que la versión HTML "verdadera" era la publicada por WHATWG.
Mencioné HTML5. Déjame explicarte esta pequeña historia. Lo sé, es un poco confuso hasta ahora, como ocurre con muchas cosas en la vida cuando hay muchos actores involucrados, pero también es fascinante.
Teníamos la versión 1 de HTML en 1993. Aquí está el RFC original.
HTML 2 siguió en 1995.
Obtuvimos HTML 3 en enero de 1997 y HTML 4 en diciembre de 1997.
Tiempos ocupados!
Pasaron más de 20 años, teníamos todo esto de XHTML, y finalmente llegamos a esta "cosa" de HTML5, que en realidad ya no es solo HTML .
HTML5 es un término que ahora define un conjunto completo de tecnologías, que incluye HTML pero agrega muchas API y estándares como WebGL, SVG y más.
La clave para entender aquí es la siguiente: ahora no existe (ya no) una versión HTML. Es un estándar de vida. Como CSS, que se llama "3", pero en realidad es un montón de módulos independientes desarrollados por separado. Como JavaScript, donde tenemos una nueva edición cada año, pero hoy en día, lo único que importa es qué características individuales implementa el motor.
Sí, lo llamamos HTML5, pero HTML4 es de 1997. Eso es mucho tiempo para cualquier cosa, y mucho menos para la web.
Aquí es donde ahora "vive" el estándar: //html.spec.whatwg.org/multipage.
HTML es el lenguaje de marcado que usamos para estructurar el contenido que consumimos en la Web.
El HTML se sirve al navegador de diferentes formas.
- Puede ser generado por una aplicación del lado del servidor que lo construye según la solicitud o los datos de la sesión, por ejemplo, una aplicación Rails o Laravel o Django.
- Puede ser generado por una aplicación del lado del cliente de JavaScript que genera HTML sobre la marcha.
- En el caso más simple, puede almacenarse en un archivo y ser servido al navegador por un servidor web.
Profundicemos en este último caso. Aunque en la práctica es probablemente la forma menos popular de generar HTML, sigue siendo esencial conocer los bloques de construcción básicos.
Por convención, un archivo HTML se guarda con una extensión .html
o .htm
.
Dentro de este archivo, organizamos el contenido mediante etiquetas .
Las etiquetas envuelven el contenido y cada etiqueta le da un significado especial al texto que envuelve.
Hagamos algunos ejemplos.
Este fragmento de HTML crea un párrafo con la p
etiqueta:
A paragraph of text
Este fragmento de HTML crea una lista de elementos usando la ul
etiqueta, que significa lista desordenada , y las li
etiquetas, lo que significa elemento de lista :
- First item
- Second item
- Third item
Cuando el navegador sirve una página HTML, las etiquetas se interpretan y el navegador representa los elementos de acuerdo con las reglas que definen su apariencia visual.
Algunas de esas reglas están integradas, como cómo se representa una lista o cómo se subraya un enlace en azul.
Algunas otras reglas las establece usted con CSS.
HTML no es una presentación. No se preocupa por cómo se ven las cosas . En cambio, se preocupa por lo que significan las cosas .
Depende del navegador determinar cómo se ven las cosas, con las directivas definidas por quién crea la página, con el lenguaje CSS.
Ahora, esos dos ejemplos que hice son fragmentos de HTML tomados fuera del contexto de una página.
Estructura de la página HTML
Hagamos un ejemplo de una página HTML adecuada.
Las cosas comienzan con la Declaración de tipo de documento (también conocida como doctype ), una forma de decirle al navegador que se trata de una página HTML y qué versión de HTML estamos usando.
El HTML moderno usa este tipo de documento:
Luego tenemos el html
elemento, que tiene una etiqueta de apertura y cierre:
...
La mayoría de las etiquetas vienen en pares con una etiqueta de apertura y una etiqueta de cierre. La etiqueta de cierre se escribe igual que la etiqueta de apertura, pero con un /
:
some content
Hay algunas etiquetas de cierre automático, lo que significa que no necesitan una etiqueta de cierre separada ya que no contienen nada en ellas .
La html
etiqueta de inicio se utiliza al principio del documento, justo después de la declaración del tipo de documento.
La html
etiqueta final es lo último que está presente en un documento HTML.
Dentro del html
elemento tenemos 2 elementos: head
y body
:
... ...
En su interior head
tendremos etiquetas que son imprescindibles para crear una página web, como el título, los metadatos y CSS y JavaScript internos o externos. En su mayoría, cosas que no aparecen directamente en la página, pero que solo ayudan al navegador (o bots como el bot de búsqueda de Google) a mostrarlo correctamente.
En su interior body
tendremos el contenido de la página. Las cosas visibles .
Etiquetas vs elementos
Mencioné etiquetas y elementos. ¿Cual es la diferencia?
Los elementos tienen una etiqueta de inicio y una etiqueta de cierre. En este ejemplo, usamos las p
etiquetas de inicio y cierre para crear un p
elemento:
A paragraph of text
Entonces, un elemento constituye el paquete completo :
- etiqueta de inicio
- contenido de texto (y posiblemente otros elementos)
- etiqueta de cierre
Si un elemento no tiene una etiqueta de cierre, solo se escribe con la etiqueta de inicio y no puede contener ningún contenido de texto.
Dicho esto, podría usar la etiqueta o el término del elemento en el libro que signifique lo mismo, excepto si menciono explícitamente la etiqueta inicial o la etiqueta final.
Atributos
La etiqueta inicial de un elemento puede tener fragmentos especiales de información que podemos adjuntar, llamados atributos .
Los atributos tienen la key="value"
sintaxis:
A paragraph of text
También puede usar comillas simples, pero usar comillas dobles en HTML es una buena convención.
Podemos tener muchos de ellos:
A paragraph of text
y algunos atributos son booleanos, lo que significa que solo necesita la clave:
Los atributos class
y id
son dos de los más comunes que encontrará utilizados.
Tienen un significado especial y son útiles tanto en CSS como en JavaScript.
La diferencia entre los dos es que un id
es único en el contexto de una página web; no se puede duplicar.
Las clases, por otro lado, pueden aparecer varias veces en varios elementos.
Además, an id
es solo un valor. class
puede contener varios valores, separados por un espacio:
A paragraph of text
Es común usar el guión -
para separar palabras en un valor de clase, pero es solo una convención.
Esos son solo dos de los posibles atributos que puede tener. Algunos atributos solo se utilizan para una etiqueta. Son altamente especializados.
Se pueden utilizar otros atributos de forma más general. Acaba de ver id
y class
, pero también tenemos otros, como los style
que se pueden usar para insertar reglas CSS en línea en un elemento.
No distingue entre mayúsculas y minúsculas
HTML no distingue entre mayúsculas y minúsculas. Las etiquetas se pueden escribir en mayúsculas o en minúsculas. En los primeros días, las gorras eran la norma. Hoy la minúscula es la norma. Es una convención.
Sueles escribir así:
A paragraph of text
así no:
A paragraph of text
Espacio en blanco
Bastante importante. En HTML, incluso si agrega varios espacios en blanco en una línea, el motor CSS del navegador la contrae.
Por ejemplo, la interpretación de este párrafo:
A paragraph of text
es lo mismo que esto:
A paragraph of text
y lo mismo que esto:
A paragraph of text
> Con la propiedad CSS de espacio en blanco puede cambiar el comportamiento de las cosas. Puede encontrar más información sobre cómo CSS procesa los espacios en blanco en las especificaciones de CSS.
Normalmente favorezco
A paragraph of text
o
A paragraph of text
Las etiquetas anidadas deben tener una sangría de 2 o 4 caracteres, según su preferencia:
A paragraph of text
- A list item
Nota: esta característica de "espacio en blanco no es relevante" significa que si desea agregar espacio adicional, puede enojarlo bastante. Le sugiero que use CSS para hacer más espacio cuando sea necesario.
Nota: en casos especiales, puede usar la
entidad HTML (un acrónimo que significa espacio sin interrupciones ); más sobre las entidades HTML más adelante. Creo que no se debe abusar de esto. Siempre se prefiere CSS para alterar la presentación visual.
EL ENCABEZADO DEL DOCUMENTO
La head
etiqueta contiene etiquetas especiales que definen las propiedades del documento.
Siempre está escrito antes de la body
etiqueta, justo después de la html
etiqueta de apertura :
... ...
Nunca usamos atributos en esta etiqueta. Y no escribimos contenido en él.
Es solo un contenedor para otras etiquetas. En su interior podemos tener una amplia variedad de etiquetas, dependiendo de lo que necesites hacer:
title
script
noscript
link
style
base
meta
La title
etiqueta
La title
etiqueta determina el título de la página. El título se muestra en el navegador y es especialmente importante ya que es uno de los factores clave para la optimización de motores de búsqueda (SEO).
La script
etiqueta
Esta etiqueta se utiliza para agregar JavaScript a la página.
Puede incluirlo en línea, usando una etiqueta de apertura, el código JavaScript y luego la etiqueta de cierre:
..some JS
O puede cargar un archivo JavaScript externo usando el src
atributo:
El type
atributo por defecto está establecido en text/javascript
, por lo que es completamente opcional.
Hay algo muy importante que saber sobre esta etiqueta.
A veces, esta etiqueta se utiliza en la parte inferior de la página, justo antes de la etiqueta de cierre . ¿Por qué? Por motivos de rendimiento.
La carga de scripts bloquea de forma predeterminada la representación de la página hasta que se analiza y carga el script.
Al colocarlo en la parte inferior de la página, el script se carga y ejecuta después de que toda la página ya se haya analizado y cargado, lo que brinda una mejor experiencia al usuario que mantenerlo en la head
etiqueta.
Mi opinión es que ahora esto es una mala práctica. Deja script
vivir en la head
etiqueta.
En JavaScript moderno, tenemos una alternativa que es más eficaz que mantener el script en la parte inferior de la página: el defer
atributo. Este es un ejemplo que carga un file.js
archivo, relativo a la URL actual:
Este es el escenario que activa la ruta más rápida a una página de carga rápida y JavaScript de carga rápida.
Nota: el async
atributo es similar, pero en mi opinión una opción peor que defer
. Describo por qué, con más detalle, en la página //flaviocopes.com/javascript-async-defer/
La noscript
etiqueta
Esta etiqueta se utiliza para detectar cuándo los scripts están deshabilitados en el navegador.
Nota: los usuarios pueden optar por deshabilitar los scripts de JavaScript en la configuración del navegador. O es posible que el navegador no los admita de forma predeterminada.
Se usa de manera diferente dependiendo de si se coloca en el encabezado del documento o en el cuerpo del documento.
Ahora estamos hablando del encabezado del documento, así que primero introduzcamos este uso.
En este caso, la noscript
etiqueta solo puede contener otras etiquetas:
link
etiquetasstyle
etiquetasmeta
etiquetas
para alterar los recursos servidos por la página, o la meta
información, si los scripts están deshabilitados.
En este ejemplo, configuré un elemento con la no-script-alert
clase para mostrar si los scripts están deshabilitados, como estaba display: none
por defecto:
... .no-script-alert { display: block; } ... ...
Resolvamos el otro caso: si se coloca en el cuerpo, puede contener contenido, como párrafos y otras etiquetas, que se representan en la interfaz de usuario.
La link
etiqueta
La link
etiqueta se utiliza para establecer relaciones entre un documento y otros recursos.
Se utiliza principalmente para vincular un archivo CSS externo a cargar.
Este elemento no tiene etiqueta de cierre.
Uso:
... ... ...
El media
atributo permite la carga de diferentes hojas de estilo según las capacidades del dispositivo:
También podemos vincularnos a otros recursos que no sean hojas de estilo.
Por ejemplo, podemos asociar un feed RSS usando
O podemos asociar un favicon usando:
Esta etiqueta se utiliza también para el contenido de varias páginas, para indicar la página anterior y siguiente usando rel="prev"
y rel="next"
. Principalmente para Google. A partir de 2019, Google anunció que ya no usa esta etiqueta porque puede encontrar la estructura de página correcta sin ella.
La style
etiqueta
Esta etiqueta se puede usar para agregar estilos al documento, en lugar de cargar una hoja de estilo externa.
Uso:
.some-css {}
Al igual que con la link
etiqueta, puede usar el media
atributo para usar ese CSS solo en el medio especificado:
.some-css {}
La base
etiqueta
Esta etiqueta se utiliza para establecer una URL base para todas las URL relativas contenidas en la página.
... ... ...
La meta
etiqueta
Las metaetiquetas realizan una variedad de tareas y son muy, muy importantes.
Especialmente para SEO.
meta
los elementos solo tienen la etiqueta de inicio.
La más básica es la description
metaetiqueta:
Esto podría ser utilizado por Google para generar la descripción de página en sus páginas de resultados, si encuentra que describe mejor la página que el contenido de páginas (no me pregunten cómo).
La charset
metaetiqueta se utiliza para establecer la codificación de caracteres de la página. utf-8
en la mayoría de los casos:
La robots
metaetiqueta indica a los robots del motor de búsqueda si deben indexar una página o no:
O si deben seguir enlaces o no:
También puede establecer nofollow en enlaces individuales. Así es como puede configurar nofollow
globalmente.
Puedes combinarlos:
El comportamiento predeterminado es index, follow
.
Se pueden usar otras propiedades, incluyendo nosnippet
, noarchive
, noimageindex
y más.
También puede decirle a Google en lugar de apuntar a todos los motores de búsqueda:
Y otros motores de búsqueda también pueden tener su propia metaetiqueta.
Hablando de eso, podemos decirle a Google que desactive algunas funciones. Esto evita la función de traducción en los resultados del motor de búsqueda:
La viewport
metaetiqueta se utiliza para decirle al navegador que establezca el ancho de la página en función del ancho del dispositivo.
Ver más sobre esta etiqueta.
Otra metaetiqueta bastante popular es la http-equiv="refresh"
. Esta línea le dice al navegador que espere 3 segundos, luego redirija a esa otra página:
El uso de 0 en lugar de 3 redirigirá lo antes posible.
Esta no es una referencia completa; Existen otras metaetiquetas menos utilizadas.
Después de esta introducción del título del documento, podemos comenzar a sumergirnos en el cuerpo del documento.
EL CUERPO DEL DOCUMENTO
Después de la etiqueta head de cierre, solo podemos tener una cosa en un documento HTML: el body
elemento.
... ...
Al igual que las etiquetas head
y html
, solo podemos tener una body
etiqueta en una página.
Dentro de la body
etiqueta tenemos todas las etiquetas que definen el contenido de la página.
Técnicamente, las etiquetas de inicio y finalización son opcionales. Pero considero una buena práctica agregarlos. Solo por claridad.
En los siguientes capítulos, definiremos la variedad de etiquetas que puede usar dentro del cuerpo de la página.
Pero antes, debemos introducir una diferencia entre elementos de bloque y elementos en línea.
Elementos de bloque vs elementos en línea
Los elementos visuales, los definidos en el cuerpo de la página, se pueden clasificar generalmente en 2 categorías:
- elementos de bloque (
p
,div
, elementos, las listas y los elementos de la lista dirección, ...) - elementos en línea (
a
,span
,img
, ...)
¿Cuál es la diferencia?
Los elementos de bloque, cuando se colocan en la página, no permiten otros elementos junto a ellos. Hacia la izquierda o hacia la derecha.
En cambio, los elementos en línea pueden colocarse junto a otros elementos en línea.
La diferencia también radica en las propiedades visuales que podemos editar usando CSS. Podemos alterar el ancho / alto, el margen, el relleno y el borde de los elementos del bloque. No podemos hacer eso para los elementos en línea.
Tenga en cuenta que usando CSS podemos cambiar el valor predeterminado para cada elemento, estableciendo una p
etiqueta para que esté en línea, por ejemplo, o span
para que sea un elemento de bloque.
Otra diferencia es que los elementos en línea pueden estar contenidos en elementos de bloque. Lo opuesto no es verdad.
Algunos elementos de bloque pueden contener otros elementos de bloque, pero depende. La p
etiqueta, por ejemplo, no permite tal opción.
ETIQUETAS QUE INTERACTUAN CON EL TEXTO
La p
etiqueta
Esta etiqueta define un párrafo de texto.
Some text
Es un elemento de bloque.
Dentro de él, podemos agregar cualquier elemento en línea que nos guste, como span
o a
.
No podemos agregar elementos de bloque.
No podemos anidar un p
elemento en otro.
De forma predeterminada, los navegadores diseñan un párrafo con un margen en la parte superior e inferior. 16px
en Chrome, pero el valor exacto puede variar entre navegadores.
Esto hace que dos párrafos consecutivos estén espaciados, replicando lo que pensamos de un "párrafo" en el texto impreso.
La span
etiqueta
Esta es una etiqueta en línea que se puede usar para crear una sección en un párrafo que se puede segmentar usando CSS:
A part of the text and here another part
La br
etiqueta
Esta etiqueta representa un salto de línea. Es un elemento en línea y no necesita una etiqueta de cierre.
Lo usamos para crear una nueva línea dentro de una p
etiqueta, sin crear un nuevo párrafo.
Y en comparación con la creación de un nuevo párrafo, no agrega espacio adicional.
Some text
A new line
Las etiquetas de encabezado
HTML nos proporciona 6 etiquetas de encabezado. De más importante al menos importante, tenemos h1
, h2
, h3
, h4
, h5
, h6
.
Normalmente, una página tendrá un h1
elemento, que es el título de la página. Entonces es posible que tenga uno o más h2
elementos según el contenido de la página.
Los encabezados, especialmente la organización del encabezado, también son esenciales para el SEO, y los motores de búsqueda los utilizan de diversas formas.
El navegador de forma predeterminada hará que la h1
etiqueta sea más grande y hará que el tamaño de los elementos sea más pequeño a medida que h
aumenta el número cercano :

Todos los títulos son elementos de bloque. No pueden contener otros elementos, solo texto.
La strong
etiqueta
Esta etiqueta se usa para marcar el texto dentro de ella como fuerte . Esto es muy importante, no es una pista visual, sino una pista semántica. Dependiendo del medio utilizado, su interpretación variará.
Por defecto, los navegadores ponen el texto en negrita en esta etiqueta .
La em
etiqueta
Esta etiqueta se usa para marcar el texto dentro de ella como enfatizado . Al igual que con strong
, no es una pista visual sino una pista semántica.
Los navegadores de forma predeterminada ponen el texto en cursiva .
Citas
La blockquote
etiqueta HTML es útil para insertar citas en el texto.
Los navegadores de forma predeterminada aplican un margen al blockquote
elemento. Chrome aplica un margen izquierdo y derecho de 40 px y un margen superior e inferior de 10 px.
La q
etiqueta HTML se utiliza para cotizaciones en línea.
Linea horizontal
No se basa realmente en texto, pero la hr
etiqueta se usa a menudo dentro de una página. Significa horizontal rule
, y agrega una línea horizontal en la página.
Útil para separar secciones en la página.
Bloques de código
La code
etiqueta es especialmente útil para mostrar código, porque los navegadores le dan una fuente monoespaciada.
Por lo general, eso es lo único que hacen los navegadores. Este es el CSS aplicado por Chrome:
code { font-family: monospace; }
Esta etiqueta generalmente está envuelta en una pre
etiqueta, porque el code
elemento ignora los espacios en blanco y los saltos de línea. Como la p
etiqueta.
Chrome da pre
este estilo predeterminado:
pre { display: block; font-family: monospace; white-space: pre; margin: 1em 0px; }
que evita el colapso de los espacios en blanco y lo convierte en un elemento de bloque.
Liza
Tenemos 3 tipos de listas:
- listas desordenadas
- listas ordenadas
- listas de definiciones
Las listas desordenadas se crean usando la ul
etiqueta. Cada elemento de la lista se crea con la li
etiqueta:
- First
- Second
Las listas ordenadas son similares, recién hechas con la ol
etiqueta:
- First
- Second
La diferencia entre los dos es que las listas ordenadas tienen un número antes de cada elemento:

Las listas de definiciones son un poco diferentes. Tienes un término y su definición:
-
Flavio
-
The name
-
Copes
-
The surname
Así es como los navegadores suelen representarlos:

Debo decir que rara vez los ves en la naturaleza, seguro que no tanto como ul
y ol
, pero a veces pueden ser útiles.
Otras etiquetas de texto
Hay una serie de etiquetas con fines de presentación:
- la
mark
etiqueta - la
ins
etiqueta - la
del
etiqueta - la
sup
etiqueta - la
sub
etiqueta - la
small
etiqueta - la
i
etiqueta - la
b
etiqueta
Este es un ejemplo de la representación visual de ellos que se aplica de forma predeterminada por los navegadores:

Quizás se pregunte, ¿en qué se b
diferencia de strong
? ¿Y en qué i
se diferencia de em
?
La diferencia radica en el significado semántico. Mientras que b
y i
son una pista directa para que el navegador haga un fragmento de texto en negrita o cursiva, strong
y le em
dé al texto un significado especial, y depende del navegador darle estilo. Que resulta ser exactamente lo mismo que b
y i
, por defecto. Aunque puedes cambiar eso usando CSS.
Hay una serie de otras etiquetas menos utilizadas relacionadas con el texto. Solo mencioné los que veo que se usan más.
ENLACES
Los enlaces se definen mediante la a
etiqueta. El destino del enlace se establece mediante su href
atributo.
Ejemplo:
click here
Entre la etiqueta de inicio y cierre tenemos el texto del enlace.
El ejemplo anterior es una URL absoluta. Los enlaces también funcionan con URL relativas:
click here
En este caso, al hacer clic en el enlace, el usuario se mueve a la /test
URL en el origen actual.
Cuidado con el /
personaje. Si se omite, en lugar de comenzar desde el origen, el navegador simplemente agregará la test
cadena a la URL actual.
Por ejemplo, estoy en la página //flaviocopes.com/axios/
y tengo estos enlaces:
/test
una vez hecho clic me lleva a//flaviocopes.com/test
test
una vez hecho clic me lleva a//flaviocopes.com/axios/test
Las etiquetas de enlace pueden incluir otras cosas dentro de ellas, no solo texto. Por ejemplo, imágenes:
o cualquier otro elemento, excepto otras etiquetas.
Si desea abrir el enlace en una nueva pestaña, puede utilizar el target
atributo:
open in new tab
ETIQUETAS DEL CONTENEDOR Y ESTRUCTURA DE LA PÁGINA HTML
Etiquetas de contenedor
HTML proporciona un conjunto de etiquetas de contenedor. Esas etiquetas pueden contener un conjunto no especificado de otras etiquetas.
Tenemos:
article
section
div
y puede resultar confuso comprender la diferencia entre ellos.
Veamos cuándo usar cada uno de ellos.
article
La etiqueta artículo identifica una cosa que puede ser independiente de otras cosas en una página.
Por ejemplo, una lista de publicaciones de blog en la página de inicio.
O una lista de enlaces.
A blog post
Read more Another blog post
Read more
No estamos limitados a listas: un artículo puede ser el elemento principal de una página.
A blog post
Here is the content...
Dentro de una article
etiqueta deberíamos tener un título ( h1
- h6
) y
section
Representa una sección de un documento. Cada sección tiene una etiqueta de título ( h1
- h6
), luego el cuerpo de la sección .
Ejemplo:
A section of the page
...
![]()
Es útil dividir un artículo extenso en diferentes secciones .
No se debe utilizar como elemento contenedor genérico. div
está hecho para esto.
div
div
es el elemento contenedor genérico:
...
A menudo, agrega un atributo class
o id
a este elemento para permitirle diseñar con CSS.
Usamos div
en cualquier lugar donde necesitemos un contenedor pero las etiquetas existentes no son adecuadas.
Etiquetas relacionadas con la página
nav
Esta etiqueta se utiliza para crear el marcado que define la navegación de la página. A esto normalmente agregamos una lista ul
o ol
:
- Home
- Blog
aside
La aside
etiqueta se utiliza para agregar un fragmento de contenido relacionado con el contenido principal.
Un cuadro donde agregar un presupuesto, por ejemplo. O una barra lateral.
Ejemplo:
some text..
A quote..
other text...
El uso aside
es una señal de que las cosas que contiene no forman parte del flujo regular de la sección en la que vive.
header
La header
etiqueta representa una parte de la página que es la introducción. Por ejemplo, puede contener una o más etiquetas de encabezado ( h1
- h6
), el eslogan del artículo, una imagen.
Article title
...
main
La main
etiqueta representa la parte principal de una página:
.... ....
footer
La footer
etiqueta se utiliza para determinar el pie de página de un artículo o el pie de página de la página:
.... Footer notes..
FORMAS
Los formularios son la forma en que puede interactuar con una página o una aplicación, construida con tecnologías web.
Tiene un conjunto de controles y cuando envía el formulario, ya sea con un clic en el botón "enviar" o mediante programación, el navegador enviará los datos al servidor.
Por defecto, este envío de datos hace que la página se recargue después de que se envían los datos, pero usando JavaScript puede alterar este comportamiento (no explicaremos cómo en este libro).
Se crea un formulario usando la form
etiqueta:
...
Por defecto, los formularios se envían mediante el método GET HTTP. Lo cual tiene sus inconvenientes y, por lo general, desea utilizar POST.
Puede configurar el formulario para usar POST cuando se envía mediante el method
atributo:
...
El formulario se envía, ya sea mediante GET o POST, a la misma URL donde reside.
Entonces, si el formulario está en la //flaviocopes.com/contacts
página, presionar el botón "enviar" hará una solicitud a esa misma URL.
Lo que puede resultar en que no ocurra nada.
Necesita algo del lado del servidor para manejar la solicitud, y normalmente "escucha" esos eventos de envío de formularios en una URL dedicada.
Puede especificar la URL a través del action
parámetro:
...
Esto hará que el navegador envíe los datos del formulario mediante POST a la /new-contact
URL en el mismo origen.
Si el origen (protocolo + dominio + puerto) es //flaviocopes.com
(el puerto 80 es el predeterminado), esto significa que se enviarán los datos del formulario //flaviocopes.com/new-contact
.
Hablé de datos. ¿Qué datos?
Los datos son proporcionados por los usuarios a través del conjunto de controles que están disponibles en la plataforma web:
- cuadros de entrada (texto de una sola línea)
- áreas de texto (texto de varias líneas)
- seleccionar cuadros (elija una opción de un menú desplegable)
- botones de radio (elija una opción de una lista siempre visible)
- casillas de verificación (elija cero, una o más opciones)
- cargas de archivos
- ¡y más!
Presentemos cada uno de ellos en la siguiente descripción general de los campos del formulario.
La input
etiqueta
El input
campo es uno de los elementos de formulario más utilizados. También es un elemento muy versátil y puede cambiar completamente el comportamiento según el type
atributo.
El comportamiento predeterminado es ser un control de entrada de texto de una sola línea:
Equivalente a usar:
Al igual que con todos los demás campos que siguen, debe asignar un nombre al campo para que su contenido se envíe al servidor cuando se envíe el formulario:
El placeholder
atributo se usa para que aparezca algún texto, en gris claro, cuando el campo está vacío. Útil para agregar una pista al usuario sobre lo que debe escribir:
El uso type="email"
validará en el lado del cliente (en el navegador) un correo electrónico para verificar su corrección (corrección semántica, sin garantizar que la dirección de correo electrónico exista) antes de enviarlo.
Contraseña
El uso type="password"
hará que cada clave ingresada aparezca como un asterisco (*) o un punto, útil para los campos que albergan una contraseña.
Números
Puede hacer que un elemento de entrada acepte solo números:
Puede especificar un valor mínimo y máximo aceptado:
El step
atributo ayuda a identificar los pasos entre diferentes valores. Por ejemplo, esto acepta un valor entre 10 y 50, en pasos de 5:
Campo escondido
Los campos se pueden ocultar al usuario. Todavía se enviarán al servidor al enviar el formulario:
Esto se usa comúnmente para almacenar valores como un token CSRF, usado para seguridad e identificación de usuarios, o incluso para detectar robots que envían spam, utilizando técnicas especiales.
También puede usarse para identificar una forma y su acción.
Establecer un valor predeterminado
Todos esos campos aceptan un valor predefinido. Si el usuario no lo cambia, este será el valor enviado al servidor:
Si establece un marcador de posición, ese valor aparecerá si el usuario borra el valor del campo de entrada:
Enviar formulario
El type="submit"
campo es un botón que, una vez presionado por el usuario, envía el formulario:
El value
atributo establece el texto en el botón, que si falta muestra el texto "Enviar":
Validación de formularios
Los navegadores proporcionan la funcionalidad de validación del lado del cliente a los formularios.
Puede configurar los campos según sea necesario, asegurándose de que estén completos y aplicar un formato específico para la entrada de cada campo.
Veamos ambas opciones.
Establecer campos según sea necesario
El required
atributo le ayuda con la validación. Si el campo no está configurado, la validación del lado del cliente falla y el navegador no envía el formulario:
Aplicar un formato específico
Describí el type="email"
campo de arriba. Valida automáticamente la dirección de correo electrónico de acuerdo con un formato establecido en la especificación.
En el type="number"
campo, mencioné el atributo min
y max
para limitar los valores ingresados a un intervalo.
Puedes hacer más.
Puede aplicar un formato específico en cualquier campo.
El pattern
atributo le da la capacidad de establecer una expresión regular para validar el valor.
Recomiendo leer mi Guía de expresiones regulares en flaviocopes.com/javascript-regular-expressions/.
patrón = "//.*"
Otros campos
Cargas de archivos
Puede cargar archivos desde su computadora local y enviarlos al servidor usando un type="file"
elemento de entrada:
Puede adjuntar varios archivos:
Puede especificar uno o más tipos de archivos permitidos mediante el accept
atributo. Esto acepta imágenes:
Puede usar un tipo MIME específico, como application/json
o establecer una extensión de archivo como .pdf
. O configure varias extensiones de archivo, como esta:
Botones
Los type="button"
campos de entrada se pueden usar para agregar botones adicionales al formulario, que no son botones de envío:
Se utilizan para hacer algo mediante programación, utilizando JavaScript.
Hay un campo especial representado como un botón, cuya acción especial es borrar todo el formulario y devolver el estado de los campos al inicial:
Botones de radio
Los botones de opción se utilizan para crear un conjunto de opciones, de las cuales se presiona una y todas las demás se desactivan.
El nombre proviene de radios de automóviles antiguos que tenían este tipo de interfaz.
Define un conjunto de type="radio"
entradas, todas con el mismo name
atributo y value
atributo diferente :
Una vez enviado el formulario, la color
propiedad de datos tendrá un valor único.
Siempre hay un elemento marcado. El primer elemento es el que está marcado por defecto.
Puede establecer el valor preseleccionado mediante el checked
atributo. Puede usarlo solo una vez por grupo de entradas de radio.
Casillas de verificación
Similar a las cajas de radio, pero permiten elegir múltiples valores, o ninguno en absoluto.
Define un conjunto de type="checkbox"
entradas, todas con el mismo name
atributo y value
atributo diferente :
Todas esas casillas de verificación estarán desmarcadas de forma predeterminada. Utilice el checked
atributo para habilitarlos al cargar la página.
Dado que este campo de entrada permite múltiples valores, al enviar el formulario, los valores se enviarán al servidor como una matriz.
Fecha y hora
Tenemos algunos tipos de entrada para aceptar valores de fecha.
El type="date"
campo de entrada permite al usuario ingresar una fecha y muestra un selector de fecha si es necesario:
El type="time"
campo de entrada permite al usuario ingresar una hora y muestra un selector de hora si es necesario:
El type="month"
campo de entrada permite al usuario ingresar un mes y un año:
El type="week"
campo de entrada permite al usuario ingresar una semana y un año:
Todos esos campos permiten limitar el rango y el paso entre cada valor. Recomiendo consultar MDN para conocer los pequeños detalles sobre su uso.
El type="datetime-local"
campo le permite elegir una fecha y una hora.
Aquí hay una página para probarlos todos: //codepen.io/flaviocopes/pen/ZdWQPm
Selector de color
Puede permitir que los usuarios elijan un color usando el type="color"
elemento:
Establece un valor predeterminado mediante el value
atributo:
El navegador se encargará de mostrarle un selector de color al usuario.
Rango
Este elemento de entrada muestra un elemento deslizante. Las personas pueden usarlo para pasar de un valor inicial a un valor final:
Puede proporcionar un paso opcional:
Teléfono
El type="tel"
campo de entrada se usa para ingresar un número de teléfono:
El principal punto de venta para usar tel
over text
es en el móvil, donde el dispositivo puede elegir mostrar un teclado numérico.
Especifique un pattern
atributo para validación adicional:
URL
El type="url"
campo se usa para ingresar una URL.
Puedes validarlo usando el pattern
atributo:
La textarea
etiqueta
El textarea
elemento permite a los usuarios ingresar texto de varias líneas. En comparación con input
, requiere una etiqueta final:
Puede establecer las dimensiones usando CSS, pero también usando los atributos rows
y cols
:
Al igual que con las otras etiquetas de formulario, el name
atributo determina el nombre en los datos enviados al servidor:
La select
etiqueta
Esta etiqueta se utiliza para crear un menú desplegable.
El usuario puede elegir una de las opciones disponibles.
Cada opción se crea usando la option
etiqueta. Agrega un nombre a la selección y un valor a cada opción:
Red Yellow
Puede configurar una opción deshabilitada:
Red Yellow
Puede tener una opción vacía:
None Red Yellow
Las opciones se pueden agrupar mediante la optgroup
etiqueta. Cada grupo de opciones tiene un label
atributo:
Red Yellow Blue Green Pink
MESAS
En los primeros días de la web, las tablas eran una parte muy importante de los diseños de construcción.
Más tarde fueron reemplazados por CSS y sus capacidades de diseño, y hoy contamos con herramientas poderosas como CSS Flexbox y CSS Grid para crear diseños. Las tablas ahora se usan solo para, adivinen qué, ¡construir tablas!
La table
etiqueta
Usted define una tabla usando la table
etiqueta:
Dentro de la tabla definiremos los datos. Razonamos en términos de filas, lo que significa que agregamos filas a una tabla (no columnas). Definiremos columnas dentro de una fila.
Filas
Se agrega una fila usando la tr
etiqueta, y eso es lo único que podemos agregar a un table
elemento:
Esta es una tabla con 3 filas.
La primera fila puede tomar el papel del encabezado.
Encabezados de columna
El encabezado de la tabla contiene el nombre de una columna, normalmente en negrita.
Piense en un documento de Excel / Google Sheets. El A-B-C-D...
encabezado superior .

Definimos el encabezado usando la th
etiqueta:
Column 1
Column 2
Column 3
El contenido de la tabla
El contenido de la tabla se define mediante td
etiquetas, dentro de los otros tr
elementos:
Column 1
Column 2
Column 3
Row 1 Column 1
Row 1 Column 2
Row 1 Column 3
Row 2 Column 1
Row 2 Column 2
Row 2 Column 3
Así es como los navegadores lo renderizan, si no agrega ningún estilo CSS:

Añadiendo este CSS:
th, td { padding: 10px; border: 1px solid #333; }
hace que la mesa se parezca más a una mesa adecuada:

Abarcar columnas y filas
Una fila puede decidir abarcar 2 o más columnas, usando el colspan
atributo:
Column 1
Column 2
Column 3
Row 1 Columns 1-2
Row 1 Column 3
Row 2 Columns 1-3

O puede abarcar más de 2 o más filas, utilizando el rowspan
atributo:
Column 1
Column 2
Column 3
Rows 1-2 Columns 1-2
Row 1 Column 3
Row 2 Column 3

Encabezados de fila
Antes expliqué cómo se pueden tener encabezados de columna, usando la th
etiqueta dentro de la primera tr
etiqueta de la tabla.
Puede agregar una th
etiqueta como el primer elemento dentro de un tr
que no es el primero tr
de la tabla, para tener encabezados de fila:
Column 2
Column 3
Row 1
Col 2
Col 3
Row 2
Col 2
Col 3

Más etiquetas para organizar la mesa
Puede agregar 3 etiquetas más en una tabla para tenerla más organizada.
Esto es mejor cuando se utilizan tablas grandes. Y también para definir correctamente un encabezado y un pie de página.
Esas etiquetas son
thead
tbody
tfoot
Envuelven las tr
etiquetas para definir claramente las diferentes secciones de la tabla. He aquí un ejemplo:
Column 2
Column 3
Row 1
Col 2
Col 3
Row 2
Col 2
Col 3
Footer of Col 1
Footer of Col 2

Título de la tabla
Una tabla debe tener una caption
etiqueta que describa su contenido. Esa etiqueta debe colocarse inmediatamente después de la table
etiqueta de apertura :
Dogs age
Dog
Age
Roger
7
ETIQUETAS MULTIMEDIA: AUDIO
YVIDEO
En esta sección quiero mostrarles las etiquetas audio
y video
.
La audio
etiqueta
Esta etiqueta le permite incrustar contenido de audio en sus páginas HTML.
Este elemento puede transmitir audio, tal vez usando un micrófono a través de getUserMedia()
, o puede reproducir una fuente de audio a la que hace referencia usando el src
atributo:
De forma predeterminada, el navegador no muestra ningún control para este elemento. Lo que significa que el audio se reproducirá solo si está configurado en reproducción automática (más sobre esto más adelante) y el usuario no puede ver cómo detenerlo o controlar el volumen o moverse por la pista.
Para mostrar los controles integrados, puede agregar el controls
atributo:
Los controles pueden tener una máscara personalizada.
Puede especificar el tipo MIME del archivo de audio mediante el type
atributo. Si no se configura, el navegador intentará determinarlo automáticamente:
Un archivo de audio por defecto no se reproduce automáticamente. Agregue el autoplay
atributo para reproducir el audio automáticamente:
Nota: los navegadores móviles no permiten la reproducción automática
El loop
atributo reinicia la reproducción de audio a las 0:00 si está configurado; de lo contrario, si no está presente, el audio se detiene al final del archivo:
También puede reproducir un archivo de audio silenciado usando el muted
atributo (no estoy realmente seguro de cuál es la utilidad de esto):
Con JavaScript, puede escuchar varios eventos que suceden en un audio
elemento, los más básicos de los cuales son:
play
cuando el archivo comienza a reproducirsepause
cuando se pausó la reproducción de audioplaying
cuando el audio se reanuda desde una pausaended
cuando se alcanzó el final del archivo de audio
La video
etiqueta
Esta etiqueta le permite incrustar contenido de video en sus páginas HTML.
Este elemento puede transmitir vídeo, usando una cámara web a través de getUserMedia()
o WebRTC , o puede jugar una fuente de vídeo que se hace referencia mediante el src
atributo:
Por defecto, el navegador no muestra ningún control para este elemento, solo el video.
Lo que significa que el video se reproducirá solo si está configurado en reproducción automática (más sobre esto más adelante) y el usuario no puede ver cómo detenerlo, pausarlo, controlar el volumen o saltar a una posición específica en el video.
Para mostrar los controles integrados, puede agregar el controls
atributo:
Los controles pueden tener una máscara personalizada.
Puede especificar el tipo MIME del archivo de video usando el type
atributo. Si no se configura, el navegador intentará determinarlo automáticamente:
Un archivo de video por defecto no se reproduce automáticamente. Agregue el autoplay
atributo para reproducir el video automáticamente:
Algunos navegadores también requieren que el muted
atributo se reproduzca automáticamente. El video se reproduce automáticamente solo si está silenciado:
El loop
atributo reinicia la reproducción de video a las 0:00 si está configurado; de lo contrario, si no está presente, el video se detiene al final del archivo:
Puede configurar una imagen para que sea la imagen del póster:
Si no está presente, el navegador mostrará el primer fotograma del video tan pronto como esté disponible.
Puede configurar los atributos width
y height
para establecer el espacio que ocupará el elemento para que el navegador pueda dar cuenta de él y no cambie el diseño cuando finalmente se cargue. Toma un valor numérico, expresado en píxeles.
Con JavaScript, puede escuchar varios eventos que suceden en un video
elemento, los más básicos de los cuales son:
play
cuando el archivo comienza a reproducirsepause
cuando el video estaba en pausaplaying
cuando el video se reanuda desde una pausaended
cuando se alcanzó el final del archivo de video
IFRAMES
La iframe
etiqueta nos permite incrustar contenido procedente de otros orígenes (otros sitios) en nuestra página web.
Técnicamente, un iframe crea un nuevo contexto de navegación anidado. Esto significa que nada en el iframe no interfiere con la página principal y viceversa. JavaScript y CSS no se "filtran" hacia / desde iframes.
Muchos sitios usan iframes para realizar varias cosas. Es posible que esté familiarizado con Codepen, Glitch u otros sitios que le permiten codificar en una parte de la página y verá el resultado en un cuadro. Eso es un iframe.
Creas uno de esta manera:
También puede cargar una URL absoluta:
Puede establecer un conjunto de parámetros de ancho y alto (o establecerlos usando CSS); de lo contrario, el iframe usará los valores predeterminados, un cuadro de 300x150 píxeles:
Srcdoc
El srcdoc
atributo le permite especificar algo de HTML en línea para mostrar. Es una alternativa src
, pero reciente y no es compatible con Edge 18 y versiones anteriores, y en IE:
Salvadera
El sandbox
atributo nos permite limitar las operaciones permitidas en los iframes.
Si lo omitimos, todo está permitido:
Si lo configuramos en "", no se permite nada:
Podemos seleccionar qué permitir agregando opciones en el sandbox
atributo. Puede permitir varios agregando un espacio entre ellos. Aquí hay una lista incompleta de las opciones que puede usar:
allow-forms
: permitir enviar formulariosallow-modals
permitir abrir ventanas modales, incluida la llamadaalert()
en JavaScriptallow-orientation-lock
permitir bloquear la orientación de la pantallaallow-popups
permitir ventanas emergentes, usowindow.open()
ytarget="_blank"
enlacesallow-same-origin
tratar el recurso que se carga como el mismo origenallow-scripts
permite que el iframe cargado ejecute scripts (pero no cree ventanas emergentes).allow-top-navigation
da acceso al iframe al contexto de navegación de nivel superior
Permitir
Actualmente experimental y solo compatible con navegadores basados en Chromium, este es el futuro del uso compartido de recursos entre la ventana principal y el iframe.
Es similar al sandbox
atributo, pero nos permite permitir características específicas, que incluyen:
accelerometer
da acceso a la interfaz del acelerómetro de la API de sensoresambient-light-sensor
da acceso a la interfaz de Sensors API AmbientLightSensorautoplay
permite reproducir automáticamente archivos de video y audiocamera
permite acceder a la cámara desde la API getUserMediadisplay-capture
permite acceder al contenido de la pantalla utilizando la API getDisplayMediafullscreen
permite acceder al modo de pantalla completageolocation
permite acceder a la API de geolocalizacióngyroscope
da acceso a la interfaz del giroscopio de la API de sensoresmagnetometer
da acceso a la interfaz del magnetómetro API Sensorsmicrophone
da acceso al micrófono del dispositivo mediante la API getUserMediamidi
permite el acceso a la API Web MIDIpayment
da acceso a la API de solicitud de pagospeaker
permite el acceso a la reproducción de audio a través de los altavoces del dispositivousb
da acceso a la API WebUSB.vibrate
da acceso a la API de vibraciónvr
da acceso a la API WebVR
Referente
Al cargar un iframe, el navegador le envía información importante sobre quién lo está cargando en el Referer
encabezado (observe el sencillo r
, un error tipográfico con el que debemos vivir).
El error ortográfico del referente se originó en la propuesta original del científico informático Phillip Hallam-Baker de incorporar el campo en la especificación HTTP. El error ortográfico se grabó en piedra en el momento de su incorporación en el documento de normas de solicitud de comentarios RFC 1945
El referrerpolicy
atributo nos permite configurar el referente para enviarlo al iframe al cargarlo. El referente es un encabezado HTTP que le permite a la página saber quién lo está cargando. Estos son los valores permitidos:
no-referrer-when-downgrade
es el predeterminado y no envía la referencia cuando la página actual se carga a través de HTTPS y el iframe se carga en el protocolo HTTPno-referrer
no envía el encabezado de referenciaorigin
se envía la referencia, y solo contiene el origen (puerto, protocolo, dominio), no el origen + ruta que es la predeterminadaorigin-when-cross-origin
al cargar desde el mismo origen (puerto, protocolo, dominio) en el iframe, el referente se envía en su forma completa (origen + ruta). De lo contrario, solo se envía el origensame-origin
la referencia se envía solo cuando se carga desde el mismo origen (puerto, protocolo, dominio) en el iframestrict-origin
envía el origen como referencia si la página actual se carga a través de HTTPS y el iframe también se carga en el protocolo HTTPS. No envía nada si el iframe se carga a través de HTTPstrict-origin-when-cross-origin
envía el origen + ruta como referente cuando se trabaja en el mismo origen. Envía el origen como referencia si la página actual se carga a través de HTTPS y el iframe también se carga en el protocolo HTTPS. No envía nada si el iframe se carga a través de HTTPunsafe-url
: envía el origen + ruta como referencia incluso cuando se cargan recursos desde HTTP y la página actual se carga a través de HTTPS
IMAGENES
Las imágenes se pueden mostrar usando la img
etiqueta.
Esta etiqueta acepta un src
atributo, que usamos para establecer la fuente de la imagen:
Podemos utilizar un amplio conjunto de imágenes. Los más comunes son PNG, JPEG, GIF, SVG y más recientemente WebP.
El estándar HTML requiere alt
que esté presente un atributo para describir la imagen. Esto lo utilizan los lectores de pantalla y también los robots de los motores de búsqueda:
Puede configurar los atributos width
y height
para establecer el espacio que ocupará el elemento, de modo que el navegador pueda tenerlo en cuenta y no cambie el diseño cuando esté completamente cargado. Toma un valor numérico, expresado en píxeles.
La figure
etiqueta
La figure
etiqueta se usa a menudo junto con la img
etiqueta.
figure
es una etiqueta semántica que se utiliza a menudo cuando desea mostrar una imagen con un título. Lo usas así:
A nice dog
La figcaption
etiqueta envuelve el texto de la leyenda.
Imágenes receptivas usando srcset
El srcset
atributo le permite configurar imágenes receptivas que el navegador puede usar según la densidad de píxeles o el ancho de la ventana, de acuerdo con sus preferencias. De esta manera, solo puede descargar los recursos que necesita para renderizar la página, sin descargar una imagen más grande si está en un dispositivo móvil, por ejemplo.
Aquí hay un ejemplo, donde damos 4 imágenes adicionales para 4 tamaños de pantalla diferentes:
En el srcset
, usamos la w
medida para indicar el ancho de la ventana.
Dado que lo hacemos, también necesitamos usar el sizes
atributo:
En este ejemplo, la (max-width: 500px) 100vw, (max-width: 900px) 50vw, 800px
cadena del sizes
atributo describe el tamaño de la imagen en relación con la ventana gráfica, con varias condiciones separadas por un punto y coma.
La condición de los medios max-width: 500px
establece el tamaño de la imagen en correlación con el ancho de la ventana gráfica. En resumen, si el tamaño de la ventana es <500px, representa la imagen al 100% del tamaño de la ventana.
Si el tamaño de la ventana es mayor pero < 900px
, representa la imagen al 50% del tamaño de la ventana.
Y si es aún más grande, renderiza la imagen a 800px.
La vw
unidad de medida puede ser nueva para usted y, en resumen, podemos decir que 1 vw
es el 1% del ancho de la ventana, por lo que 100vw
es el 100% del ancho de la ventana.
Un sitio web útil para generar srcset
imágenes cada vez más pequeñas es //responsivebreakpoints.com/.
La picture
etiqueta
HTML también nos da la picture
etiqueta, que hace un trabajo muy similar srcset
y las diferencias son muy sutiles.
Se utiliza picture
cuando, en lugar de ofrecer una versión más pequeña de un archivo, desea cambiarlo por completo. O sirva un formato de imagen diferente.
El mejor caso de uso que encontré es cuando se sirve una imagen WebP, que es un formato que aún no es ampliamente compatible. En la picture
etiqueta, especifica una lista de imágenes, y se usarán en orden, por lo que en el siguiente ejemplo, los navegadores que admiten WebP usarán la primera imagen y, en caso contrario, utilizarán JPG:
La source
etiqueta define uno (o más) formatos para las imágenes. La img
etiqueta es la alternativa en caso de que el navegador sea muy antiguo y no admita la picture
etiqueta.
En la source
etiqueta interior picture
puede agregar un media
atributo para establecer consultas de medios.
El ejemplo que sigue funciona como el ejemplo anterior con srcset
:
Pero ese no es su caso de uso, porque como puede ver es mucho más detallado.
La picture
etiqueta es reciente, pero ahora es compatible con todos los navegadores principales, excepto Opera Mini e IE (todas las versiones).
ACCESIBILIDAD
Es importante que diseñemos nuestro HTML teniendo en cuenta la accesibilidad.
Tener HTML accesible significa que las personas con discapacidades pueden usar la Web. Hay usuarios totalmente ciegos o con discapacidad visual, personas con problemas de pérdida auditiva y una multitud de otras discapacidades diferentes.
Desafortunadamente, este tema no toma la importancia que necesita y no parece tan interesante como otros.
¿Qué pasa si una persona no puede ver su página, pero aún quiere consumir su contenido? Primero, ¿cómo lo hacen? No pueden usar el mouse, usan algo llamado lector de pantalla . No tienes que imaginarte eso. Puede probar uno ahora: Google ofrece la extensión gratuita ChromeVox Chrome. La accesibilidad también debe cuidar de permitir que las herramientas seleccionen elementos fácilmente o naveguen por las páginas.
Las páginas web y las aplicaciones web no siempre se construyen con la accesibilidad como uno de sus primeros objetivos, y tal vez la versión 1 no sea accesible, pero es posible hacer que una página web sea accesible después del hecho. Cuanto antes, mejor, pero nunca es demasiado tarde.
Es importante y en mi país, los sitios web creados por el gobierno u otras organizaciones públicas deben ser accesibles.
¿Qué significa esto para hacer accesible un HTML? Permítanme ilustrar las principales cosas en las que debe pensar.
Nota: hay varias otras cosas de las que debe ocuparse, que pueden incluirse en el tema CSS, como colores, contraste y fuentes. O cómo hacer que las imágenes SVG sean accesibles. No hablo de ellos aquí.
Utilice HTML semántico
El HTML semántico es muy importante y es una de las principales cosas de las que debe ocuparse. Permítanme ilustrar algunos escenarios comunes.
Es importante utilizar la estructura correcta para las etiquetas de encabezado. Lo más importante es h1
, y usa números más altos para los menos importantes, pero todos los encabezados del mismo nivel deben tener el mismo significado (piénselo como una estructura de árbol)
h1 h2 h3 h2 h2 h3 h4
Utilice strong
y en em
lugar de b
y i
. Visualmente se ven iguales, pero los dos primeros tienen más significado asociado a ellos. b
y i
son elementos más visuales.
Las listas son importantes. Un lector de pantalla puede detectar una lista y proporcionar una descripción general, y luego dejar que el usuario elija entrar en la lista o no.
Una tabla debe tener una caption
etiqueta que describa su contenido:
Dogs age
Dog
Age
Roger
7
Usar alt
atributos para imágenes
Todas las imágenes deben tener una alt
etiqueta que describa el contenido de la imagen. No es solo una buena práctica, es requerido por el estándar HTML y su HTML sin él no está validado.
También es bueno para los motores de búsqueda, si es un incentivo para que lo agregue.
Usa el role
atributo
El role
atributo le permite asignar roles específicos a los diversos elementos de su página.
Puede asignar muchos roles diferentes: complementario, lista, elemento de lista, principal, navegación, región, pestaña, alerta, aplicación, artículo, banner, botón, celda, casilla de verificación, información de contenido, diálogo, documento, fuente, figura, formulario, cuadrícula, cuadrícula, encabezado, img, cuadro de lista, fila, grupo de filas, búsqueda, cambiar, tabla, panel de pestañas, cuadro de texto, temporizador.
Es mucho y para la referencia completa de cada uno de ellos les doy este enlace MDN. Pero no es necesario asignar un rol a cada elemento de la página. Los lectores de pantalla pueden inferir de la etiqueta HTML en la mayoría de los casos. Por ejemplo, usted no necesita agregar una etiqueta de papel para etiquetas semánticas como nav
, button
, form
.
Tomemos el nav
ejemplo de la etiqueta. Puede usarlo para definir la navegación de la página de esta manera:
- Home
- Blog
Si se viera obligado a usar una div
etiqueta en lugar de nav
, usaría el navigation
rol:
- Home
- Blog
Así que aquí tienes un ejemplo práctico: role
se usa para asignar un valor significativo cuando la etiqueta no transmite el significado ya.
Usa el tabindex
atributo
El tabindex
atributo le permite cambiar el orden en que al presionar la tecla Tab se seleccionan los elementos "seleccionables". De forma predeterminada, solo los enlaces y los elementos de formulario son "seleccionables" mediante la navegación con la tecla Tab (y no es necesario configurarlos tabindex
).
Agregar tabindex="0"
hace que un elemento sea seleccionable:
...
En su tabindex="-1"
lugar, usar elimina un elemento de esta navegación basada en pestañas, y puede ser bastante útil.
Usa los aria
atributos
ARIA es un acrónimo que significa Accessible Rich Internet Applications y define la semántica que se puede aplicar a los elementos.
aria-label
Este atributo se usa para agregar una cadena para describir un elemento.
Ejemplo:
...
Utilizo este atributo en la barra lateral de mi blog, donde tengo un cuadro de entrada para la búsqueda sin una etiqueta explícita, ya que tiene un atributo de marcador de posición.
aria-labelledby
Este atributo establece una correlación entre el elemento actual y el que lo etiqueta.
Si sabe cómo input
se puede asociar un label
elemento a un elemento, eso es similar.
Pasamos la identificación del elemento que describe el elemento actual.
Ejemplo:
The description of the product
...
aria-describedby
Este atributo nos permite asociar un elemento con otro elemento que sirve como descripción.
Ejemplo:
Pay now Clicking the button will send you to our Stripe form!
Usa aria-hidden para ocultar contenido
Me gusta un diseño minimalista en mis sitios. Mi blog, por ejemplo, es principalmente contenido, con algunos enlaces en la barra lateral. Pero algunas cosas en la barra lateral son solo elementos visuales que no se suman a la experiencia de una persona que no puede ver la página. Como la imagen de mi logotipo o el selector de tema oscuro / brillante.
Agregar el "
atributo les dirá a los lectores de pantalla que ignoren ese elemento.
Donde aprender mas
Esta es solo una introducción al tema. Para obtener más información, recomiendo estos recursos:
- //www.w3.org/TR/WCAG20/
- //webaim.org
- //developers.google.com/web/fundamentals/accessibility/
Ha llegado al final del manual HTML.

Haga clic aquí para obtener una versión PDF / ePub / Mobi de este libro para leer sin conexión .