Essayer de coder ← Retour aux sujets

Audio et vidéo

audio · video

Les balises <audio> et <video> intègrent un média sans plugin. L'attribut controls affiche les commandes (lecture, volume, plein écran).

<audio controls src="son.mp3"></audio>
Lecteur audio
<video controls width="480" src="film.mp4">
Lecteur vidéo de 480 pixels de large
poster="apercu.jpg"
Image affichée avant le début de la lecture
<source src="film.webm" type="video/webm">
Plusieurs formats : le navigateur prend le premier qu'il sait lire
autoplay muted loop
Lecture automatique (muette obligatoire) et en boucle
<track kind="subtitles" src="fr.vtt" srclang="fr">
Sous-titres
video.html
<video controls width="480" poster="apercu.jpg">
  <source src="cours.webm" type="video/webm">
  <source src="cours.mp4" type="video/mp4">
  <track kind="subtitles" src="cours-fr.vtt" srclang="fr" label="Français" default>
  Votre navigateur ne sait pas lire cette vidéo.
</video>
Rendu
Un lecteur vidéo de 480 pixels de large avec ses boutons ; l'image « apercu.jpg » s'affiche avant la lecture et les sous-titres français sont proposés.

Éléments interactifs

details · progress

HTML propose des composants prêts à l'emploi, sans JavaScript : volets dépliables, barres de progression, jauges.

<details><summary>Titre</summary> … </details>
Volet qui se déplie au clic
<progress value="40" max="100">
Avancement d'une tâche
<meter value="65" min="0" max="100">
Jauge : une valeur dans un intervalle connu
<iframe src="plan.html" title="Plan">
Intègre une autre page dans celle-ci
<canvas id="zone" width="300" height="150">
Surface de dessin pilotée par JavaScript
<svg> … </svg>
Dessin vectoriel intégré à la page
composants.html
<details>
  <summary>Qu'est-ce que le DOM ?</summary>
  <p>Une représentation de la page sous forme d'arbre d'objets.</p>
</details>

<label for="avancement">Chapitre terminé à</label>
<progress id="avancement" value="40" max="100">40 %</progress>

<label for="batterie">Charge</label>
<meter id="batterie" min="0" max="100" low="20" high="80" optimum="100" value="65">65 %</meter>
Rendu
Un volet « Qu'est-ce que le DOM ? » replié (un clic affiche la phrase), une barre d'avancement remplie à 40 % et une jauge à 65 %.

🎬 Le cours : intégrer des médias

Une page moderne mêle texte, images, sons, vidéos et dessins. HTML5 sait tous les intégrer directement, sans installer de plugin. Cette fiche passe en revue les balises de médias et quelques composants interactifs qui évitent d'écrire du JavaScript.

Audio et vidéo

AttributEffet
controlsaffiche les commandes ; sans lui, rien n'est visible pour l'audio
autoplaylance la lecture au chargement ; les navigateurs le bloquent si le son est actif, il faut muted
mutedson coupé au départ
looprelit en boucle
preload="none"ne télécharge rien avant le clic (économise des données)
posterimage affichée avant la lecture (vidéo)
width heightdimensions de la vidéo ; réserve la place dans la page

Tous les navigateurs ne lisent pas les mêmes formats. On propose donc plusieurs <source> du plus récent au plus compatible : MP4 (H.264) est lu presque partout, WebM est plus léger. Le texte placé entre les balises ne s'affiche que si aucun format ne convient.

Accessibilité des médias

Une vidéo ou un son n'est pas accessible à tout le monde. Ajoute des sous-titres (<track kind="subtitles">, fichier .vtt) et, si possible, une transcription textuelle. C'est aussi utile dans un couloir bruyant ou sans casque.

Images adaptatives : picture et srcset

Un téléphone n'a pas besoin d'une image de 1600 pixels de large. srcset propose plusieurs versions (avec leur largeur en pixels, suffixe w) et sizes dit quelle largeur l'image occupera : le navigateur choisit la plus adaptée. <picture> permet de changer d'image (recadrage) selon la taille de l'écran.

adaptatif.html
<picture>
  <source media="(min-width: 800px)" srcset="banniere-large.webp">
  <img src="banniere-petite.webp" alt="Bannière du cours NSI" width="400" height="120">
</picture>

<img src="photo-800.jpg"
     srcset="photo-400.jpg 400w, photo-800.jpg 800w, photo-1600.jpg 1600w"
     sizes="(min-width: 800px) 50vw, 100vw"
     alt="Salle informatique" width="800" height="533">

Intégrer une autre page : iframe

Un <iframe> affiche une autre page dans un cadre : une carte, une vidéo hébergée ailleurs, une démonstration. Donne-lui toujours un title (lu par les lecteurs d'écran) et des dimensions. Ce que contient la page intégrée échappe à ton contrôle : sandbox restreint ses pouvoirs et loading="lazy" retarde son chargement.

iframe.html
<iframe src="plan.html" title="Plan du lycée" width="400" height="300" loading="lazy"></iframe>

Volets dépliables : details et summary

<details> est un volet fermé par défaut ; <summary> en est le titre cliquable. L'attribut open le déplie au chargement. C'est idéal pour une FAQ, sans une ligne de JavaScript, et c'est accessible au clavier.

progress et meter

<progress> représente l'avancement d'une tâche (téléchargement, chapitre terminé). <meter> représente une mesure dans un intervalle connu (charge d'une batterie, note sur 20) et change de couleur selon low, high et optimum. Ne confonds pas les deux : une barre de progression avance dans le temps, une jauge n'est qu'un niveau.

Dessiner : SVG ou canvas ?

SVG décrit des formes (<circle>, <rect>, <path>) sous forme d'éléments HTML : le dessin reste net à toute taille, chaque forme est stylable en CSS et accessible au DOM. <canvas> est une surface de pixels sur laquelle JavaScript dessine, adaptée aux jeux et aux animations lourdes.

formes.html
<svg width="120" height="120" viewBox="0 0 120 120" role="img" aria-label="Cercle rouge sur fond clair">
  <rect width="120" height="120" fill="#f1f5f9"/>
  <circle cx="60" cy="60" r="40" fill="#ef4a34"/>
</svg>
Rendu
Un cercle rouge centré dans un carré clair de 120 pixels.
canvas.html
<canvas id="zone" width="200" height="100"></canvas>
<script>
  const ctx = document.getElementById("zone").getContext("2d");
  ctx.fillStyle = "#2563eb";
  ctx.fillRect(20, 20, 160, 60);
</script>
Rendu
Un rectangle bleu de 160 pixels sur 60, dessiné par JavaScript.

Poids et droits

  • Compresse les images et les vidéos avant de les publier : un média de plusieurs dizaines de mégaoctets ruine la page sur téléphone.
  • Précise les dimensions (width, height) pour que la page ne « saute » pas pendant le chargement.
  • N'utilise que des médias dont tu as le droit : les siens, ou sous licence libre en citant l'auteur.

⚠️ Erreurs fréquentes

Oublier controls

À éviter
faux.html
<audio src="son.mp3"></audio>      <!-- invisible : aucun bouton -->
Correct
correct.html
<audio src="son.mp3" controls></audio>

Compter sur autoplay avec du son

Les navigateurs interdisent la lecture automatique d'un média sonore : ta vidéo reste figée. Ajoute muted, ou laisse l'utilisateur lancer la lecture.

Un seul format, ou le mauvais

Un fichier .mov ou .avi ne se lit pas partout. Convertis en MP4 (H.264) et, si possible, en WebM, puis déclare les deux avec <source>.

Un iframe sans title

Un lecteur d'écran annonce « cadre » sans savoir ce qu'il contient. Écris title="Plan du lycée".

Mettre l'information uniquement dans une vidéo

Si l'explication essentielle n'existe qu'en vidéo, les personnes sourdes, malvoyantes ou en connexion lente la perdent. Double-la par un texte ou une transcription.

Charger une énorme image pour l'afficher en petit

Une photo de 5 Mo affichée en 300 pixels gaspille de la bande passante. Redimensionne-la, ou propose plusieurs tailles avec srcset.

📋 Aide-mémoire

  • <video controls width poster> et <audio controls> ; plusieurs <source src type> ; <track> pour les sous-titres.
  • autoplay exige muted ; loop répète ; preload="none" économise des données.
  • srcset + sizes : le navigateur choisit la bonne taille ; <picture> change l'image selon l'écran.
  • <iframe src title> pour une page intégrée ; sandbox et loading="lazy" pour limiter les risques et le poids.
  • <details><summary> : volet sans JavaScript ; <progress> : avancement ; <meter> : jauge.
  • SVG : formes vectorielles dans le DOM ; <canvas> : pixels dessinés par JavaScript.