OUJOOD.COM
La balise Canvas HTML5 : Créer des Graphiques Dynamiques
HTML5 cours tutorialL'élément <canvas> représente une révolution dans la création de graphiques dynamiques en HTML5. Cette API puissante permet aux développeurs de dessiner des formes vectorielles, d'afficher des images, de créer des animations fluides et de développer des jeux interactifs directement dans le navigateur, sans plugin externe.
Dans ce tutoriel approfondi, vous découvrirez comment maîtriser le contexte 2D du canvas, utiliser les méthodes de dessin avancées, optimiser les performances de rendu et créer des visualisations graphiques professionnelles avec JavaScript.
Exemple Complet : Dessiner Formes Géométriques et Texte Stylisé
Cet exemple démontre les capacités du canvas pour créer un cercle avec dégradé radial, un triangle rempli de couleur unie, un rectangle avec dégradé linéaire multicolore et un texte avec contour dégradé.
<!DOCTYPE html> <html> <head> <title>HTML5 Canvas - Dessiner des Graphiques</title> </head> <body> <canvas id="monCanvas" width="280" height="160" style="border:1px solid #c3c3c3;"> Votre navigateur ne supporte pas l'élément <canvas>. </canvas> <script> // Récupération de l'élément canvas du DOM var c=document.getElementById("monCanvas"); var canvOK=1; // Vérification de la compatibilité du navigateur avec canvas try {c.getContext("2d");} catch (er) {canvOK=0;} if (canvOK==1) { // Obtention du contexte de rendu 2D var ctx=c.getContext("2d"); // Dessin d'un triangle rouge rempli ctx.beginPath(); ctx.moveTo(180,20); // Point de départ du triangle ctx.lineTo(250,40); // Deuxième sommet ctx.lineTo(140,100); // Troisième sommet ctx.fillStyle="#FF0000"; // Couleur de remplissage rouge ctx.fill(); // Création d'un dégradé radial pour le cercle var grd=ctx.createRadialGradient(75,50,5,90,50,90); grd.addColorStop(0,"white"); // Couleur au centre grd.addColorStop(1,"blue"); // Couleur en périphérie ctx.fillStyle=grd; // Dessin d'un cercle avec le dégradé ctx.beginPath(); ctx.arc(75,50,40,0,2*Math.PI); // Centre (75,50), rayon 40px ctx.fill(); // Création d'un dégradé linéaire multicolore var grd2=ctx.createLinearGradient(20,90,120,90); grd2.addColorStop(0,"black"); grd2.addColorStop("0.3","magenta"); grd2.addColorStop("0.5","blue"); grd2.addColorStop("0.6","green"); grd2.addColorStop("0.8","gold"); grd2.addColorStop(1,"red"); ctx.fillStyle=grd2; // Dessin d'un rectangle avec dégradé ctx.fillRect(20,105,100,50); // Configuration de la police pour le texte ctx.font="30px Verdana"; // Création d'un dégradé pour le contour du texte var grd3=ctx.createLinearGradient(140,20,240,90); grd3.addColorStop(0,"black"); grd3.addColorStop("0.2","magenta"); grd3.addColorStop("0.5","blue"); grd3.addColorStop("0.6","green"); grd3.addColorStop(1,"red"); ctx.strokeStyle=grd3; // Dessin du texte avec contour dégradé ctx.strokeText("Un texte",140,130); } </script> </body> </html>
Qu'est-ce que l'Élément <canvas> HTML5 ?
L'élément <canvas> HTML5 est un conteneur graphique programmable qui permet de générer des graphiques vectoriels et bitmap directement dans le navigateur. Contrairement aux images statiques, le canvas offre un rendu dynamique en temps réel via des scripts JavaScript.
Le <canvas> fonctionne comme une zone de dessin bitmap où chaque pixel peut être manipulé individuellement. Cette API puissante permet de créer des visualisations de données interactives, des jeux HTML5, des éditeurs graphiques en ligne et des animations complexes.
L'élément canvas dispose de méthodes natives pour dessiner des chemins vectoriels, des formes géométriques primitives (rectangles, cercles, arcs), du texte stylisé, appliquer des transformations matricielles et intégrer des images externes.
Support Navigateurs pour Canvas HTML5 (2026)
En 2026, l'élément <canvas> est universellement supporté par tous les navigateurs modernes : Chrome, Firefox, Safari, Edge et Opera. Le support est complet pour les contextes 2D et WebGL.
Note importante : Internet Explorer 11 (fin de support en 2022) était le dernier navigateur Microsoft à supporter partiellement canvas. Les versions IE 8 et antérieures ne supportaient pas cette API. Aujourd'hui, avec Microsoft Edge basé sur Chromium, le support canvas est optimal.
Comment Créer une Zone de Dessin Canvas en HTML5
Un canvas représente une surface de dessin rectangulaire bitmap définie dans votre page HTML. La création d'un canvas nécessite l'utilisation de la balise <canvas> avec des attributs dimensionnels obligatoires.
Particularité importante : Par défaut, l'élément <canvas> est transparent et sans bordure. Il est invisible jusqu'à ce que du contenu soit dessiné ou qu'un style CSS soit appliqué.
Syntaxe de Base du Canvas
Le balisage minimal pour créer un canvas fonctionnel :
<canvas id="monCanvas" width="200" height="100"></canvas>
Règle essentielle : Toujours spécifier un attribut id unique pour référencer le canvas en JavaScript, et des attributs width et height pour définir la résolution de la zone de dessin en pixels.
Astuce professionnelle : Vous pouvez intégrer plusieurs éléments <canvas> dans une même page HTML pour créer des interfaces multi-graphiques ou des tableaux de bord interactifs.
Ajouter une Bordure Visible au Canvas
Pour visualiser les limites du canvas pendant le développement, utilisez l'attribut style avec une bordure CSS :
<canvas id="monCanvas" width="200" height="100" style="border:1px solid #000000;"> </canvas>
Dessiner sur le Canvas avec JavaScript
Tout le processus de dessin sur canvas s'effectue via JavaScript en utilisant le contexte de rendu 2D. Le canvas lui-même n'est qu'un conteneur ; c'est le contexte qui fournit les méthodes de dessin.
Exemple : Rectangle Rouge avec Remplissage
<script> // Étape 1 : Récupération de l'élément canvas par son ID var c=document.getElementById("monCanvas"); // Étape 2 : Obtention du contexte de rendu 2D var ctx=c.getContext("2d"); // Étape 3 : Définition de la couleur de remplissage en hexadécimal ctx.fillStyle="#FF0000"; // Étape 4 : Dessin du rectangle (x, y, largeur, hauteur) ctx.fillRect(0,0,150,75); </script>
Explication Technique Détaillée
Étape 1 - Sélection du canvas : Utilisez getElementById() pour cibler l'élément canvas dans le DOM :
var c=document.getElementById("monCanvas");
Étape 2 - Activation du contexte 2D : Appelez la méthode getContext("2d") pour obtenir l'interface de dessin 2D. Le paramètre "2d" est obligatoire et spécifie le type de rendu :
var ctx=c.getContext("2d");
L'objet getContext("2d") est une interface native HTML5 qui expose de nombreuses propriétés et méthodes pour manipuler les graphiques : tracés vectoriels, formes primitives, courbes de Bézier, textes, images et transformations géométriques.
Étape 3 & 4 - Configuration et dessin : Ces deux lignes définissent le style de remplissage et dessinent un rectangle :
ctx.fillStyle="#FF0000"; // Rouge en notation hexadécimale ctx.fillRect(0,0,150,75); // Position (0,0), dimensions 150x75px
La propriété fillStyle accepte plusieurs formats : couleurs CSS (hexadécimal, RGB, RGBA, HSL), dégradés linéaires ou radiaux, et motifs d'image. La valeur par défaut est #000000 (noir).
La méthode fillRect(x, y, largeur, hauteur) dessine un rectangle rempli en utilisant le style de remplissage actif. Les coordonnées (x,y) définissent le coin supérieur gauche.
Système de Coordonnées du Canvas
Le système de coordonnées canvas utilise un repère cartésien 2D avec l'origine (0,0) située dans le coin supérieur gauche. L'axe X s'étend horizontalement vers la droite, l'axe Y verticalement vers le bas.
Pour la méthode fillRect() précédente avec les paramètres (0,0,150,75), l'interprétation est la suivante : commencer au point d'origine (0,0) et dessiner un rectangle de 150 pixels de largeur et 75 pixels de hauteur.
Canvas - Dessiner des Chemins et Tracés Vectoriels
Pour créer des lignes droites personnalisées sur un canvas, utilisez les méthodes de tracé de chemin qui définissent des points de contrôle :
moveTo(x, y) : Déplace le "stylo virtuel" vers une position sans tracer de ligne. Définit le point de départ du tracé.
lineTo(x, y) : Trace une ligne droite depuis la position actuelle jusqu'aux coordonnées spécifiées.
Méthode de rendu : Pour afficher réellement le tracé, utilisez une méthode de rendu comme stroke() (contour) ou fill() (remplissage).
Exemple : Tracer une Ligne Diagonale
Création d'une ligne partant du point (0,0) jusqu'au point (200,100) :
var c=document.getElementById("monCanvas");
var ctx=c.getContext("2d");
// Définir le point de départ du tracé
ctx.moveTo(0,0);
// Tracer une ligne vers le point d'arrivée
ctx.lineTo(200,100);
// Rendre visible le tracé avec la méthode stroke
ctx.stroke();
Exemple Pratique : Graphique Linéaire avec Canvas
Cet exemple démontre comment utiliser canvas pour créer un graphique linéaire simple avec une image de fond servant de repère cartésien :
<!DOCTYPE html> <html> <head> <title>HTML5 Canvas - Graphique Linéaire</title> </head> <body> <canvas id="monCanvas" width="180" height="130" style="border:1px solid #c3c3c3;"> Votre navigateur ne supporte pas l'élément <canvas>. </canvas> <script> // Récupération du contexte de rendu var ctx = document.getElementById('monCanvas').getContext('2d'); // Création d'un objet Image pour le fond var img = new Image(); img.src = 'http://www.oujood.com/html5/images/repere.png'; // Dessiner après chargement complet de l'image img.onload = function(){ // Afficher l'image de fond (grille/repère) ctx.drawImage(img,0,0); // Commencer un nouveau tracé pour la courbe ctx.beginPath(); // Définir les points de données du graphique ctx.moveTo(30,96); // Point de départ ctx.lineTo(70,66); // Deuxième point ctx.lineTo(103,76); // Troisième point ctx.lineTo(170,15); // Point final // Tracer la ligne du graphique ctx.stroke(); } </script> </body> </html>
Canvas - Dessiner des Cercles et Arcs
Pour créer des formes circulaires et arcs sur canvas, utilisez la méthode polyvalente arc() :
Syntaxe : arc(x, y, rayon, angleDebut, angleFin)
Les angles sont exprimés en radians. Pour un cercle complet : 0 à 2π (2*Math.PI).
Exemple : Créer un Cercle Complet
var c=document.getElementById("monCanvas");
var ctx=c.getContext("2d");
// Initialiser un nouveau tracé
ctx.beginPath();
// Dessiner un arc de cercle complet
// Centre (95,50), rayon 40px, de 0 à 2π radians
ctx.arc(95,50,40,0,2*Math.PI);
// Afficher le contour du cercle
ctx.stroke();
Canvas - Afficher du Texte Stylisé
Le canvas offre deux méthodes principales pour afficher du texte avec un contrôle typographique complet :
font : Propriété CSS pour définir la famille de police, taille, style et poids
fillText(texte, x, y) : Affiche du texte rempli (plein) à la position spécifiée
strokeText(texte, x, y) : Affiche uniquement le contour du texte
Utilisation de fillText() : Texte Rempli
Exemple d'affichage d'un texte plein avec la police Arial 30px :
var c=document.getElementById("monCanvas");
var ctx=c.getContext("2d");
// Configuration de la police (syntaxe CSS)
ctx.font="30px Arial";
// Afficher le texte rempli à la position (10,50)
ctx.fillText("Hello World",10,50);
Utilisation de strokeText() : Texte en Contour
Exemple d'affichage d'un texte avec uniquement le contour des caractères :
var c=document.getElementById("monCanvas");
var ctx=c.getContext("2d");
// Configuration de la typographie
ctx.font="30px Arial";
// Dessiner uniquement le contour du texte
ctx.strokeText("Hello World",10,50);
Canvas - Dégradés Linéaires et Radiaux
Les dégradés canvas permettent de créer des transitions de couleur fluides pour remplir des formes, du texte ou des tracés. Le canvas supporte deux types de dégradés professionnels :
createLinearGradient(x0, y0, x1, y1) : Crée un dégradé linéaire entre deux points
createRadialGradient(x0, y0, r0, x1, y1, r1) : Crée un dégradé radial entre deux cercles
Après création d'un objet dégradé, utilisez la méthode addColorStop(position, couleur) pour définir les paliers de couleur. Les positions sont des valeurs entre 0.0 (début) et 1.0 (fin).
Exemple : Dégradé Linéaire Horizontal
Création d'un rectangle avec transition rouge vers blanc :
var c=document.getElementById("monCanvas");
var ctx=c.getContext("2d");
// Créer un dégradé horizontal (de x=0 à x=200)
var grd=ctx.createLinearGradient(0,0,200,0);
// Couleur au début du dégradé (position 0)
grd.addColorStop(0,"red");
// Couleur à la fin du dégradé (position 1)
grd.addColorStop(1,"white");
// Appliquer le dégradé comme style de remplissage
ctx.fillStyle=grd;
// Dessiner le rectangle avec le dégradé
ctx.fillRect(10,10,150,80);
Exemple : Dégradé Radial Circulaire
Création d'un rectangle avec dégradé du centre vers l'extérieur :
var c=document.getElementById("monCanvas");
var ctx=c.getContext("2d");
// Créer un dégradé radial
// Cercle intérieur : centre (75,50), rayon 5
// Cercle extérieur : centre (90,60), rayon 100
var grd=ctx.createRadialGradient(75,50,5,90,60,100);
// Couleur au centre
grd.addColorStop(0,"red");
// Couleur en périphérie
grd.addColorStop(1,"white");
// Appliquer le dégradé
ctx.fillStyle=grd;
// Remplir le rectangle avec le dégradé radial
ctx.fillRect(10,10,150,80);
Canvas - Intégration et Manipulation d'Images
Pour afficher des images bitmap sur le canvas, utilisez la méthode drawImage() qui supporte plusieurs signatures :
drawImage(image, x, y) : Affiche l'image à sa taille native
drawImage(image, x, y, largeur, hauteur) : Redimensionne l'image
drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) : Découpe et affiche une portion d'image
Exemple : Afficher une Image sur Canvas
<!DOCTYPE html> <html> <head> <title>HTML5 Canvas - Affichage d'Images</title> </head> <body> <canvas id="monCanvas" width="260" height="160" style="border:1px solid #c3c3c3;"> Votre navigateur ne supporte pas l'élément <canvas>. </canvas> <script> // Obtenir le contexte de rendu var ctx = document.getElementById('monCanvas').getContext('2d'); // Créer un nouvel objet Image var img = new Image(); // Définir la source de l'image img.src = 'http://www.oujood.com/html5/images/image007.jpg'; // Attendre le chargement complet avant de dessiner img.onload = function(){ // Dessiner l'image à la position (0,0) ctx.drawImage(img,0,0); }; </script> </body> </html>
Référence Complète HTML Canvas
Pour une documentation exhaustive de toutes les propriétés et méthodes de l'API Canvas, avec des exemples interactifs et des cas d'usage avancés, consultez notre référence complète Canvas.
| Balise | Description |
|---|---|
| <canvas> | Élément HTML5 utilisé pour dessiner des graphiques dynamiques via JavaScript (contextes 2D et WebGL) |
Par carabde | Mis à jour le 11 février 2026