• HTML
  • CSS
  • JS

    Temas HTML

  • Estructura

  • Texto

  • Etiquetas Generales

  • Listas

  • Metadatos

  • Representar código

  • Tablas

  • Eventos

  • Formularios

  • Validaciones

  • Envío de Datos

  • Controladores JS

  • Pre-Carga

  • Recordatorios

Elementos de multimedia

← PREVIO
1
2
3
Next →

Desde hace algún tiempo los lenguajes web son lo bastante poderosos como para soportar contenido multimedia en sus diversos formatos, como lo son las imágenes, video, audio, e incluso es posible el incrustar secciones de otras páginas dentro de otra, todos estos elementos y conceptos relacionados son abordados a continuación:

Audio

Se trata de una etiqueta para reproducir audio en la página, se utiliza de una forma similar a la etiqueta video. Debido a las patentes que poseen algunos formatos de audio no todos los navegadores pueden aceptar los mismos formatos, en la actualidad son dos los formatos más utilizados en la industria, estos son: "mp3" y "ogg", de modo que para que el archivo de audio esté disponible para casi todos los navegadores lo más recomendable es incluir el archivo en cuestión una vez por "mp3" y una vez por "ogg".

Para optimizar esto utilizamos el elemento "source", el cual se incluye dentro de la etiqueta "audio", usando el atributo "src" dentro de este, la función del elemento source es que el navegador pueda elegir el formato de audio que sea compatible con este, para esto usa el atributo "type", este atributo es leído por el navegador para ubicar el formato de audio que es compatible, si el atributo "type" no se incorpora el navegador probará cada elemento hasta encontrar el formato de audio que sea compatible, aumentando el tiempo de ejecución.

La etiqueta "audio" al tratarse de una etiqueta HTML5 existen navegadores que aún no están capacitados para ejecutarla, por lo tanto la estructura de esta etiqueta no solo debe de incluir los atributos de "src", sino que también una etiqueta "p" con un mensaje de notificación, este párrafo será visible en aquellos casos en los que no sea posible ejecutar los archivos de audio, ya sea por un tema de compatibilidad o de conexión, por lo tanto es recomendable que este párrafo contenga un texto de notificación y si de verdad es muy necesario un enlace directo al archivo de audio en cuestión.

Atributos

  • Autoplay: indica que el audio se reproduzca automáticamente apenas se cargue, no es muy recomendable su uso ya que los usuarios pueden encontrarlo molesto

  • buffered: Un atributo que se puede leer para determinar qué intervalos de tiempo del multimedia se han almacenado en búfer. Este atributo contiene un objeto TimeRanges.

  • Controls: Ofrece controles para que el usuario pueda controlar la reproducción

  • Muted: Hace que los medios se reproduzcan con el sonido apagado de forma predeterminada.

  • Loop: Hace que el audio comience a reproducirse cada vez que finaliza. Esto puede en ocasiones resultar molesto, por lo que lo mejor es utilizarlo solo si es realmente necesario.

  • Preload: Le indica al navegador que implementación podría darle una mejor experiencia al usuario, puede tener alguno de los siguientes valores:

    • none: Le indica al navegador que el usuario no tendrá que consultar el audio, y no será necesario almacenarlo en caché
    • metadata: Le indica al navegador que el usuario tendrá que consultar el audio, es razonable almacenar los metadatos
    • auto: Indica que el audio tiene prioridad, es necesario descargarlo aun si el usuario no lo use

    Si el preload no está configurado su valor será definido por el navegador.

  • src: Indica la url del audio que se va a usar. Su uso es opcional ya que también se puede usar el elemento "source" dentro del bloque de audio para indicar el audio que se va a insertar.

    Las compensaciones de tiempo se especifican como valores float que indican el número de segundos que se va a compensar.

Nota: los atributos autoplay y preload no fuerzan al navegador a seguir el valor del atributo, son solo una sugerencia.

Nota: los atributos width y height no tienen efecto en un elemento audio, ya que no hay un componente visual que estructurar.

Nota: En cualquier momento se puede restablecer al principio el elemento de audio con JavaScript, ubicando el elemento "source" por su id y asignándole la propiedad "load()".

Incorporar subtítulos

Esto se realiza creando un archivo "WebVTT", este tipo de archivo está creado con el fin de almacenar cadenas de texto junto con metadatos para indicar en qué momento se mostrará cada cadena de texto e incluso información de estilo y posicionamiento. Las cadenas de texto se denominan señales y existen diferentes tipos con diferentes usos:

  • Subtitles (Subtítulos): Son traducciones de un lenguaje extranjero usado en el video o audio

  • Captions (Leyendas): Son transcripciones de diálogos o sonidos significativos para que puedan ser entendidas en situaciones en las que no se puede escuchar el audio

  • timed descriptions (descripciones cronometradas): Texto para conversión a audio, para atender a personas con discapacidad visual.

Un ejemplo de la vista de un código WebVTT sería:

Para que este archivo se muestre junto con la reproducción de medios HTML se debe:

  1. Guardar el archivo ".vtt" en el lugar correcto

  2. Enlazar el archivo ".vtt" con la etiquetas "track". La pista debe colocarse dentro de los elementos audio o video, pero después de todos los elementos de origen (source)

  3. Usar la etiquetas "kind" para definir si el archivo se trata de subtítulos, leyendas o descripciones"

El siguiente es un ejemplo del código resultante

Nota: en el ejemplo se usa un elemento "video" pero también se puede usar con uno "audio".

Nota: Se puede usar JavaScript para habilitar el botón de subtítulos, y elegir entre por ejemplo varios lenguajes.

Nota: Los navegadores se nutren especialmente del texto, eso incluye incluso a los subtítulos de un elemento multimedia, lo cual le permite al navegador vincularse incluso con el fragmento del elemento multimedia que coincida con la búsqueda.

Canvas

Se usa para crear gráficos a través de comandos JavaScript, también se puede usar para crear animaciones y hacer composiciones de fotos, se trata de una etiqueta bastante reciente así que solo está disponible en versiones recientes de los navegadores.

Atributos

  • width: Se trata de la anchura del elemento, el valor predeterminado es de 300px

  • height: Se trata de la altura del elemento, el valor predeterminado es de 150px

Sobre Accesibilidad

El elemento canvas no provee ninguna información adicional sobre los elementos que tiene dibujados. El contenido de la etiqueta canvas no se muestra a los lectores de pantalla como otras etiquetas semánticas. Como regla general, deberías evitar utilizar canvas en un sitio accesible.

Embed

Representa junto con el elemento "object" una herramienta de incrustación de propósito general, en otras palabras se diferencia de "iframe" ya que "embed" puede incrustar múltiples tipos de contenido externo que incluyan tecnologías de complemento como Java Applets y Flash, en otras palabras puede ejecutar contenido externo y sus plug-in.

Nota: Un plug-in (complemento) es un software que permite que el navegador ejecute un elemento con el cual no es compatible de forma nativa

En sí el "embed" es una tecnología heredada por HTML5, no es verdaderamente usado ya que los subprogramas con plug-in no se utilizan desde hace algunos años, pese a esto se puede dar alguna circunstancia de que se encuentre como puede ser en intranets o proyectos empresariales.

Atributos

  • Embed incluye los atributos globales

  • height: altura mostrada en px

  • width: ancho mostrado en px

  • src: La dirección URL del recurso que se está incrustando

  • type: El tipo MIME que se va a usar para la selección del plug-in para crear una instancia

Figure

Es una etiqueta HTML5, se trata de un contenedor con la función de vincular una imagen con un texto de pie de imagen, cumple un rol semántico.

La forma de emplearlo consiste en que este elemento contenga en su interior el elemento "img" y el elemento "figcaption".

Iframe

Esta etiqueta se utiliza para incorporar documentos web en el documento actual, esto es bueno para poder incluir contenido de terceros sobre el cual no se tenga el control web dentro de la nuestra, por ejemplo de esto está el siguiente video el cual pese a visualizarse en esta página realmente ningún elemento de este se encuentra en la página, en su lugar se tomó una sección directamente de la página de youtube y se insertó aquí de la siguiente manera:

Primero que nada recordemos que youtube brinda la opción de incrustar videos en otras páginas web muy fácilmente a través de los siguientes pasos:

  1. Primero nos dirigimos al video que deseamos incorporar

  2. Luego hacemos clic en el botón "Compartir"

  3. Seleccionamos la opción de "insertar", y se nos brindará un código HTML con la etiqueta "iframe" ya incorporada (podemos configurar algunas cosas sobre cómo queremos que se visualice el video en nuestra página)

  4. Copiamos el código y lo incrustamos en el archivo HTML deseado

El resultado es el siguiente

Google Maps también permite hacer algo muy similar, de la siguiente forma:

  • Vamos a Google Maps y buscamos el mapa que deseamos incorporar

  • Hacemos clic en el menú de la esquina superior izquierda de la página

  • Seleccionamos "Compartir o insertar mapa"

  • Seleccionamos la opción de "insertar", la cual nos dará un código HTML ya estructurado

  • Copiamos el código y lo insertamos en nuestro archivo HTML para incorporarlo

Nota: Es muy importante tener en cuenta el tema de los derechos de autor al usar un "iframe", lo mejor es nunca mostrar contenido del que no se sea el propietario o el dueño brindando un consentimiento por escrito, en el caso de que el contenido sea licenciado se deben obtener y cumplir los términos de la licencia.

Atributos:

  • allowfullscreen: Si está configurado, el "iframe" se puede colocar en modo pantalla completa usando el Full Screen API

  • Frameborder: Al asignarle un valor de "1" añade un borde alrededor de todo el elemento incrustado, su valor mínimo es "0", actualmente no es recomendable su uso ya que se obtiene el mismo o mejores resultados con CSS

  • Src: Al igual que en los elementos "video", "audio", "img" contiene la ruta que apunta al documento a incrustar

  • Contenido de reserva: Al igual que un elemento "audio" o "video" el "iframe" incluye un texto que se mostrará en caso de que el navegador no soporte esta etiquetas (actualmente es poco probable que se encuentre un navegador que no lo ejecute), se incorpora mediante un elemento "p" dentro de la etiqueta de apertura y de cierre del "iframe" (Suele contener un enlace al documento que se pretendía insertar)

  • width: Define la anchura del elemento

  • height: Define la altura del elemento

  • sandbox: Este atributo solicita una mayor configuración de seguridad en el "iframe" (Requiere versiones de navegadores más recientes)

Nota: Es recomendable establecer el atributo "src" con JavaScript luego de que se cargue el contenido principal para que de esa forma la página se pueda usar antes y cargue de forma más rápida.

Seguridad

Los "iframe" son "Vectores de ataque", es decir, objetivos de ataque de crackers, por lo tanto pudiesen llegar a ser vulnerabilidades en una página web, para esto se han desarrollado varios mecanismos y buenas prácticas para hacerlos más seguros.

Configurar el Servidor: Una de estas prácticas consiste en incluir en el servidor en el que albergue la página una configuración para evitar que la página sea incrustada en "iframe" ya que de esta forma se evita que se robe el contenido de la página y otros lo reclamen como propio o que inserten el sitio web en una página maliciosa para robar información del usuario, sin mencionar que el costo del ancho de banda consumido por ejecutar el "iframe" correría por parte de la página que está siendo insertada.

Aplicarlo solo si es necesario: Ya que los "iframes" representan un cierto riesgo siempre es bueno limitar su uso a solo aquellos casos en los que sea necesario su implementación.

Usar HTTPS: HTTPS es la versión encriptada de HTTP, pese a su costo se debería de incorporar a la página web siempre que sea posible, ya que brinda dos grandes ventajas:

  1. Reduce las posibilidades de que el contenido remoto sea manipulado mientras se encuentra en tránsito
  2. Impide que el contenido manipulado acceda al contenido padre y viceversa

Nunca se debería de insertar contenido de terceros mediante el HTTP, debido al gran peligro que conlleva, una buena solución es GitHub pages el cual permite usar HTTPS por defecto, por lo tanto no es necesario tramitar el certificado de seguridad

Siempre usar el atributo "sandbox": Básicamente consiste en brindarle al elemento y su contenido únicamente los permisos necesarios para hacer su trabajo, un contenido sin restricciones puede hacer muchas cosas como por ejemplo ejecutar JavaScript, es por eso que se restringe la funcionalidad del elemento y su contenido para reducir las opciones de un cracker. El atributo "sandbox" por defecto aplica todas las restricciones posibles al elemento "iframe" pero de ser necesario se pueden volver a conceder permisos uno por uno. Un recordatorio de seguridad importante es nunca conceder el permiso de allow-scripts junto con allow-same-origin ya que estos eventos pudiesen saltarse las medidas de seguridad y ejecutar Scripts para desactivar el "sandbox" por completo

Nota: sandbox no evita que un usuario pueda ser engañado por contenido malicioso, si existe alguna posibilidad de que el contenido pudiese ser malicioso lo mejor es publicarlo desde un dominio diferente al principal

Configurar directivas CSP: Esto es con exactitud la configuración de servidor que se nombró con anterioridad, consisten en programar un envío de encabezados HTTP (metadatos) para evitar que la página web se presente en un iframe

Nota: Una buena regla de oro para la seguridad web es "Nunca puedes ser demasiado cauteloso. Si lo hizo, verifíquelo de todos modos. Si alguien más lo hizo, asuma que es peligroso hasta que se demuestre lo contrario".

← PREVIO
1
2
3
Next →

Contacto

¿Quién soy?

Mi nombre es Carlos Miguel Puche Moreno, estoy estudiando programación web de forma autodidacta, si quieres saber más visita mi perfil de GitHub haciendo clic en mi fotografía, o visitas mis redes sociales:

Redes

Curriculum