GUÍA HTML

HTML

Programas recomendados 💽

CONTENIDO

ETIQUETAS DE FORMULARIO
ETIQUETAS MULTIMEDIA

Historia de HTML - Resumen

Año 1989:

Tim Berners-lee invento la World Wide Web

La web se desarrolló entre marzo y diciembre de 1989 por el inglés Tim Berners-Lee con ayuda del belga Robert Cailliau mientras trabajaban en el CERN en Ginebra, Suiza y se publicó como una propuesta formal en el año 1991. Desde entonces, Berners-Lee ha jugado un papel activo guiando el desarrollo de estándares Web (como el lenguajes de marcado HTML)


Año 1991:

Tim Berners-lee invento HTML

El origen de HTML se remonta al año 1980, cuando Tim Berners-Lee, trabajador del CERN (Organización Europea para la investigación Nuclear) propuso un nuevo sistema de “hipertexto” permitía que la información relacionada con los documentos eléctronicos que estaban visualizando. El primer documento formal con la descripción de HTML se publicó en 1991 bajo el nombre de HTML Tags y todavía hoy puede ser consultado online a modo de reliquia informática.


Año 1993:

Dave Raggett redacta HTML

Dave Ragget es un especialista en informática inglés que ha desempeñado un papel importante en la implementación de la World Wide Web desde 1992. Ha sido miembro W3C desde 1995. Despues de conocer a Tim Berners-Lee en 1992 ha sido paritcipe activo en el desarrollo de World Wide Web. La primera propuesta oficial para que HTML fuera un estándar se realizó en 1993 por parte del IETF. En esta época se definieron las etiquetas para imágenes, tablas y formularios.


Año 1995:

HTML 2.0 definido por HTML Working Group del IETF
( Internet Engineering Task Force )

El HTML Working Group fue un grupo de trabajo del IETF que estuvo desde 1994 y 1996, y un grupo de trabajo del W3C desde 1995 a 2015. El HTMLWG tenía miembros de una comunidad diversa, como proveedores de contenido, autores de contenido y cualquier persona interesada en el trabajo sobre HTML.


Año 1997:

Recomendaciones de W3C: HTML 3.2

Aparecieron nuevas etiquetas, como:

  • center
  • font
  • script
  • style
  • div

Año 1999:

Recomendaciones de W3C: HTML 4.01

Editada por Dave Ragget y otros miembros. Se considera obsoleta desde marzo de 2018. Después de años de lucha entre los fabricantes de la W3C intentaba poner un poco de orden con las versiones de HTML 4 y HTML 4.01 en los años 1998 y 1999. En HTML 4.01 la W3C empieza con la separación de la estructura del documento con la de la representación visual. Así crea un lenguaje paralelo al HTML 4.01 llamado CSS


Año 2000:

Recomendaciones de W3C: XHTML 1.0

Debido a la falta de coherencia en la definición de los esquemas derivados del SGML, la W3C decide definir un nuevo subesquema de SGML denominado XML. Este esquema sería un esquema bien definido y cerrado, lo cual podría proporcionar documentos coherentes y sin posibilidad de dobles interpretaciones. XHTML 1.0 viene a ser lo mismo que HTML 4.01 pero con una definición basada sobre XML en vez de sobre SGML.


Año 2008:

Primer borrador público de HTML5 WHATWG

Una vez publicado XHTML 1.0 los esfuerzos de la W3C se dirigen a la creación de XHTML 2.0 como evolución del lenguaje.
Nuevamente la W3C se mete en un trabajo teórico, lo que hace que algunos “desidentes” (oportunistas para otros), monten un grupo paralelo conocido como WHATWG. La actividad del WHATWG se centra en el estándar HTML5, cuyo primer borrador oficial se publicó el 22 de enero del 2008.


Año 2012:

Estándar de vida HTML5 WHATWG

En enero de 2011, el WHATWG cambió el nombre de su estándar de vida “HTML5” a “HTML”. No obstante, el W3C continúa con su proyecto de lanzar HTML5. En Julio del 2012, el WHATWG y W3C decidieron un grado de separación. W3C continuará el trabajo de especificación HTML5, enfocándose en un único estándar definito y WHATWG continuará su trabajo con HTML5 como un “estándar de vida”.


2014:

Recomendaciones de W3C: HTML5

En diciembre de 2012, el W3C designó HTML5 como recomendación candidata. En septiembre de 2014, W3C trasladó HTML5 a recomendación propuesta. El criterio para avanzar a la recomendación del W3C es “dos implementaciones 100% completas y totalmente interoperables”. En 28 de octubre de 2014, HTML5 se publicó como una recomendación W3C estable, significa que el proceso de especificación está completo.


Año 2016:

Recomendaciones candidata de W3C: HTML5.1

Cosas nuevas que traen dentro de esta recomendación candidata:
×<picture>:
×<dialog>:
×<summary>: y <details>:
Entre otras que tienen una función sobre la semántica del documento.


Año 2017

Recomendaciones W3C: HTML5.1 2da edición

Esta edición llega con algunas revisiones sobre la anterior publicación.
Es posible leer el documento de HTML 5.1 (segunda edición) en el sitio web del W3C. Con posterioridad, el 3 de Octubre de 2017 se convierte en estándar https://www.w3.org/TR/html51/.


Año 2017

Recomendaciones W3C: HTML5.2

En diciembre del año 2017 se define como estándar la versión 5.2 de HTML se volvió la recomendación oficial de la W3C. Porsupuesto que se incorporarón nuevos aspectos, mejorando la seguridad en las etiquetas de link como determinar si el contenido de la etiqueta va a ser cargado y usado. También se actualizarón aspectos de accesibilidad de varios atributos como https://www.w3.org/TR/wai-aria-1.1/

Editores recomendados

Editor Descarga Linux Windows Mac Licencia Código fuente
MIT microsoft/vscode
Protected
MIT atom/atom
GPLv3 notepad-plus-plus/notepad-plus-plus
Navegador Descarga Linux Windows Mac Licencia Código fuente
icon Protected
Protected
MPLv2.0 mozilla-central
Freeware
MPLv2.0 brave/brave-browser

¿Qué es HTML?

Cuando accedemos a una página web, debemos tener en cuenta que lo que realmente está ocurriendo es que nuestro navegador web está pidiendo un documento de texto al sistema ( máquina ) donde está almacenada esa página web.

En cualquier navegador, existe una opción para ver el código fuente de la página web, la cúal nos mostrará exactamente el texto de dicho documento. El navegador normalmente no nos muestra esa información literalmente, sino que interpreta y va dibujando los elementos de una página web.

El documento que lee el navegador está escrito en un lenguaje de marcado llamado HTML, que son las siglas de HyperTextMarkup Language ( Lenguaje de marcado de hypertexto ), o lo que es lo mismo, un lenguaje de etiqueta que permite incluir o hacer referencia a todo tipo de información.

como funciona html
EL navegador procesa un documento html y lo interpreta

¿Qué es una etiqueta HTML?

En el navegador Chrome, puedes pulsar la combinación de teclas CTRL+U para ver el código fuente de la página en la que te encuentras. Dicho documento esta formado por etiquetas, que son la base del lenguaje HTML.

Existen muchas etiquetas y cada una se utiliza para contener información y darle un cierto significado a dicha información, dependiendo de la etiqueta que se trate. Las etiquetas HTML tienen la siguiente estructura:

etiqueta html
Etiqueta HTML, el navegador procesa una etiqueta y muestra su contenido

En HTML no se puede utilizar cualquier palabra como etiqueta ( en el ejemplo anterior, es incorrecto utilizar la etiqueta <<etiqueta>> ). En su lugar, existen una serie de etiquetas concretas, cada una de ellas con su finalidad y características propias, que tendremos que utilizar según requiera la ocasión. Por norma general, las etiquetas deben cerrarse para indicar donde finaliza su contenido.

¿Qué es la semántica?

Uno de los principales objetivos de HTML5 es introducir información en un documento de forma que sea semántico y no visual. Esto quiere decir que todos los aspectos visuales deben dejarse para el apartado de presentación, que se gestiona desde el lenguaje CSS. En el documento HTML5 debe aparecer información correctamente individualizada, de modo que leer una página HTML comprendamos su significado, y si queremos cambiar la apariencia, lo hagamos desde CSS. Esto es lo que comúnmente se conoce como separación de la presentación del contenido.

Un ejemplo donde se ve claramente esto es con la etiqueta b de HTML4 y anteriores. Dicha etiqueta se utilizaba para poner en negrita ( bold ) un texto específico:

<p>Hola, quiero resaltar esta <b>palabra</b>.</p> 

En este caso, se está utilizando una propiedad de presentación ( visual ) en el HTML, algo que no se debe hacer en HTML5. La misión de HTML5 es mantener sólo contenido de información semántica. Por ello, la forma correcta de hacer lo mismo que en el ejemplo anterior para HTML5 es la siguiente:

<p>Hola, quiero resaltar esta <strong>palabra</strong>.</p> 

En este nuevo ejemplo, se remplaza la etiqueta b ( negrita, característica de presentación ) por strong, una etiqueta que indica información semántica ( importante, característica semántica ). De esta forma, en el documento de HTML5 sólo se está añadiendo información particular sobre fragmentos de texto, y si queremos dotar de presentación visual, lo haremos desde CSS:

strong {
  font-weight: bold;
  color: black;
}

De esta forma podríamos cambiar el estilo ( negrita, colores, tipo de letra, etc... ) independientemente de la información y contenido que existe en HTML. Incluso podríamos establecer el mismo estilo en el texto, para que visualmente se vea todo de forma uniforme, pero sin embargo, al leer la página HTML, el navegador sabrá siempre que fragmentos de texto son más importantes, aunque tenga el mismo estilo visual.

El objetivo de crear documentos HTML semánticos es que, aunque estamos acostumbrados a crear páginas para usuarios (o más concretamente para navegadores), cada vez tenemos una internet capaz de procesar información de forma autónoma. Muestra de ello son, por ejemplo, los robot o crawlers de buscadores como Googlebot ( el robot de búsqueda de Google ) que es capaz de acceder a páginas web para analizar la información de la misma, entenderla e indexarla en su buscador.

Estructura de una etiqueta HTML

Como habíamos mencionado, las páginas webs son realmente documentos de texto que contienen información y muchas etiquetas HTML que indican que tipo de contenido se va a mostrar en el navegador al cargar la página web.

La estructura de las etiquetas HTML tiene el siguiente formato:

estructura de una etiqueta

Etiqueta HTML

La parte esencial de una etiqueta HTML es lo que se denomina etiqueta de apertura. Se trata de escribir el nombre de la etiqueta en cuestión, colocándola entre los caracteres < ... >. Aunque no es terminantemente obligatorio, se recomienda y considera una buena costumbre escribir las etiquetas siempre en minúsculas.

En HTML5 no se puede colocar cualquier palabra como etiqueta, sino que existe una serie específica de etiquetas, cada una con una misión y objetivo diferente. Por ejemplo, la etiqueta <strong>:

<strong>contenido</strong>

Como se puede ver, la mayoría de las etiquetas requieren que se especifique un cierre de etiqueta para saber donde termina de actuar. Se caracteriza en que se escribe igual que la etiqueta de apertura, pero con la barra diagonal inmediatamente después del símbolo menor que </...>.

Atributo

En algunas etiquetas HTML, existen algunos atributos específicos (que pueden ser opcionales u obligatorios). Los atributos determinan cierta información sobre la etiqueta (o su modo de actuar) y generalmente van asociados a un valor determinado. Este par atributo-valor se escribe después del nombre de la etiqueta, separándola por espacio y antes del carácter > de la etiqueta de apertura:

<strong id="dato">contenido</strong>

En este caso, la etiqueta sería strong, el atributo id, el valor de id sería dato, mientras que el contenido de la etiqueta es contenido. Por otro lado, y al igual que las etiquetas, cada atributo tiene una misión y comportamiento concreto. Aunque los valores pueden ir rodeados por comillas simples, se recomienda escribir el valor siempre entre comillas dobles.

Existen 3 tipos de atributos dependiendo de sus valores:

Contenido de la etiqueta

En el interior de la etiqueta HTML (después de la etiqueta de apertura y antes de la etiqueta de cierre) se debe colocar la información que queremos que sea afectada por dicha etiqueta. En el siguiente ejemplo se ve como contiene un fragmento de texto:

<strong id="dato" class="clase1" lang="es">Contenido de texto</strong>

Ten en cuenta que una etiqueta puede tener varios pares atributo-valor, como se ve en el ejemplo anterior, pero nunca se debe repetir el mismo atributo en una misma etiqueta varias veces, ya que sobreescribiría al anterior. El orden de los atributos no importa. Más adelante veremos que tipos de atributos existen y para que sirven.

Sin embargo, una etiqueta puede contener desde un fragmento de texto hasta un grupo de etiquetas. Esto depende mucho de la etiqueta a utilizar, y se verá más claro en los siguientes apartados sobre etiquetas. Un posible ejemplo sería el siguiente:

<div id="grupo-principal">
  <strong>Contenido importante</strong>
</div>

Podemos observar en el ejemplo anterior que dentro de la etiqueta div vemos que no sólo hay un fragmento de texto, sino que además incluye otra etiqueta, strong en este caso. Esto ocurre en las etiquetas de agrupación, que iremos viendo pronto.

Comentario HTML

Los comentarios son una práctica muy común y habitual en los desarrolladores o programadores. Se basa en introducir breves fragmentos de texto que el navegador ignorará y no tendrá en cuenta a la hora de crear la página visualmente, pero que a nosotros nos sirven de ayuda para documentar algún detalle, explicar algo importante o simplemente introducir algún comentario que consideremos relevante:

<!-- Esto es un comentario de ejemplo que el navegador ignorará --> 

Como se puede ver, para introducir comentarios en el código HTML, basta con escribir los fragmentos de texto entre <!-- --> para que sea ignorado.

Atributos comunes en HTML

Como hemos visto, HTML está formado por etiquetas. Muchas etiquetas. Cada etiqueta tiene una misión y tarea y contendrá cierto contenido relacionado con su misión. Y además tenemos los atributos, que son palabras clave de texto que modifican ligeramente el comportamiento de la etiqueta que lo contiene.

A continuación, vemos una lista de atributos comunes que pueden ser utilizados en cualquier etiqueta HTML.

Atributo Valor Descripción
nombre Establece un identificador a la etiqueta HTML (sólo una por página con ese nombre).
nombre Establece una clase (género) a una etiqueta HTML (puede repetirse por página).
idioma Indica el idioma del contenido de la etiqueta HTML.
yes | no Indica si el contenido de la etiqueta es traducible o no.
título Mensaje mostrado en un tooltip (aviso emergente) al mover el mouse por encima.
nombre Metadatos en la propia etiqueta. Se puede usar cualquier nombre con prefijo data-.
atajo Combinación de teclas que puede pulsar el usuario para activar el elemento.
dir ltr | rtl Establece la direccionalidad del texto (left to right o right to left)
style estilos Aplica propiedades CSS directamente al elemento en cuestión.

Atributo id (identificador)

En HTML, podemos darle un identificador a una etiqueta HTML y de esta forma darle un nombre. Simplemente, añadimos el atributo id y colocamos el nombre como valor de ese atributo. Ese nombre de identificador no debe empezar nunca por un número y puede contener letras mayúsculas, minúsculas, signos especiales (guión, guión bajo...) o números:

<div id="pagina">
  <div>Aquí irá anuncio</div>
  <div id="articulo">Aquí irá el contenido de texto del artículo</div>
  <div>Aquí irá anuncio</div>
<div>

Los id se suelen indicar cuando queremos localizar zonas específicas que sabemos que no se van a repetir en esa misma página.

Uno de los detalles importantes de los id, es que no pueden haber dos con el mismo nombre en una página. Ejemplos correctos de id podrían ser <<pagina>> (para contener toda la página completa), <<comentarios>> (para contener toda la zona de comentarios de la página) o <<header>> (para contener la parte con el logo y la cabecera de la página). Lo que debe quedar claro de los ids, es que no se puede tener el mismo id en más de una etiqueta HTML por página.

Más adelante en el apartado de enlaces o hipervínculos, veremos que también podemos utilizarlo para acceder rápidamente, desde un enlace, a esa sección concreta de la página.


Atributo de class (clases)

Las clases funcionan de forma muy similar a los id, pero son mucho más flexibles. En primero lugar, no tienen la limitación de los ids, por lo que su nombre se puede repetir y no es necesario que aparezca sólo una vez por página.

De hecho, la idea de las clases es establecer géneros o tipos de etiquetas, a los que les asociemos características comunes. Sigamos con el ejemplo anterior y añadiendole clases (atributo class) a las etiquetas:

<div id="pagina">
  <div class="anuncio">Aquí irá anuncio</div>
  <div id="articulo">Aquí irá el contenido de texto del artículo</div>
  <div class="anuncio">Aquí irá anuncio</div>
<div>

Como podemos ver, al tener la misma clase <<anuncio>>, podemos realizar acciones para todas las etiquetas de ese tipo y no tener que hacerlo para cada una de ellas por separado. Un ejemplo de eso donde se puede ver bien su utilidad, es respecto a utilizar ids y clases para dar estilos CSS, donde aplicaremos unos estilos concretos a todas las etiquetas HTML que tengan la clase <<anuncio>>.

Además, una etiqueta puede tener múltiples clases, no una sola. Esto nos da más flexibilidad a la hora de crear clases específicas:

<div id="pagina">
  <div class="anuncio primero">Aquí irá anuncio</div>
  <div id="articulo">Aquí irá el contenido de texto del artículo</div>
  <div class="anuncio ultimo">Aquí irá anuncio</div>
<div> 

Como se puede observar, en la primera etiqueta del anuncio hemos aplicado las clases anuncio y primero, mientras que en el último anuncio hemos aplicado las clases anuncio y último. Esto nos permitiría asignar atributos comunes al anuncio en la clase anuncio, y atributos que sólo dependan de la posición donde esta colocado en primero y/o ultimo.

Recordar siempre que para indicar múltiples clases se debe separar las clases por espacio dentro de un mismo atributo class. No se debe nunca indicar varios atributos class en una misma etiqueta, ya que el navegador lo que haría es sobreescribir el valor del último atributo class con los de los primeros.


Atributo lang (idioma)

Mediante el atributo lang podemos indicar el idioma del contenido de la etiqueta. El valor de dicho atributo tendrá que ser el código código ISO 639-1 del idioma al que queremos hacer referencia. Aunque en principio podemos hacer esto en cualquier etiqueta HTML, es obligatorio hacerlo en la etiqueta html ya que es la etiqueta que engloba todo el documento.

De esta forma, estaremos estableciendo el idioma en el que se encuentra el documento:

<html lang="es">
  <head>
    <!-- ... -->
  </head>
  <body>
    <!-- ... -->
  </body>
</html>

El atributo translate (traducción)

También podemos utilizar el atributo translate, el cuál acepta los valores yes y no (yes, es su valor predeterminado) en las etiquetas HTML para indicar si el contenido de un texto es o no <<traducible

Si por ejemplo, tenemos un texto que no queremos que sea posible traducirlo, sino que queremos que conserve el texto original, podemos hacer lo siguiente:

<p>
  Hace algunos días fuí a ver la nueva película de 
  <span translate="no">StarWars</span>.
</p>

De esta forma, le indicamos al navegador o a herramientas como Google translator, que esa frase específica no se debe traducir porque es el título que queremos que aparezca siempre. Por defecto, si no se indica el atributo translate en una etiqueta, es como si tuviera el valor yes por defecto.


El atributo title (títulos o tooltips)

En la mayoría de las etiquetas HTML podemos indicar el atributo title para especificar un mensaje de texto que aparezca cuando el usuario detenga el mouse sobre el elemento un instante. Al usuario le aparece un pequeño aviso emergente, generalmente con fondo amarillo y letras negras, que muestra el texto en cuestión.

De esta forma, podemos usar este atributo sobre cualquier tipo de etiqueta HTML, aunque se suele usar sobre todo en las etiquetas de imágenes img, de abreviaturas abbr entre otras:

<div>
  <img 
    src="//robohash.org/1"
    alt="robot aleatorio."
    title="¡Este es un robot generado al azar!" />
<div>
<p>El lenguaje de etiquetas <abbr title="HyperText Markup Language">HTML</abbr></p>

Es importante no confundir el atributo title con el atributo alt de las imágenes, que generalmente se tiende a confundir porque puede tener objetivos idénticos, pero no siempre es así. El atributo alt debe ser un texto alternativo que describa la imagen en el caso de que no se pueda ver por alguna razón (por ejemplo cuando no es accesible en un servidor web), mientras que el atributo title puede describir la imagen, pero no tiene porque ser una descripción alternativa.

De la misma forma, podemos utilizar el atributo title para otros elementos, como por ejemplo, etiquetas <a> (enlaces) u otras.


EL atributo data- (metadatos)

En HTML, veremos que la mayoría de los metadatos (información adicional) se incluyen en la etiqueta head del documento HTML. Sin embargo, también se puede incluir metadatos en la propia etiqueta a través de un atributo con prefijo data-.

De esta forma, podemos inventarnos cualquier atributo que contenga información, habitualmente orientada a utilizarse desde javascript:

<article
  id="auto"
  data-marca="ford"
  data-modelo="fiesta"
  data-color="azul"
  data-asientos="4">
</article> 

En este ejemplo guardamos información sobre un vehiculo en la etiqueta <article>, a la que podremos acceder a través de javascript mediante la propiedad .dataset y a su vez a la propiedad con el nombre que se indicó seguido del prefijo data-:

const article = document.getElementById("auto");

article.dataset.marca; // ford
article.dataset.modelo; // fiesta
article.dataset.color; // azul
article.dataset.asientos; // 4 

Atajo de teclado (accesskey)

En HTML es posible añadir el atributo accesskey para indicar un atajo de teclado que puede pulsar el usuario para activar ese elemento. En el siguiente ejemplo, tenemos 4 elementos: dos campos de texto, un enlace y un botón. Cada uno de ellos tiene su atributo accesskey para cuando el usuario pulse ALT + tecla, se active ese elemento:

<form>
  <!-- Campo de texto -->
  <input accesskey="N" placeholder="Campo 1 (ALT+N)" />
  <!-- Campo de texto -->
  <input accesskey="A" placeholder="Campo 2 (ALT+A)" />
  <!-- Enlace HTML -->
  <a accesskey="L" href="#">Enlace (ALT+L)</a>
  <!-- Botón HTML -->
  <button accesskey="B">Botón (ALT+B)</button>
</form>

De esta forma, si pulsamos ALT+N, se colocará el foco en el primer campo de texto, si pulsamos ALT+L será como si hubieramos pulsado el enlace con el ratón y si pulsamos ALT+B se pulsará el botón.

Sin embargo, una de las desventajas de este sistema, es que no está demasiado unificado entre navegadores y sistemas. Por ejemplo, si establecemos un atajo con la tecla A, es decir, con el atributo accesskey, tendríamos que pulsar las siguientes combinaciones de teclas:

Navegador Plataforma Windows Plataforma Linux Plataforma Mac
Chrome ALT + A ALT + A CTRL + ALT + A
Firefox ALT + SHIFT + A ALT + SHIFT + A CTRL + A
IE/Edge ALT + A No aplicable No aplicable
Safari No aplicable No aplicable CTRL + ALT + A
Opera ALT + A ALT + A CTRL + ALT + A

Esto hace que la combinación de teclas para un usuario poco familiarizado con este proceso, además de la incertidumbre de no saber que navegador va a utilizar, hagan que este proceso sea poco práctico.

Estructura del documento HTML

Observa que tenemos una zona superior que es el tipo de documento. Luego, abrimos la etiqueta html que contendrá dos partes principales: la cabecera del documento y el cuerpo del documento:

estructura-de-un-documento-html
Estructura de un documento html

El DOCTYPE (tipo de documento)

El !DOCTYPE o tipo de documento es una etiqueta especial que se escribe en la primera línea del documento HTML. Debe ir especificado siempre para que el navegador sepa que tipo de documento HTML se trata.

Antes de comenzar un documento HTML, en su primera línea, es siempre conveniente indicar el tipo de documento a utilizar. Para indicar que se trata de un documento HTML5 colocaremos la siguiente linea:

<!DOCTYPE html> 

En versiones anteriores, como HTML4 o XHTML, el tipo de documento se especificaba en la primera línea de una forma más compleja. Hoy en día estos DOCTYPE no tiene sentido indicarlos:

<DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"

Los navegadores, antes de comenzar a dibujar una página web, lo primero que hacen es leer la línea donde se indica el tipo de documento del que se trata. De esta forma, el navegador ya está preparado para actuar adaptándose perfectamente a cada tipo de documento.

En el caso de no indicar el tipo de documento en una página HTML, el navegador entra en el modo Quirk mode (modo peculiar o modo no estándar), donde se activa un modo de retrocompatibilidad con páginas antiguas, que procesará de forma diferente muchas etiquetas HTML o propiedades CSS.

La etiqueta head (metadatos)

Cuando hablamos de la etiqueta head de un documento HTML, muchas veces se suele decir cabeceera HTML. Sin embargo, esta cabecera del documento HTML no es una parte visual de la página web, sino una parte de nuestro código HTML donde se incluyen ciertas etiquetas de metadatos, es decir, unas etiquetas que establecen ciertos datos que no tienen que verse necesariamente de forma visual.

Algunos ejemplos de metadatos de un documento HTML podrían ser los siguientes:

También es el lugar indicado para incluir etiquetas que relacionen el documento actual con otros documentos externos (por ejemplo, para cargar estilos definidos en archivos .css o cargar funcionalidades definidos en archivos javascript .js)

La etiqueta body (cuerpo)

La otra parte principal de un documento HTML es la etiqueta body. Todos los elementos visuales de una página se encuentran en el interior de la etiqueta body, por lo que es una de las partes más importantes de una página web. Esta sección va inmediatamente después del cierre de la etiqueta /head.

En definitiva, la estructura de un documento HTML debe tener, como mínimo algo similar a lo siguiente:

<!DOCTYPE html>
<html lang="es">
<head>
  <title>Título del documento</title>
  <meta charset="utf8">
</head>
<body>
 ...
</body>
</html>

En muchos editores, disponen de una extensión llamada EMMET, basta con guardar el archivo con extensión .html y escribir el símbolo ! y pulsar TAB para que se nos autocomplete este fragmento de código base. Más adelante veremos más a detalle algunas de las etiquetas anteriores que aún no se han mencionado.

Validación de errores HTML

Cuando estás empezando con tu primer documento HTML y quieres comprobar si hay errores o existe algún error en el código HTML, vamos a ver las herramientas que nos pueden ayudar a validar cada documento HTML, a diferencia de los programadores que están acostumbrados a los lenguajes de programación, donde si tienes un error en el código, se debe corregir antes de continuar, ya que en caso contrario no podremos utilizar ese programa.

En los lenguajes de marcas como HTML, los navegadores son más permisivos, ya que en el caso de encontrar un error, intentan deducir lo que realmente se quería indicar y continuan con la carga del documento. De esta forma tenemos un método más flexible a errores, pero también es un arma de doble filo donde podemos experimentar problemas derivados.

Tipos de problemas

En nuestro documento con código HTML podemos tener varios tipos de problemas. Vamos a desglosarlos en una tabla de categorías:

Tipo de error Descripción
Sintaxis El código está mal escrito y es incorrecto. El navegador podría no mostrar correctamente ciertos detalles.
Accesibilidad El código no tiene porque estar mal escrito o ser incorrecto, sin embargo, tiene problemas que harán que no se vean bien en determinados dispositivos o que un usuario no-vidente o similar no pueda utilizarla.
posicionamiento (SEO) El código no tiene porque estar mal escrito o ser incorrecto, sin embargo, los buscadores como Google no aceptarán favorablemente la página y podría tener un rendimiento menor de posicionamiento SEO.
Usabilidad El código no tiene poque estar mal escrito o ser incorrecto, sin embargo, la forma en la que se disponen los elementos o está pensado puede fustrar al usuario final que utiliza la web.

Validar error de sintaxis HTML

Para asegurarnos que nuestro código está correctamente escrito, podemos utilizar un Validador HTML, que no es más que un sistema que analiza nuestro código y nos dice el número de errores que tenemos, junto a una breve descripción del mismo para facilitar su correción.

Este proceso de validación se puede realizar mediante la herramienta oficial HTML Validator de W3C, un validador de código HTML5, donde podemos validar nuestra página de tres forma diferentes:

Además, si nos fijamos en la parte superior de la herramienta oficial de W3C, veremos que hay 3 casillas disponibles para marcar, con las que podemos agregar nuevas características que se mostrarán tras la validación. Dicha características son las siguientes:

Otras vías de validación

Existen otros mecanismos de validación al margen de esta herramienta de W3C. Podemos encontrar formas alternativas para validar documentos HTML desde el editor Visual Studio Code, desde una terminal de texto o desde scripts de NodeJS:

Herramienta Descripción
W3C Validation Extensión de VS Code para validar documentos mediante HTML Validator
W3C Web Validator Extensión de VS Code para validar problemas en tu código HTML en un clic.
W3C Link Validator Paquete NPM para validar HTML o buscar links rotos desde la terminal.

Cabecera de un documento (HEAD)

Como sabemos la estructura de un documento HTML debía contener siempre dos etiquetas HTML principales: la cabecera de la página head y el cuerpo de la página o body. El primero de ellos, se encarga de contener etiquetas de metadatos ( información sobre el documento ) así como establecer relaciones con otros documentos. El segundo de ellos, se encarga de la parte visual que se mostrará al usuario en su navegador.

Existen varias etiquetas que se suelen utilizar en esta sección de cabecera (head) del documento:

Etiqueta Atributos Descripción
title Título de la página (pestaña o título del navegador o en buscadores).
base href, target URL base del documento ( usado para gestionar rutas relativas ).
link href, hreflang, rel, media, type Establece una relación del documento actual con otro externo.
meta name, content, http-equiv, charset Establece un metadato específico en el documento actual.
style media, type Crea estilos CSS que afectarán únicamente al documento actual.
script src, type, charset, async, defer Indica un script a cargar o ejecutar en la página actual.

Existen dos etiquetas que tradicionalmente solían incluirse en la cabecera de un documento HTML. Sin embargo, actualmemte también pueden utilizarse en el cuerpo de la página. Hablamos de las etiquetas style y script.

La etiqueta title

En el interior de la etiqueta head es aconsejable, como mínimo, indicar siempre las siguientes dos etiquetas:

<head>
  <title>Título del documento</title>
  <meta charset="utf-8">
<head>

La etiqueta title sirve para indicar un título para el documento actual. Es una etiqueta que debe aparecer de forma obligatoria en todo documento HTML, ya que siempre debería tener un título. El título puede servir para varias cosas:

En este ejemplo, incluimos también la etiqueta meta indica que el navegador utilice la codificación UTF-8 para mostrar el texto. Es muy importante utilizar siempre de forma coherente una misma codificación en todos nuestros documentos, de esta forma evitaremos problemas con vocales acentuadas, o caracteres como ñ, ¿, ¡ u otros.

Para evitar ese tipo de problemas, se recomienda siempre realizar los siguientes pasos:

  1. Utilizar siempre la etiqueta meta charset="utf-8" en la cabecera del documento.
  2. Guardar el archivo HTML con codificación UTF-8 en las opciones del editor a utilizar.
  3. Si aún tenemos problemas de codificación, revisar la configuración del servidor web.

La etiqueta base

La etiqueta base se puede utilizar en el documento HTML para establecer una ruta base de los enlaces relativos utilizados en nuestro documento HTML.

Para entender mejor como funciona la etiqueta base, veamos el siguiente ejemplo:

<head>
  <title>Documento HTML sin usar etiqueta base</title>
</head>
<body>
  <a href="index.html">Página de inicio</a>
  <a href=" productos">Página de productos</a>
</body>

En este caso, sucede lo siguiente:


Simplemente, el enlace se añade al final de la URL donde nos encontramos.

Veamos ahora un ejemplo donde utilizamos la etiqueta base:

<head>
  <title>Documento HTML usando la etiqueta base</title>
  <base href="https://latienda.com/productos/" target="_blank">
</head>
<body>
  <a href="index.html">Página de inicio</a>
  <a href="categorias">Página de categorías de productos</a>
</body>

Ahora, aunque nos encontremos en la página https://latienda.com/, hemos establecido la URL base en https://latienda.com/productos/ para los productos, por lo que el sucederá lo siguiente:


Además, también hemos establecido el atributo target a _blank, por lo que los enlaces se abrirán en una pestaña nueva. El atributo target nos permite realizar ciertas tareas dependiedo su valor:

Atributo target Descripción
_self El enlace se abre en la misma pestaña. Es el valor por defecto, incluso si se omite el atributo.
_blank El enlace se abre en una nueva pestaña o ventana.
_parent o _top El enlace se abre en un contexto superior al actual, si existe. En caso contrario, se actua como si se hubiera indicado _self.

La etiqueta link permite establecer relaciones con otros documentos. De esta forma, el navegador o cualquier sistema capaz de leer código HTML puede saber que un documento está relacionado con otro documento (independientemente del formato que sea) y así relacionarse entre ellos.

Veamos algunos ejemplos de código para establecer relaciones con otros recursos:

<head>
  <link rel="stylesheet" href="index.css">
  <link rel="icon" href="favicon.png">
</head>

Como se puede ver, el atributo rel generalmente establece el tipo de relación que estamos determinando. Por otro lado, mediante el atributo href establecemos la dirección hacia el documento o recurso externo.

Existen muchos tipos de relaciones, veamos algunos tipos:

Atributo rel Descripción
Información visual
stylesheet Establece una relación con un documento .css para aplicar sus estilos.
icon Indica un icono para utilizar a modo de favicon (icono de pestaña).
Documento
alternate Indica una versión alternativa del documento actual.
Información adicional o datos
author Indica un enlace con más información sobre el author del documento actual.
help Indica un enlace con información de ayuda.
search Indica un enlace donde se puede encontrar un buscador del sitio actual.
license Indica un enlace con la información de licencia de la página actual.

Versiones alternativas

Con el valor alternate en el atributo rel de la etiqueta link podemos indicar que el documento actual tiene versiones alternativas en otros formatos o idiomas. El siguiente ejemplo indica que el documento HTML que estamos leyendo tiene una versión en PDF, y además, una versión HTML en inglés:

<head>
  <link rel="alternate" href="document.pdf" type="application/pdf" />
  <link rel="alternate" href="document-en.html" hreflang="en" />
</head>

Referencia de datos

El atributo rel también nos permite indicar el tipo de relación que tiene el documento referenciado. Por ejemplo, a continuación indicamos una referencia al autor del documento, a la zona de ayuda, la zona de búsqueda y la licencia que cubre el contenido de la página:

<head>
  <link rel="author" href="http://twitter.com/EniDev911" />
  <link rel="help" href="http://sitioweb.com/ayuda/" />
  <link rel="search" href="http://sitioweb.com/busqueda/" />
  <link rel="license" href="http://sitioweb.com/licencia/" />
</head>

Favicon (icono de pestañas)

Cuando tenemos varias pestañas en nuestro navegador, para una búsqueda más fácil e intuitiva entre pestañas, el navegador suele colocar unos iconos a la izquierda del título de las pestañas. Estos iconos son conocidos como favicons ( iconos de favoritos ) ya que fue invento de Internet Explorer para colocar icono cuando el usuario añadia una página a favoritos.

favicon light
favicon dark
<head>
  <!-- HTML4 -->
  <link rel="shorcut icon" href="/favicon.ico" />
  <!-- HTML5 -->
  <link rel="icon" sizes="64x64" href="/favicon.png" />
  <!-- iPhone/iPad -->
  <link rel="apple-touch-icon" sizes="180x180" 
        href="/apple-touch-icon-180x180.png" />
</head>

El problema principal con los favicons, es que esta característica no está definida en la especificación, por lo que cada navegador y cada sistema operativo la implementa como quiere. Hay navegadores que sólo soportan favicon en formato PNG, otros que solo soportan resoluciones específicas, etc.

Para generar los favicons de una forma más cómoda, podemos utilizar la herramienta Real Favicon Generator, a la cúal le pasamos un logo de alta resolución y nos genera un paquete .zip con los archivos y el código necesario para las diferentes versiones y resoluciones de los iconos.


Posicionamiento (Google)

La etiqueta link también nos permite indicar algunos datos interesantes para el buscador y evitar ser marcado como contenido duplicado o indicarle al buscador exactamente las URLsque deben tener en cuenta Para ello, podemos utilizar los siguientes atributos y valores:

Atributo rel Atributo href Significado
canonical Dirección URL URL exacta que Google debería asociar al documento actual en el buscador.
prev Dirección URL Si el documento actual tiene varias partes, indica la URL de la página anterior.
next Dirección URL Si el documento actual tiene varias partes, indica la URL de la página siguiente.

Estilo CSS de documento

Por último, otra de las funciones más utilizadas de la etiqueta link es la de establecer una relación con un archivo CSS para aplicar estilos a la página HTML actual ( y a todas las etiquetas establezcan una relación a ella ).

Para ello, no hay más que utilizar el valor stylesheet en el atributo rel de la siguiente forma:

<head>
  <link rel="stylesheet" href="index.css" type="text/css" />
</head>

Con esto, el documento HTML estará relacionado con el documento CSS index.css, y aplicará todos los estilos CSS que se encuentren en él. El atributo type es opcional y no se suele indicar, puesto que el tipo por defecto de las hojas de estilos ya es text/css.

Etiquetas HTML de metadatos

Quizás, la etiqueta con mayor números de posibilidades en la cabecera de un documento HTML es la etiqueta meta. En ella, ya través de los atributos name y content podemos indicar una gran cantidad de metadatos al documento. Veamos lo más conocidos:

Valor name Valor content Descripción
description texto Indica la descripción de la página que aparece en buscadores.
keywords palabras claves Lista de palabras clave separadas por comas. Google no la tiene en cuenta.
author nombre Indica el nombre del autor de la página.
application-name nombre Indica el nombre de la aplicación web. Debería usarse sólo si es una webapp.
generator software Indica el software utilizado para crear página web.

La etiqueta meta name="description" sirve para indicar unas breves frases donde se explique el contenido de la página actual. Entre otras cosas, sirve para descripciones que salen bajo los enlaces de los resultados de búsqueda en Google, cuando la página es indexada. En general, suele ser un texto entre 50-160 carácteres

Por su parte, la etiqueta meta name="keywords" solicita una lista de palabras claves separadas por comas que tengan relación con el sitio web. Actualmente, Google no las considera (se abusaba de ellas para hacer spam), sin embargo, otros buscadores o sistemas sí que lo hacen.

Veamos ahora un ejemplo con dichas etiquetas aplicadas:

<head>
  <meta name="description" content="En esta página tratamos diferentes temas sobre desarrollo web">
  <meta name="keywords" content="html, lenguaje de marcado, código html, etiquetas">
  <meta name="generator" content="Sublime Text, Build 4143">
</head> 

Tema de color del navegador

En los navegadores que lo soporten, tenemos una etiqueta meta muy curiosa es la que proporciona la posibilidad de establecer un tema de color para personalizar los colores de la interfaz del navegador que estemos utilizando. Para ello, tenemos que utilizar el atributo name="theme-color" y asociarle un color en hexadecimal.

Al establecer este atributo en una etiqueta meta, el navegador coloreará la barra de direcciones con color hexadecimal indicado en el atributo content de nuestro fragmento de código:

<head>
  <meta name="theme-color" content="#212121" 
</head>
theme color image
Dispositivo móvil, navegador Google Chrome

Sin embargo, actualmente el soporte para esta característica es muy irregular, y muchos navegadores aún no lo soportan. Por ejemplo, en Google chrome, sólo funciona en dispositivos móviles donde el sistema tenga el modo claro activado.

Metadatos SEO para Google

Algunas de las etiquetas meta son bien conocidas como etiquetas que pueden mejorar el SEO (posicionamiento) de una página en buscadores como Google. Al margen de etiquetas meta como description o title, que son principales en temas de posicionamiento, Google es capaz de leer otros metadatos que indicarán como realizar ciertas acciones:

Valor name Valor content Descripción
google nositelinkssearchbox Indica a Google que no muestre el minibuscador en los sitelinks.
google notranslate Indica a Google que no debe traducir la página.
robots parámetros Indica al robot de un buscador si debe indexar o no la página.

Un ejemplo de etiquetas con los atributos mencionados:

<head>
  <meta name="google"
  

Enlaces

Una de las etiquetas más importantes de HTML que nos permiten crear hipervínculos es la etiqueta a. Los enlaces nos sirven para poder direccionar a otras páginas de internet, archivos o ubicaciones dentro de la misma página, direcciones de correo, o cualquier otra URL que haga referencia un recurso alojado en internet.

Etiqueta Descripción
<a> Etiqueta para hacer rereferencia a otras páginas web o recursos como documentos o archivos.

Esta etiqueta debe tener, como mínimo, el atributo href, ya que es el atributo con el que se especifica la dirección URL al documento que se quiere enlazar. Aún así, la etiqueta a también tiene varios atributos opcionales, veamos un resumen de todos ellos:

Atributo Valor Descripción
href URL Enlace al documento que se quiere cargar: Atributo obligatorio.
download "nombre.ext" Descarga el enlace definido en el atributo href en lugar de abrirlo. Si se indica un valor, se renombra.
target "_blank" Abre el enlace en una nueva pestaña
"_self" Abre el enlace en la pestaña o iframe actual.
"_parent" Abre el enlace en el documento padre.
"_top" Abre el enlace en el documento raíz. (padre global)
"nameIframe" Abre el enlace en el iframe con el nombre epecificado.
rel "alternate" Indica que el enlace es una versión alternativa (idioma o formato diferente).
"author" Indica que el enlace es la web del autor de la página actual.
"bookmark" El enlace es un permanlink a la sección de la página actual.
"help" Indica que el enlace ofrece ayuda para la página actual.
"license" Indica que la página actual está cubierta por la licencia referenciada.
"prev" Indica que el enlace es la parte previa del documento actual.
"next" Indica que el enlace es la parte siguiente del documento actual.
"nofollow" Indica que el enlace no está supervisado por el autor del sitio web.
"noreferrer" El navegador no envía la página de procedencia al visitar el enlace.

El soporte del atributo download podría no funcionar en navegadores en versiones muy antiguas


Esquema de una URL

Al indicarse una URL, tenemos formas de escribirlas. Conviene conocer bien la estructura de una URL, para diferenciar cada una de sus partes. Este sería el esquema completo de un enlace:

Protocolo

Existen varios protocolos diferentes y es la parte inicial de la URL. Probablemente, el más utilizado sea http://, aunque https:// también es frecuentemente muy utilizado, ya que se utiliza para cifrar información y que la transmisión sea más segura. Algunos protocolos de ejemplo:

Protocolo Descripción
http:// Protocolo de transferencia de hipertexto. Es el que se usa habitualmente para páginas webs.
https:// Protocolo seguro de transferencia de hipertexto. Usado para cifrar información sensible.
ftp:// Protocolo de transferencia de archivos. Similar a HTTP://, pero orientado a enviar archivos.
whatsapp:// Protocolo de WhatsApp. Se puede interactuar con WhatsApp si el usuario lo tiene instalado.
// Protocolo utilizado en la URL actual. Utiliza http: o https según la página original.

Un detalle importante sobre la última opción de la tabla anterior. Al indicar // al inicio de un enlace, le decimos al navegador que establezca http:// o https:// dependiendo de como se cargará el documento actual. Si el documento actual se cargó como http:// remplazará // por http://, pero si el documento actual se cargó como https:// remplazará // por https://. Esto nos permite más flexibilidad a la hora de cargar documentos o recursos.


Dominio

La siguiente parte de la URL es el dominio del sitio web al que queremos enlazar. El dominio generalmente se compone de un subdominio ( opcional ), el nombre de dominio y el dominio de nivel superior o TLD ( top-level domain ). Por ejemplo, las famosas www no son más que un subdominio utilizado tradicionalmente para páginas webs. Por otra parte, hay muchisimos TLD para sitios web:

Dominio Descripción
.com Originalmente para sitios comerciales, actualmente el más utilizado.
.net Quizás, la segunda opción por excelencia. Su nombre proviene por la palabra internet.
.org Originalmente para organizaciones, actualmente la tercera opción más utilizada.
.dev Sitios webs orientados al mundo del desarrollo o programación ( developers ).

Partes de la URL

URL Variable Contenido Significado
https://www.google.com/search?q=iguana q iguana Busca "iguana"
https://www.google.com/search?q=iguana&tbm=isch [q, tbm] [iguana, isch] Busca "iguana" en Google imágenes

Estado de un enlace

Por defecto, los enlaces tienen 3 estados diferentes:


Rutas relativas o absolutas

A la hora indicar una URL, generalmente se puede hacer de varias formas:

Tipo de ruta Ejemplo ¿Dónde se busca el archivo?
Sin ruta logo.png En la misma carpeta del documento .html actual
Relativa ascendente img/logo.png En la carpeta img de la carpeta actual.
Relativa descendente ../logo.png En la carpeta anterior a la actual.
Relativa global /img/logo.png El primer / simboliza el principio de la URL.
Absoluta https://pagina.com/img/logo.png Exactamente en la URL indicada.

Etiquetas HTML de sección

Antes de la llegada de HTML5, al momento de crear la estructura de una página, normalmente se utilizaban las etiquetas div para agrupar secciones de la página. Luego se le iban añadiendo atributos como id o clases dependiendo de la organización de los grupos y su representación dentro de la página. Una estructura como la que menciono podría ser la siguiente:

<div>
  <h1>Título del artículo</h1>
  <p class="intro">Breve introducción.</p>
  <p class="contenido">Aquí va todo el contenido del artículo.</p>
  <p class="pie">Escrito por John Doe.</p>
</div>

Vemos que en la estructura tenemos una agrupación que contiene todos los elementos de un artículo, donde el primer elemento es un encabezado <h1>, luego un párrafo. En HTML5 se introducen una serie de etiquetas de agrupación que funcionan exactamente igual que una etiqueta <div>, pero que además tiene un significado semántico porque indican el contenido que agruparán.

Recreemos el ejemplo anterior, utilizando etiquetas semánticas:

<article>
  <header>
    <h1>Título del artículo</h1>
    <p class="intro">Breve introducción.</p>
  </header>
  <p class="contenido">Aquí va todo el contenido del artículo.</p>
  <footer>
    <p class="pie">Escrito por John Doe.</p>
  </header>
</div>

De esta forma, el documento HTML podrá ser conocido por los navegadores, robot buscadores o aplicación y cualquier sistema informático que sea capaz de leer el documento HTML e identificar dicha sección.


Etiquetas semánticas

Veamos las etiquetas semánticas que se introducen en HTML5 ( los encabezados ya existían )

Etiqueta Descripción
article Artículo. Parte principal de un escrito ( posts, mensajes en foros, comentario... )
nav Apartado de navegación ( enlaces de secciones, categorías, etc... )
header Cabecera visual de la página ( logotipo, título, etc... ). No confundir con head.
h1 Encabezado de nivel 1. Equivalente al título del documento.
h2 Encabezado de nivel 2. Equivalente al tema del documento.
h3 Encabezado de nivel 3. Equivalente a la sección de un tema.
h4 Encabezado de nivel 4. Equivalente a un apartado de una sección
h5 Encabezado de nivel 5. Equivalente a un ejemplo del apartado.
h6 Encabezado de nivel 6. Equivalente a un subapartado del ejemplo.
footer Pie de página de una sección ( o del documento completo ).
section Sección o grupo temático de contenido. No usar sólo para dar estilo.
aside Agrupación de contenido no relacionado con el tema principal del documento.
address Agrupación con la información de contacto del autor del artículo o documento.

Podemos utilizar las etiquetas article pueden contener otras etiquetas article, como por ejemplo comentarios dentro de un artículos:

<article class="post">
  <p>Esto sería el texto del artículo.</p>
  <article class="comentario">
    <p>Estos sería el texto del comentario</p>
  </article>
</article>

Tablas

Las tablas están incluidas en HTML desde sus primeras versiones y son una forma común de mostrar datos claramente. Además, si las construimos de forma semántica y correctamente, es muy sencillo darle estilos desde CSS y cambiar su diseño con algunas propiedades, puesto que mediante las etiquetas que la componen se puede hacer referencia a cada parte de la misma.

Una tabla puede ser sencilla o compleja, dependiendo de nuestro objetivo y la cantidad de etiquetas o atributos a utilizar. Así pues, veamos primero las etiquetas básicas para crear una tabla de la forma más sencilla posible:

Etiqueta Descripción
table Etiqueta contenedora que tendrá en su interior toda la tabla.
tr Table Row. Etiqueta contenedora de cada fila de la tabla.
td Table Data. Etiqueta contenedora de cada una de las celdas de la tabla.
th Table Header. Etiqueta contenedora de cada una de las celdas de cabecera de la tabla.

Crear tablas con HTML es algo más largo en cuanto al uso de etiquetas pero sumamente sencillo, simplemente debemos indicar dentro de la etiqueta table cuales son los elementos de la cabecera usando las etiqueta thead, y todo lo que es el contenido de las respectivas filas con la etiqueta tbody dentro tbody indicamos cada fila con la etiqueta tr y separamos los campos con la etiqueta td. Ejemplo:

tabla

Párrafos

Para crear párrafos usa la etiqueta <p> se puede usar junto a la etiqueta <br> para hacer saltos de líneas dentro del contenido.

En el siguiente ejemplo, tenemos la etiqueta <p>, que se utiliza para la ( agrupación), mientras que la etiqueta <strong> es para darle un significado diferente a ese fragmento de texto:

<p>Hola, esto es un pequeño <strong>ejemplo</strong></p>

En primer lugar, existe una serie de etiquetas HTML simples para seleccionar un fragmento de texto y dotarlo de un significado especial. A continuación podemos observar algunas de ellas:

Etiqueta Obtienes
<b></b> Esto es negrita
<strong></strong> Fragmento de texto importante o palabra clave y capturado por los lectores de pantalla
<i></i> Esto es cursiva
<em></em> Fragmento de texto enfatizado y capturado por los lectores de pantalla.
<mark></mark> Fragmento de texto resaltado, simula estardestacado con marcador amarillo.
<del></del> Esto es tachado
<sup>superíndice</sup> Esto es superíndice
<sub>subíndice</sub> Esto es un subíndice
<cite></cite> Fragmento de texto con el título de un trabajo creativo: obras, libros

La etiqueta <span> es una versión en línea de la etiqueta <div>, ya que su misión es agrupar contenido de texto, mientras que la misión de un <div> es agrupar otras etiquetas HTML que a su vez pueden agrupar otras y otras etiquetas HTML.

Modificación de significado

Con las siguientes etiquetas HTML también podemos modificar el significado de la información que contienen:

Etiqueta Atributos Descripción
<small></small> Anotaciones menores pequeñas puntualizaciones.
<q></q> cite Cita o frase extraída de otro contexto.
<dnf></dnf> title Definición (término que posteriormente será definido).
<abbr></abbr> title Abreviatura o acrónimo.

Por su parte, la etiqueta <q> nos permite hacer referencia a una cita o frase extraída de otro contexto. En esta etiqueta disponemos de un atributo opcional cite, mediante el cuál podemos hacer referencia a una URL.

También tenemos las etiquetas <dnf> y <abbr> que nos permiten indicar definiciones y abreviaturas, y que ambas permiten el uso del atributo title para indicar el significado de dicho término o abreviatura. Un ejemplo de ambas etiquetas combinadas:

<p>El término <dnf><abbr title="Kilómetro">Km</abbr></dnf> es una unidad de longitud.

Los saltos de línea son etiquetas especiales de HTML para comenzar en una línea nueva. Al contrario que todas las etiquetas que hemos visto, las etiquetas <br> son etiquetas que no necesitan una etiqueta de cierre, por lo que sólo se escribe la etiqueta de apertura.

Etiqueta Descripción
<br> Salto de línea ( nueva línea ).
<wbr> Oportunidad de salto de línea ( división con guión ).

Líneas separadoras

Para crear líneas horizontales que se pueden utilizar para separar secciones de diferentes temas, o representar un cambio de tema entre párrafos de un documento HTML es sencillamente con la etiqueta <hr> esta etiqueta al día de hoy tiene más un significado semántico que representativo, por lo que dibujar una línea horizontal se debería usar el CSS apropiado.

Etiqueta Descripción
<hr> Etiqueta que representa un cambio de tema entre párrafos. Solo tiene una etiqueta <hr/>

Listas

HTML permite crear dos tipos de listas, ordenadas con la etiqueta <ul> y desordenadas con la etiqueta <ol>, es decir numeradas o listas de puntos. Para cada item de la lista se define con la etiqueta <li>, los tipos y como se crean, nada mejor que verlo con ejemplos en la siguiente tabla.

Etiqueta Atributos Descripción
<ul> Define una lista sin orden. Se trata de la etiqueta contenedora.
<ol> start, reversed, type Define una lista numerada (con orden). Etiqueta contenedora.
<li> value Define un ítem de la lista.

See the Pen listas by EniDev911 (@EniDev911) on CodePen.

Imágenes

Para incluir imágenes en el contenido de una página utilizaremos la etiqueta img, que es una etiqueta muy sencilla, que dispone de varios atributos para modificar como se verá la imagen ( los atributos src y alt son obligatorios ):

Atributo Descripción
src Indica el nombre de la URL de la imagen a mostrar. (Obligatorio)
alt Establece un texto alternativo que describa la imagen a mostrar. (Obligatorio)
width Indica el ancho de la imagen en píxels (sin la unidad px).
height Indica el alto de la imagen en píxels (sin la unidad px).

Formatos de imágenes

En el ámbito informático existen múltiples formatos de imágenes, pero no todos son aptos para utilizar en el web. Vamos a ver algunos de los formatos y ver cuáles son los más apropiados:

Formato Características ¿Recomendando?
PNG Soporta transparencia. Compresión sin pérdidas.
JPG Compresión con pérdidas. Ideal para imágenes con texturas
SVG Formato vectorial. Ideal para imágenes escalables.
GIF Formato para imágenes pequeñas y animadas. Intentar evitar
WEBP Alternativa libre de Google al JPG. Soporta transparencias. Sí, con precaución

Nuevas etiquetas de imágenes

HTML5.1 incorpora un nuevo sistema para utilizar imágenes en nuestros documentos HTML de forma mucho más flexible que la tradicional etiqueta img que nos permiirá mostrar imágenes dependiendo de nuestras necesidades. Para ello, podemos utilizar las siguientes etiquetas:

Etiqueta Atributos Descripción
picture Agrupa una serie de imágenes. Etiqueta contenedora.
source srcset, sizes, media, type Mostrará la imagen que cumpla una serie de criterios opcionales.

Como podemos ver, lo interesante está en la etiqueta source, que tiene una serie de atributos disponibles para utilizar. Vamos a ver para que sirve cada uno:

Atributo Descripción
srcset Serie de imágenes ( separadas por coma ) que se utilizarán. Atributo obligatorio.
sizes Tamaño específico de la imagen que finalmente se mostrará.
media Condición que se debe cumplir para que muestre la imagen.
type Tipo de formato de imagen. Opcional.

Imágenes alternativas

Una de las primeras ventajas que nos ofrece estas etiquetas es la de utilizar formatos diferentes, dependiendo del soporte del navegador. Podríamos hacer algo como lo siguiente:

<picture>
  <source srcset="logo.webp" />
  <source srcset="logo.jxr" />
  <!-- Fallback -->
  <img src="logo.jpg" alt="Descripción de la imagen" />
</picture>

En este caso, indicamos que el navegador utilice la imagen con el formato WebP.

Contenido externo

Cuando tenemos una página web y queremos colocar contenido en ella, lo conveniente es utilizar formatos libres para garantizar que sean accesibles desde cualquier tipo de dispositivos.

¿Pero que ocurre si lo que quiero colocar no son formatos de video, de audio o de imagen? Por ejemplo, servicios como Youtube, Vimeo, SoundCloud, Google Maps, SlideShare u otros similares. Se trata de servicios que ofrecen contenido externo para incrustar en nuestra página, pero no nos proporcionan directamente imágenes, video o audio en formatos que reconozca el navegador, sino que nos ofrecen un enlace o contenidos que requiren un plugin externo instalado en el navegador. En esas situaciones, lo más probable es que necesitemos una de las siguientes etiquetas.

Etiquetas de contenido externo

Las siguientes etiquetas sirven para incrustar contenido externo:

Etiqueta Atributos Descripción
iframe src, srcdoc, name, width, height Permite incrustar contenido externo en <<vivo>>.
embed src, type, width, height Permite incrustar contenido interactivo.
object data, type, name, form, width, height Permite incrustar contenido externo con fallbacks.
param name, value Define parámetros de un elemento object.

Marcos en línea (iframes)

Antiguamente, en versiones anteriores de HTML, se utilizaban una etoquetas llamadas frame, mediante las cuales se permitía dividir la pantalla en varias secciones. Actualmente, ese modo de desarrollo ya no se utiliza ya que acarreaba múltiples problemas de accesibilidad, posicionamiento, etc.

Sin embargo, de toda la familia de etiquetas de frames, han sobrevivido iframe, que siguen siendo útiles para incrustar contenido externo. Veamos un ejemplo extraído de servicios como YouTube o SoundCloud.

Reproducir un video de YouTube dentro de una página HTML:

<!-- Reproducción de un video de Youtube -->
<iframe
  width="500"
  height="400"
  src="https://www.youtube.com/embed/n2MGNWrfkTk">
</iframe>
<!-- Reproducción automática y Silenciado -->
<iframe 
  width="500" 
  height="400"
  src="https://www.youtube.com/embed/n2MGNWrfkTk?autoplay=1&mute=1">
</iframe>
<!-- Lista de reproducción en bucle -->
<iframe 
  width="500" 
  height="400"
  src="https://www.youtube.com/embed/n2MGNWrfkTk?playlist=LG3T2rzlR9Q,SLBKRZszn4k&loop=1">
</iframe>

Resultado de un ejemplo con reproducción automática y silenciado

Reproducir contenido de audio de SoundCloud dentro de una página HTML:

<a href="http://www.bing.com/" target="marco">Abrir buscador bing</a>
<iframe 
  name="marco"
  width="100%"
  height="450"
  src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/38289724&visual=true">
</iframe>

Resultado de un ejemplo de SoundCloud y un hipervínculo que se abre en el mismo iframe:

Abrir buscador Bing

Esta etiqueta permite incrustar contenido externo anidado en nuestro propio documento. Es decir, podemos crear un recuadro que en su interior va a tener otra dirección URL de otra página web, documento o recurso que queramos cargar en él. Generalmente, es la etiqueta más utilizada para todo tipo de contenido externo.

También podemos utilizar el atributo name para darle un nombre al marco y cargar direcciones URL diferentes a través de una etiqueta a, haciendo referencia al marco a través del atributo target. Por su parte, el atributo srcdoc nos permite indicar directamente el código fuente del iframe en su valor:

<iframe
  src="http://pagina.com/"
  srcdoc="<p>¡Hola! ¡Soy el <strong>texto del iframe</strong>!</p>">
</iframe> 

Como se puede ver, se puede indicar el atributo srcdoc y el atributo src a la misma vez, dando prioridad el atributo srcdoc y manteniendo el atributo src como fallback, para navegadores que no soportan srcdoc.

Contenido incrustado

La etiqueta embed se ideó antiguamente como una etiqueta no estándar para incluir contenido que requería el uso de un plugin externo para funcionar, ya que se trataba de tecnologías propietarias y los navegadores no las soportan. La etiqueta fue retirada en HTML4, pero en HTML5 fue incluída de nuevo. Se puede utilizar, por ejemplo, para incrustar contenido flash en una página web:

<embed src="game.swf" width="400" height="350" />

Tradicionalmente, también se empezó a utilizar la etiqueta object para incrustar contenido flash, puediendo especificar parámetros en su interior. El siguiente fragmento de código es equivalente al anterior:

<object data="game.swf">
  <param name="quality" value="high" />
</object>

Así la etiqueta object se ofrecía como una alternativa más apropiada para cargar todo tipo de contenido. Y no sólo eso, sino que ofrece la posibilidad de especificar el tipo de formato del que se trata, así como añadir múltiples parámetros o la opción de añadir en su interior etiquetas HTML o texto que funcionen a modo de fallback ( plan B ), o lo que es lo mismo, en el caso de que el navegador no pueda cargar ese formato, cargará la imagen, video, texto o la etiqueta que se incluya en su interior. Algunos ejemplos:

<object data="clock.html"></object>

Formularios

Uno de los aspectos más importante en un documento HTML es el uso de formularios, por lo que al día de hoy HTML con HTML5 a evolucionado bastante, por lo que han añadido etiquetas nuevas para crear nuevos controles en los formularios y nuevos atributos para validar información de algún tipo en específico. Vamos ir viendo los diferentes controles en la tabla a continuación.

Creación de un formulario

Los objetivos que debemos contemplar al crear un formulario en HTML5 deben ser los siguiente:

Contenedor de formulario

Para comenzar con la creación de un formulario, el primer paso es indicar una etiqueta contenedora <form>, que incluirá toda la información que se quiere recoger en ese formulario:

<form>
<!-- Campos a a utilizar, por ejemplo: -->
<!-- * Campos de texto -->
<!-- * Campos de selección o selección múltiple -->
<!-- * Casillas de verificación -->
</form> 

De esta forma, se puede incluso crear varias etiquetas <form> por página, pudiendo así crear varios formularios diferentes, como por ejemplo, uno para realizar una búsqueda en la página, otro para dejar un comentario y otro para enviar un email.

La etiqueta <form> dispone de varios atributos para utilizar:

Atributo Valor Descripción
action URL Dirección URL del back-end donde se enviará la información del formulario.
method get | post Método HTTP de envió. GET se realiza a través de URL, POST para envió extenso de información.
name nombre Nombre del formulario. Útil para procesar posteriormente.
target destino Nombre del lugar donde se abrirá el formulario. _blank para nueva pestaña.
enctype tipo Codificación para el envió del formulario. Importante para envió de archivos.
accept-charset codificación Fuerza a utilizar una codificación en los parámetros de texto del formulario.
autocomplete on | off Activa o desactiva el autocompletado para todos los campos del formulario.
novalidate boolean Con este atributo presente, el formulario obvia la validación HTML5.

Así un formulario base de ejemplo (aún vacío, sin campos de entrada de datos, sólo con la etiqueta contenedora) podría ser el que vemos a continuación:

<form name="formulario" method="post" action="/send.php">...</form> 

Aquí se definen 3 atributos en base a la etiqueta form:

Tipos de datos

Para que un usuario pueda introducir información en un formulario, requiere que se le indiquen una serie de campos que le permitan introducir la información de la forma más cómoda y rápida posible. Para ello, debemos saber a priori que tipo de dato le vamos a pedir a un usuario ( texto, numérico, fecha, etc... ), y así saber que tipo de campo de entrada de datos es más conveniente utilizar. Veamos algunos tipos de controles para diferentes tipos de datos:

Etiquetas Información a obtener
input
textarea
Nombres, direcciones físicas, descripciones
input type="number" Edades, precios, cantidades
input type="checkbox" Verdadero/Falso
input type="radio"
select
Opción unica
select multiple
input type="checkbox"
Varias opciones
input type="color" Selección de color
input type="file" Selección de archivo

En HTML5, de forma nativa, el navegador proporciona estos campos de entrada en los que el usuario puede introducir información específica. Cada uno de ellos tiene sus propias particularidades y características, además de que hay que tener cuidado con algunos controles de formulario, ya que pueden no estar soportados por completo en todos los navegadores.

Campos de entrada

Una de las etiquetas que más utilizaremos para obtener información a modo de campo de entrada de datos en un formulario es la etiqueta input. Su funcionalidad más utilizada es la de servir como campo de texto:

<form name="formulario" method="post" action="/send.php">
   <input type="text" name="nombre"/>
   <input type="submit" value="Enviar"/>
</form>

En este ejemplo tenemos un pequeño formulario donde se le pide al usuario su nombre con la etiqueta input type="text" y, posteriormente, se coloca un botón para enviar el formulario con la etiqueta input type="submit". Aunque vemos que se trata de la misma etiqueta input, dependiendo del valor indicado en el atributo type realizará una tarea u otra.

La etiqueta "input"

La etiqueta input tiene una gran cantidad de atributos (algunos dependiendo del valor del type, que mostraremos más adelante). Estos son los atributos que podemos utilizar de forma general para prácticamente cualquier campo de entrada de datos con la etiqueta input.

Atributo Valor Descripción
type tipo de campo Indica el tipo de campo del que se trata.
name nombre del campo Indica el nombre del campo para hacer referencia más tarde.
value valor por defecto Indica el valor inicial que tendrá ese campo de datos.
form nombre del formulario Asocia este campo de datos con un formulario específico.
placeholder sugerencia Indica su sugerencia al usuario antes de escribir.
size número Tamaño visual (número de caracteres) del campo de datos.
autocomplete on | off Activa o desactiva el autocompletado para este campo.
autofocus boolean Establece el foco (colocar el cursor) en este campo al cargar la página.

El atributo type nos permitirá indicar que tipo de campo de dato mostrará en el navegador (text, number, date..., los veremos luego). Mediante el atributo name le daremos un nombre al campo de texto, así cuando enviemos la información, podremos manejarla desde javascript o desde el back-end haciendo referencia a dicho nombre.

La etiqueta HTML <input> puede tomar diferentes valores en su atrobuto type para permitir al usuario introducir información, además de otra etiqueta denominada <textarea> para introducir cantidades más grande de texto.

Tipo de información Etiqueta Ejemplo
Texto alfanumérico libre corto <input type="text">
Texto para búsquedas <input type="search">
Número de télefono o móvil <input text="tel">
Dirección URL <input type="url">
Campo oculto (no mostrar al usuario) <input type="hidden">
Texto alfanumérico libre (extenso) <textarea>

Texto alfanúmerico corto

En primer lugar, si lo que queremos es guardar información de texto libremente, la opción más habitual es optar por utilizar el campo de entrada de datos input type="text". Este es el atributo que se utiliza en las etiquetas input por defecto si no indicamos ningún atributo type. Es un campo de texto ideal para fragmentos cortos de información: nombres, apellidos, etc...

<form name="formulario" method="post" action=

Videos

En HTML5 se introduce la interesante posibilidad de mostrar videos directamente desde nuestro navegador. De hecho, si arrastramos un video a la ventana del navegador o con el clic derecho seleccionamos la opción abrir con y buscamos el navegador, veremos que comienza a reproducirse en él. Para poder insertar videos en nuestras páginas HTML tenemos que utilizar la etiqueta <video>, que junto a la etiqueta <source> podremos utilizar estas capacidades multimedia de HTML5.

La etiqueta <source> especifica recursos de medios múltiples para las etiquetas <picture>, <audio>, <video>.

OJO : Si lo que queremos es insertar videos desde Youtube, Vimeo u otro servicio alternativo, debemos utilizar la etiqueta HTML iframe en lugar de la etiqueta <video>.

Video (modo básico)

La etiqueta <video> tiene varios atributos a nuestra disposición:

Atributo Valor Descripción
src Dirección URL Video a reproducir. Obligatorio si actua como etiqueta contenedora.
poster Dirección URL Muestra una imagen a modo de presentación.
preload auto | metadata | none Indica como realizar la precarga del video.
mediagroup nombre Establece un nombre para un grupo de contenidos multimedia.
autoplay boolean Comienza a reproducir el video automáticamente.
loop boolean Vuelve a iniciar el video cuando finaliza su reproducción (bucle).
muted boolean Establece el video sin sonido (silenciado).
controls boolean Muestra los controles de reproducción. Por defecto no se muestran.
width tamaño Indica el tamaño de ancho del video.
height tamaño Indica el tamaño del alto del video.

Un primer ejemplo muy básico para colocar un video en nuestra página web:

<video src="video.mp4" width="640" height="460"></video>

Sin embargo, esto mostrará el primer fotograma del video, con un tamaño de 640x460, pero se verá como una imagen, ya que no muestra los controles del video y tampoco tiene la autoreproducción activada. Podríamos solucionarlo indicando los atributos controls y autoplay.

Otro ejemplos básicos para colocar videos en nuestra página:

<-- Ejemplo 1 -->
<video src="video.webm" poster="presentacion.jpg" controls></video>
<-- Ejemplo 2 -->
<video src="video.mp4" autoplay muted loop></video>

Obtendriamos los siguientes resultados:

En este caso cargamos un video, pero no se mostrará porque se ha indicado que se utilice una imagen de presentación que se mostrará hasta que el usuario pulse el botón de reproducir de los controles. En el segundo ejemplo, tenemos un video que se reproduce automáticamente al cargar la página, en silencio y en bucle, iniciándose una y otra vez.

Desde 2017, Chrome, Firefox y otros navegadores establecieron un cambio de políticas con el atributo de reproducción automática autoplay, por lo que no funcionará salvo que el usuario haya interactuado antes en la página.


Formatos de video

Antes de continuar con el modo avanzado de etiquetas de video, debemos conocer una serie de conceptos básicos y los diferentes formatos de video que existen actualmente. En primer lugar, debemos saber que un archivo de video tiene dos partes principales: el formato contenedor, que es el formato del video en sí, mientras que en su interior puede tener múltiples componentes codificados con diferentes codecs.

formato contenedor video

De hecho, un video básico suele tener, como mínimo, un componente de video y otro de audio, pero puede tener muchos más (subtítulos, imágenes, etc...). Estos detalles son muy importantes, ya que dependiendo del formato y/o codec de un video, puede que sea factible utilizarlo para la web o no, así que hay que conocer un poco sobre estos conceptos.

A continuación tenemos un listado de los formatos/codecs más conocidos y utilizados:

Formato Codec utilizado Características ¿Recomendado?
MP4 x264 , DivX H264 Alta calidad. Codec x264 libre. Sí, buen soporte
WebM VP8 , VP9 Alternativa libre a MP4 de Google. Sí, soporte medio
AV1 Basado en VP10 , Daala y Thor Compite con HEVC/H.265. No, soporte bajo
HEVC x265 , DivX HEVC Futura evolución de MP4. No, poco soporte
OGV Theora Alternativa libre a MP4. No, Con precaución
MKV Matroska Buena compresión. Potente. No, alto consumo CPU

Video (modo avanzado)

Sin embargo, aún con lo que hemos visto todavía falta ver todas las posibilidades multimedia que tenemos con HTML5. La etiqueta <video> también puede actuar como etiqueta contenedora e incluir varias etiquetas HTML para dotar de mayor compatibilidad, o capacidades adicionales.

Etiqueta Atributos Descripción
<source> src, type Establece un archivo de video o lo añade como alternativa.
<track> src, srclang, label, kind, default Establece un archivo de subtítulos o lo añade como alternativa.

Videos alternativos

Si utilizamos la etiqueta <video> como etiqueta contenedora, podemos incluir etiquetas <source> en su interior para proporcionar formatos alternativos y tener mayor compatibilidad con otros navegadores y navegadores antiguos que no soporten HTML5:

<-- Ejemplo 1 -->
<video width="600" height="400">
  <source src="video.mp4" type="video/mp4" />
  <source src="video.webm" type="video/webm" />
  <source src="video.ogv" type="video/ogg" />
  Su navegador no soporta contenido multimedia.
</video>

Emojis

En la siguiente tabla veremos los dibujos (emoji) incluidos en unicode, junto con sus respectivas entidades y juego de caracteres, con el código unicode hexadecimal para representar los emojis dentro de un documento HTML. Ten en cuenta que las entidades pueden variar su visualización entre diferentes aplicaciones como los navegadores.

Listado:

Emoticones

😀 &#x1f600;
😁 &#x1f601;
😂 &#x1f602;
😃 &#x1f603;
😄 &#x1f604;
😅 &#x1f605;
😆 &#x1f606;
😇 &#x1f607;
😌 &#x1f60c;
😍 &#x1f60d;
😎 &#x1f60e;
😏 &#x1f60f;
😐 &#x1f610;
😑 &#x1f611;
😒 &#x1f612;
😓 &#x1f613;
😔 &#x1f614;
😕 &#x1f615;
😖 &#x1f616;
😗 &#x1f617;
😘 &#x1f618;
😙 &#x1f619;
😚 &#x1f61a;
😛 &#x1f61b;
😜 &#x1f61c;
😝 &#x1f61d;
😞 &#x1f61e;
😟 &#x1f61f;
😠 &#x1f620;
😡 &#x1f621;
😢 &#x1f622;
😣 &#x1f623;
😤 &#x1f624;
😥 &#x1f625;
😦 &#x1f626;
😧 &#x1f627;
😨 &#x1f628;
😩 &#x1f629;
😪 &#x1f62a;
😫 &#x1f62b;
😬 &#x1f62c;
😭 &#x1f62d;
😮 &#x1f62e;
😯 &#x1f62f;
😰 &#x1f630;
😱 &#x1f631;
😲 &#x1f632;
😳 &#x1f633;
😴 &#x1f634;
😵 &#x1f635;
😶 &#x1f636;
😷 &#x1f637;
😸 &#x1f638;
😹 &#x1f639;
😺 &#x1f63a;
😻 &#x1f63b;
😼 &#x1f63c;
😽 &#x1f63d;
😾 &#x1f63e;
😿 &#x1f63f;
🙀 &#x1f640;
🙁 &#x1f641;
🙂 &#x1f642;
🙃 &#x1f643;
🙄 &#x1f644;
🙈 &#x1f648;
🙉 &#x1f649;
🙊 &#x1f64a;
🙌 &#x1f64c;
🤐 &#x1f910;
🤑 &#x1f911;
🤒 &#x1f912;
🤓 &#x1f913;
🤔 &#x1f914;
🤕 &#x1f915;
🤖 &#x1f916;
🤗 &#x1f917;
🤠 &#x1f920;
🤡 &#x1f921;
🤢 &#x1f922;
🤣 &#x1f923;
🤤 &#x1f924;
🤥 &#x1f925;
🤧 &#x1f927;
🤨 &#x1f928;
🤩 &#x1f929;
🤪 &#x1f92a;
🤫 &#x1f92b;
🤬 &#x1f92c;
🤭 &#x1f92d;
🤮 &#x1f92e;
🤯 &#x1f92f;
🥰 &#x1f970;
🥱 &#x1f971;
🥲 &#x1f972;
🥳 &#x1f973;
🥴 &#x1f974;
🥵 &#x1f975;
🥶 &#x1f976;
🥸 &#x1f978;
🥺 &#x1f97a;
🧐 &#x1f9d0;
👽 &#x1f47d;
💀 &#x1f480;
👾 &#x1f47e;
👹 &#x1f479;
👺 &#x1f47a;
👻 &#x1f47b;


Manos

👋 &#x1F44B;
🤚 &#x1F91A;
🖐 &#x1F590;
&#x270B;
🖖 &#x1F596;
👌 &#x1F44C;
🖕 &#x1F595;
👇 &#x1F447;
🤝 &#129309


Personas

🥷 &#x1f977;
🧕 &#x1f9d5;
🧖 &#x1f9d6;
🧗 &#x1f9d7;
🧘 &#x1f9d8;
🧙 &#x1f9d9;
🧚 &#x1f9da;
🧛 &#x1f9db;
🧜 &#x1f9dc;
🧝 &#x1f9dd;
🧞 &#x1f9de;
🧟 &#x1f9df;
🧠 &#x1f9e0;
👮 &#x1f46e;
👤 &#x1f464;
👥 &#x1f465;
👦 &#x1f466;
👧 &#x1f467;
👨 &#x1f468;
👩 &#x1f469;
👪 &#x1f46a;
👫 &#x1f46b;
👬 &#x1f46c;
👭 &#x1f46d;
👯 &#x1f46f;
👰 &#x1f470;
👱 &#x1f471;
👲 &#x1f472;
👴 &#x1f474;
👵 &#x1f475;
👶 &#x1f476;
👷 &#x1f477;
👸 &#x1f478;
👼 &#x1f47c;
💁 &#x1f481;
💂 &#x1f482;
💃 &#x1f483;
💆 &#x1f486;
💇 &#x1f487;
💏 &#x1f48f;
💑 &#x1f491;
🧑 &#x1F9D1;


Flechas

&#x2194;
&#x2195;
&#x2196;
&#x2197;
&#x2198;
&#x2199;
&#x21a9;
&#x21aa;
&#x2b05;
&#x2b06;
&#x2b07;
&#x27a1;
&#x2934;
&#x2935;

Figuras y formas

🟠 &#x1f7e0;
🟡 &#x1f7e1;
🟢 &#x1f7e2;
🟣 &#x1f7e3;
🟤 &#x1f7e4;
🟥 &#x1f7e5;
🟦 &#x1f7e6;
🟧 &#x1f7e7;
🟨 &#x1f7e8;
🟩 &#x1f7e9;
🟪 &#x1f7ea;
🟫 &#x1f7eb;
&#x2b1b;
&#x2b1c;
&#x2b55;
&#x2b50;
&#x3030;
&#x303d;
🌀 &#x1f300;
🏴 &#x1f3f4;
🕳 &#x1f573;
🖤 &#x1f5a4;
🤍&#x1f90d;
🤎 &#x1f90e;
🛡 &#x1f6e1;
&#x26aa;
&#x26ab;
&#x2763;
&#x2764;
🔘 &#x1f518;
🔲 &#x1f532;
🔳 &#x1f533;
🔴 &#x1f534;
🔵 &#x1f535;
🔶 &#x1f536;
🔷 &#x1f537;
🔸 &#x1f538;
🔹 &#x1f539;
🔺 &#x1f53a;
🔻 &#x1f53b;
🔼 &#x1f53c;
🔽 &#x1f53d;

Símbolos

© &#xa9;
® &#xae;
&#x24c2;
&#x2620;
&#x2622;
&#x2623;
&#x2626;
&#x262a;
&#x262e;
&#x262f;
&#x2638;
&#x2640;
&#x2642;
&#x2648;
&#x2649;
&#x264a;
&#x264b;
&#x264c;
&#x264d;
&#x264e;
&#x264f;
&#x2650;
&#x2651;
&#x2652;
&#x2653;
&#x265f;
&#x2660;
&#x2663;
&#x2665;
&#x2666;
&#x2668;
&#x267b;
&#x267e;
&#x267f;
&#x2695;
&#x269b;
&#x26a0;
&#x26a1;
&#x26a7;
&#x26ce;
&#x2705;
&#x2714;
&#x2716;
&#x271d;
&#x2721;
&#x2728;
&#x2733;
&#x2734;
&#x2744;
&#x2747;
&#x274c;
&#x274e;
&#x2753;
&#x2754;
&#x2755;
&#x2757;
&#x2795;
&#x2796;
&#x2797;
&#x3297;
&#x3299;
🀄 &#x1f004;
🃏 &#x1f0cf;
🅰 &#x1f170;
🅱 &#x1f171;
🅾 &#x1f17e;
🅿 &#x1f17f;
🆎 &#x1f18e;
🆑 &#x1f191;
🆒 &#x1f192;
🆓 &#x1f193;
🆔 &#x1f194;
🆖 &#x1f196;
🆗 &#x1f197;
🆘 &#x1f198;
🆙 &#x1f199;
🆚 &#x1f19a;
🈁 &#x1f201;
🈂 &#x1f202;
🈚 &#x1f21a;
🈯 &#x1f22f;
🈲 &#x1f232;
🈳 &#x1f233;
🈴 &#x1f234;
🈵 &#x1f235;
🈶 &#x1f236;
🈷 &#x1f237;
🈸 &#x1f238;
🈹 &#x1f239;
🈺 &#x1f23a;
🉐 &#x1f250;
🉑 &#x1f251;
🔄 &#x1f504;
🔅 &#x1f505;
🔆 &#x1f506;
🔙 &#x1f519;
🔚 &#x1f51a;
🔛 &#x1f51b;
🔜 &#x1f51c;
🔝 &#x1f51d;
🔞 &#x1f51e;
🔟 &#x1f51f;
🔠 &#x1f520;
🔡 &#x1f521;
🔢 &#x1f522;
🔣 &#x1f523;
🔤 &#x1f524;
🔯 &#x1f52f;
🔰 &#x1f530;
🕉 &#x1f549;
🕊 &#x1f54a;
🕎 &#x1f54e;
🕸 &#x1f578;
🚫 &#x1f6ab;
🚭 &#x1f6ad;
🚮 &#x1f6ae;
🚯 &#x1f6af;
🚰 &#x1f6b0;
🚱 &#x1f6b1;
🚳 &#x1f6b3;
🚷 &#x1f6b7;
🚸 &#x1f6b8;
🚹 &#x1f6b9;
🚺 &#x1f6ba;
🚻 &#x1f6bb;
🚼 &#x1f6bc;
🚾 &#x1f6be;
🛂 &#x1f6c2;
🛃 &#x1f6c3;
🛄 &#x1f6c4;
🛅 &#x1f6c5;
🛐 &#x1f6d0;
🛗 &#x1f6d7;
 &#1;
 &#2;
 &#3;


Multimedia

🔇 &#x1f507;
🔈 &#x1f508;
🔉 &#x1f509;
🔊 &#x1f50a;
🔔 &#x1f514;
🔕 &#x1f515;
&#x23cf;
&#x23e9;
&#x23ea;
&#x23eb;
&#x23ec;
&#x23ed;
&#x23f8;
&#x23f9;
&#x23fa;
&#x23ee;
&#x23ef;
&#x25b6;
&#x25c0;
🔀 &#x1f500;
🔁 &#x1f501;
🔂 &#x1f502;
🔃 &#x1f503;
🎙 &#x1f399;
🎚 &#x1f39a;
🎛 &#x1f39b;
🎤 &#x1f3a4;
🎥 &#x1f3a5;
🎦 &#x1f3a6;
🎧 &#x1f3a7;
🎮 &#x1f3ae;
🎵 &#x1f3b5;
📧 &#x1f4e7;
📥 &#x1f4e5;
&#x2712;
💌 &#x1f48c;
🏠 &#x1f3e0;
&#x260e;
🔗 &#x1f517;
🖥️ &#x1f5a5;&#xfe0f;
🗑️ &#x1f5d1;&#xfe0f;
✂️ &#x2702;&#xfe0f;
🎚️ &#x1f39a;&#xfe0f;


Instrumentos 🎸

🎸 &#x1f3b8;
🎷 &#x1f3b7;
🎹 &#x1f3b9;
🎺 &#x1f3ba;
🎻 &#x1f3bb;
🎵 &#x1f3b5;
🎶 &#x1f3b6;
🎼 &#x1f3bc;
📯 &#x1f4ef;
🔔 &#x1f514;


Comida y bebidas 🍵

🌭 &#x1f32d;
🌮 &#x1f32e;
🌯 &#x1f32f;
🍊 &#x1f34a;
🍋 &#x1f34b;
🍌 &#x1f34c;
🍍 &#x1f34d;
🍎 &#x1f34e;
🍏 &#x1f34f;
🍐 &#x1f350;
🍑 &#x1f351;
🍒 &#x1f352;
🍓 &#x1f353;
🍔 &#x1f354;
🍕 &#x1f355;
🍖 &#x1f356;
🍗 &#x1f357;
🍘 &#x1f358;
🍙 &#x1f359;
🍚 &#x1f35a;
🍛 &#x1f35b;
🍜 &#x1f35c;
🍝 &#x1f35d;
🍞 &#x1f35e;
🍟 &#x1f35f;
🍠 &#x1f360;
🍡 &#x1f361;
🍢 &#x1f362;
🍣 &#x1f363;
🍤 &#x1f364;
🍥 &#x1f365;
🍦 &#x1f366;
🍧 &#x1f367;
🍨 &#x1f368;
🍩 &#x1f369;
🍪 &#x1f36a;
🍫 &#x1f36b;
🍬 &#x1f36c;
🍭 &#x1f36d;
🍮 &#x1f36e;
🍯 &#x1f36f;
🍰 &#x1f370;
🍱 &#x1f371;
🍲 &#x1f372;
🍳 &#x1f373;
🍴 &#x1f374;
🍵 &#x1f375;
🍶 &#x1f376;
🍷 &#x1f377;
🍸 &#x1f378;
🍹 &#x1f379;
🍺 &#x1f37a;
🍻 &#x1f37b;
🍼 &#x1f37c;
🍽 &#x1f37d;
🍾 &#x1f37e;
🍿 &#x1f37f;
🎂 &#x1f382;
🥑 &#x1f951;
🥒 &#x1f952;
🥓 &#x1f953;
🥔 &#x1f954;
🥕 &#x1f955;
🥖 &#x1f956;
🥗 &#x1f957;
🥘 &#x1f958;
🥙 &#x1f959;
🥚 &#x1f95a;
🥛 &#x1f95b;
🥜 &#x1f95c;
🥝 &#x1f95d;
🥞 &#x1f95e;
🥟 &#x1f95f;
🥠 &#x1f960;
🥡 &#x1f961;
🥢 &#x1f962;
🥣 &#x1f963;
🥤 &#x1f964;
🥥 &#x1f965;
🥦 &#x1f966;
🥧 &#x1f967;
🥨 &#x1f968;
🥩 &#x1f969;
🥪 &#x1f96a;
🥫 &#x1f96b;
🥬 &#x1f96c;
🥭 &#x1f96d;
🥯 &#x1f96f;
🫕 &#x1fad5;
🫖 &#x1fad6;
🫐 &#x1fad0;
🫔 &#x1fad4;
🥣 &#x1f963;
🥤 &#x1f964;
🥥 &#x1f965;
🥦 &#x1f966;


Animales 🦖

🐀 &#x1f400;
🐁 &#x1f401;
🐂 &#x1f402;
🐃 &#x1f403;
🐄 &#x1f404;
🐅 &#x1f405;
🐆 &#x1f406;
🐇 &#x1f407;
🐈 &#x1f408;
🐉 &#x1f409;
🐊 &#x1f40a;
🐋 &#x1f40b;
🐌 &#x1f40c;
🐍 &#x1f40d;
🐎 &#x1f40e;
🐏 &#x1f40f;
🐐 &#x1f410;
🐑 &#x1f411;
🐒 &#x1f412;
🐓 &#x1f413;
🐔 &#x1f414;
🐕 &#x1f415;
🐖 &#x1f416;
🐗 &#x1f417;
🐘 &#x1f418;
🐙 &#x1f419;
🐚 &#x1f41a;
🐛 &#x1f41b;
🐜 &#x1f41c;
🐝 &#x1f41d;
🐞 &#x1f41e;
🐟 &#x1f41f;
🐠 &#x1f420;
🐡 &#x1f421;
🐢 &#x1f422;
🐣 &#x1f423;
🐤 &#x1f424;
🐥 &#x1f425;
🐦 &#x1f426;
🐧 &#x1f427;
🐨 &#x1f428;
🐩 &#x1f429;
🐪 &#x1f42a;
🐫 &#x1f42b;
🐬 &#x1f42c;
🐭 &#x1f42d;
🐮 &#x1f42e;
🐯 &#x1f42f;
🐰 &#x1f430;
🐱 &#x1f431;
🐲 &#x1f432;
🐳 &#x1f433;
🐴 &#x1f434;
🐵 &#x1f435;
🐶 &#x1f436;
🐷 &#x1f437;
🐸 &#x1f438;
🐹 &#x1f439;
🐺 &#x1f43a;
🐻 &#x1f43b;
🐼 &#x1f43c;
🐽 &#x1f43d;
🐾 &#x1f43e;
🐿 &#x1f43f;
🦀 &#x1f980;
🦁 &#x1f981;
🦂 &#x1f982;
🦃 &#x1f983;
🦄 &#x1f984;
🦅 &#x1f985;
🦆 &#x1f986;
🦇 &#x1f987;
🦈 &#x1f988;
🦉 &#x1f989;
🦊 &#x1f98a;
🦋 &#x1f98b;
🦌 &#x1f98c;
🦍 &#x1f98d;
🦎 &#x1f98e;
🦏 &#x1f98f;
🦐 &#x1f990;
🦑 &#x1f991;
🦒 &#x1f992;
🦓 &#x1f993;
🦔 &#x1f994;
🦕 &#x1f995;
🦖 &#x1f996;
🦗 &#x1f997;
🦘 &#x1f998;
🦙 &#x1f999;
🦚 &#x1f99a;
🦛 &#x1f99b;
🦜 &#x1f99c;
🦝 &#x1f99d;
🦞 &#x1f99e;
🦟 &#x1f99f;
🦠 &#x1f9a0;
🦡 &#x1f9a1;
🦢 &#x1f9a2;
🦣 &#x1f9a3;
🦤 &#x1f9a4;
🦥 &#x1f9a5;
🦦 &#x1f9a6;
🦧 &#x1f9a7;
🦨 &#x1f9a8;
🦩 &#x1f9a9;
🦫 &#x1f9ab;
🦬 &#x1f9ac;
🦭 &#x1f9ad;
🦮 &#x1f9ae;
🪰 &#x1fab0;
🪱 &#x1fab1;
🪲 &#x1fab2;
🪳 &#x1fab3;


Ropa y accesorios

👓 &#x1f453;
👔 &#x1f454;
👕 &#x1f455;
👖 &#x1f456;
🥣 &#x1f963;
🥤 &#x1f964;
🥥 &#x1f965;
🥦 &#x1f966;
👛 &#x1f45b;
👜 &#x1f45c;
👝 &#x1f45d;
👞 &#x1f45e;
👟 &#x1f45f;
👠 &#x1f460;
👡 &#x1f461;
👢 &#x1f462;
🕶 &#x1f576;
🥻 &#x1f97b;
🥼 &#x1f97c;
🥽 &#x1f97d;
🩰 &#x1fa70;
🩱 &#x1fa71;
🩲 &#x1fa72;
🩳 &#x1fa73;
🩴 &#x1fa74;
🪆 &#x1fa86;
🧢 &#x1f9e2;
🧣 &#x1f9e3;
🧤 &#x1f9e4;
🧥 &#x1f9e5;
🧦 &#x1f9e6;
🦺 &#x1f9ba;
🤿 &#x1F93F;
🥾 &#x1f97e;
🥿 &#x1f97f;
🥋 &#x1F94B;


Transportes y Mapas

🚀 &#x1f680;
🚁 &#x1f681;
🚂 &#x1f682;
🚃 &#x1f683;
🚄 &#x1f684;
🚅 &#x1f685;
🚆 &#x1f686;
🚇 &#x1f687;
🚈 &#x1f688;
🚉 &#x1f689;
🚊 &#x1f68a;
🚋 &#x1f68b;
🚌 &#x1f68c;
🚍 &#x1f68d;
🚎 &#x1f68e;
🚏 &#x1f68f;
🚐 &#x1f690;
🚑 &#x1f691;
🚒 &#x1f692;
🚓 &#x1f693;
🚔 &#x1f694;
🚕 &#x1f695;
🚖 &#x1f696;
🚗 &#x1f697;
🚘 &#x1f698;
🚙 &#x1f699;
🚚 &#x1f69a;
🚛 &#x1f69b;
🚜 &#x1f69c;
🚝 &#x1f69d;
🚞 &#x1f69e;
🚟 &#x1f69f;

Objetos

&#x231a;
&#x231b;
&#x2328;
&#x23f0;
&#x23f1;
&#x23f2;
&#x23f3;
&#x2602;
💻 &#x1f4bb;
💺 &#x1f4ba;
💽 &#x1f4bd;
💾 &#x1f4be;
💿 &#x1f4bf;
📀 &#x1f4c0;
📁 &#x1f4c1;
📂 &#x1f4c2;
📃 &#x1f4c3;
📄 &#x1f4c4;
📅 &#x1f4c5;
📆 &#x1f4c6;
📇 &#x1f4c7;
📋 &#x1f4cb;
📑 &#x1f4d1;
📱 &#x1f4f1;
📲 &#x1f4f2;
📷 &#x1f4f7;
📸 &#x1f4f8;
📹 &#x1f4f9;
📺 &#x1f4fa;
📻 &#x1f4fb;
📼 &#x1f4fc;
📽 &#x1f4fd;
🖥 &#x1f5a5;
🖨 &#x1f5a8;
🖱 &#x1f5b1;
🖲 &#x1f5b2;
&#x260e;
&#x2614;
&#x2692;
&#x2693;
&#x2694;
&#x2696;
&#x2697;
&#x2699;
&#x26b0;
&#x26b1;
&#x26cf;
&#x2702;
🪒 &#x1fa92;
🪓 &#x1fa93;
🪚 &#x1fa9a;
🪛 &#x1fa9b;
🌂 &#x1f302;
🌡 &#x1f321;
🎁 &#x1f381;
🪠 &#x1faa0;
🪥 &#x1faa5;
🪑 &#x1fa91;
🧻 &#x1f9fb;
🪟 &#x1fa9f;
🪞 &#x1fa9e;
🪠 &#x1faa0;
🪣 &#x1faa3;
🪤 &#x1faa4;
🪥 &#x1faa5;
🪦 &#x1faa6;
🪧 &#x1faa7;
🪨 &#x1faa8;
📍 &#x1F4CD;
📎 &#x1F4CE;
&#x2699;
🎨 &#x1f3a8;
&#9875;

Extras

🧑‍💻 &#x1F9D1;&#x200D;&#x1F4BB;
🗒️ &#x1F5D2;&#xFE0F;
🕵️ &#x1f575;&#xfe0f;
🕶️ &#x1f576;&#xfe0f;
☄️ &#x2604;&#xfe0f;