Cours Développement Frontend - Les médias
HTML - Les médias
Nous allons aujourd’hui nous intéresser aux médias en HTML. Nous allons voir les images, les vidéos et l’audio.
Les images
Les images peuvent être vectorielles (.svg) ou matricielles (.png, .jpg, .gif, etc).
Elles sont inclues grâce à la balise <img src="path/to/my/image" alt="Texte alternatif">
.
Pour être inclue, le chemin indiqué dans l’attribut src
doit pointer soit vers un fichier existant sur le même serveur que votre site, soit vers une ressource externe : dans le cas d’une ressource externe accessible via HTTP, il faudra mettre l’URL entière.
Par exemple :
<img src="https://images.unsplash.com/photo-1506443432602-ac2fcd6f54e0?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80" alt="Image d'une éclipse">
Il est possible de définir la taille d’une image, en jouant directement sur sa balise. Exemple :
<img src="path/to/my/image" alt="Texte alternatif" width="150" height="150">
\/!\ Nous avons vu en cours qu’il était préférable de mettre le style CSS dans un fichier séparé. Dans le cas des images, il n’y a pas de réponse toute faite. Cependant, il faut noter ceci :
- utiliser les attributs
width
etheight
n’est pas une bonne pratique : votre CSS pourrait se substituer à ces attributs et donner une image déformée ; - il est alors préférable soit d’utiliser du CSS, soit d’utiliser l’attribut
style
comme suit :
<img src="path/to/my/image" alt="Texte alternatif" style="width:150px;height:auto;">
Faut-il utiliser l’attribut style
ou bien du CSS ?
Tout va dépendre du besoin. Dans une optique de performance, il est peut-être préférable d’utiliser l’attribut style
. Dans une optique de qualité de code et donc de découplage du style et du HTML, on aurait plus tendance à faire comme suit :
<img class="bigImage" src="path/to/my/image" alt="Texte alternatif">
Et dans un fichier de style CSS
.bigImage {
width: 300px; /* une largeur en px */
height: auto; /* on laisse la hauteur se dimensionner automatiquement pour garder le ratio */
}
Les deux façons de faire son valables, il faut simplement comprendre pourquoi on choisit l’une et pas l’autre.
Quelques remarques :
- il est préférable de pointer vers des images qui se trouvent sur la même machine que votre fichier HTML (performance) ;
- il est important de spécifier un texte alternatif à afficher le temps que l’image charge, ou bien si l’image ne s’affiche pas, avec l’attribut
alt
; - je vous recommande de respecter la sémantique et d’utiliser la balise
<figure></figure>
pour y placer votre<img ...>
et la balise<figcaption></figcaption>
si vous voulez lui spécifier une légende.
Exercice 1
Créez un fichier index.html
et un fichier style.css
, et rendez-vous sur le site https://unsplash.com. Choisissez deux photos : une que vous allez télécharger, l’autre dont vous allez prendre l’URL.
Dans votre fichier index.html
, incluez les deux images pour que votre page web les affiche.
Une fois que cela est fait, redimensionnez-les via CSS en leur appliquant une hauteur et une largeur de 200px
.
Exercice 2
Vous devriez alors voir que vos images sont plus ou moins déformées ! En effet, en leur appliquant un format carré, nous ne tenons pas compte de leur échelle hauteur/largeur réelle !
Pour palier cela, retournez dans votre CSS, et mettez une largeur de 200px
et une hauteur à auto
ou 100%
.
Essayez maintenant de ne pas spécifier de hauteur : qu’est-ce que cela change ?
Mettez maintenant la hauteur à 200px
et la largeur à 100%
. Quel est le rendu visuel ?
Vous devriez alors remarquer que la largeur prévaut sur la hauteur.
Exercice 3
Dans le CodePen suivant, redimensionnez les images pour qu’elles tiennent toutes les trois dans la largeur de la page. https://codepen.io/nugetchar/pen/qBPNaKO.
Les vidéos
Les vidéos peuvent être intégrées de plusieurs manières.
Les vidéos en provenance d’autres sites
Bien entendu, il est possible d’intégrer des vidéos, en provenance par exemple de YouTube, avec des <iframe></iframe>
. Ce n’est pas ce que nous allons voir dans ce cours.
<iframe width="560" height="315" src="https://www.youtube.com/embed/XkvrHQNmigs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
La balise <video></video>
Une vidéo s’inclue dans une page HTML à l’aide de la balise <video></video>
. De la même manière que pour les images, on aura tendance à jouer sur les dimensions soit avec l’attribut style
<!-- Dimensionnement avec l'attribut style -->
<video src="path/to/my/video" style="width:150px; height:auto">
</video>
soit avec du CSS :
<video src="path/to/my/video" class="bigVideo">
</video>
.bigVideo {
width: 500px;
height: auto;
}
Les différents attributs
Il est possible de personnaliser le comportement d’un lecteur vidéo de base avec les attributs spécifiques à la balise <video></video>
. En voici quelques-uns :
src
: indique l’emplacement de la vidéocontrols
: permet d’afficher les contrôles de la vidéo (play/pause, le son, mode plein écran)autoplay
: indique que la vidéo doit démarrer dès que possibleposter
: permet de spécifier une image de preview avant que l’utilisateur ne joue la vidéopreload
: indique au navigateur à quel moment les données de la vidéo doivent être chargées : dès le chargement de la page, uniquement les metadata ou au moment où l’utilisateur décide de jouer la vidéo
Le problème des codecs
Pour pouvoir lire un format donné de vidéo, un navigateur a besoin de codecs. Tous les navigateurs ne disposent pas forcément des bons codecs. C’est pour cela qu’il est intéressant d’utiliser la balise <source></source>
afin de proposer un ensemble de formats que le navigateur pourra lire :
<video>
<source src="./assets/drone.mp4" type="video/mp4">
<source src="./assets/drone.ogg" type="video/ogg">
<p>Ce texte s'affichera si aucun format n'est supporté</p>
</video>
Les medias audio
À l’instar des vidéos, on utilisera la balise <audio></audio>
pour incorporer un media audio dans un document HTML. Cette balise offre des attributs similaires, et permet également de travailler avec la balise <source></source>
pour spécifier l’emplacement de divers formats.