1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
---
title: '<canvas> : l''élément de canevas graphique'
slug: Web/HTML/Element/canvas
tags:
- Canvas
- Element
- HTML
- Reference
- Web
translation_of: Web/HTML/Element/canvas
---
<div>{{HTMLRef}}</div>
<p>L'élément <strong><code><canvas></code></strong> permet de modifier une zone graphique via un script (habituellement en <a href="/fr/docs/Web/JavaScript">JavaScript</a> ou grâce à <a href="/fr/docs/Apprendre/WebGL">WebGL</a>). Il peut par exemple être utilisé afin de dessiner des graphiques, manipuler des images ou jouer des animations.</p>
<p>Pour plus d'information sur l'élément <code><canvas></code>, voir la page sur <a href="/fr/docs/Web/HTML/Canvas">canvas</a>.</p>
<h2 id="Attributs">Attributs</h2>
<p>Comme les autres éléments HTML, cet élément possède les <a href="/fr/docs/Web/HTML/Attributs_universels">attributs globaux</a>.</p>
<dl>
<dt>{{htmlattrdef("height")}}</dt>
<dd>La hauteur de l'espace pour l'élément, exprimée en pixels CSS. La valeur par défaut est 150.</dd>
<dt>{{htmlattrdef("moz-opaque")}} {{non-standard_inline}}</dt>
<dd>Cet attribut permet d'indiquer s'il y aura de la transparence ou non. Si le canevas sait qu'il n'y aura pas de transparence, les performances de rendu pourront être améliorées. Cet attribut est uniquement pris en charge par les navigateurs Mozilla, il est préférable d'utiliser la méthode standard {{domxref("HTMLCanvasElement.getContext()", "canvas.getContext('2d', { alpha: false})")}} à la place.</dd>
<dt>{{htmlattrdef("width")}}</dt>
<dd>La largeur de l'espace pour l'élément, exprimée en pixels CSS. La valeur par défaut est 300.</dd>
</dl>
<h2 id="Notes_d'utilisation">Notes d'utilisation</h2>
<h3 id="Contenu_alternatif">Contenu alternatif</h3>
<p>Il est fortement recommandé de fournir un contenu alternatif au contenu du bloc <code><canvas></code>. Ce contenu pourra être utilisé par les navigateurs plus anciens qui ne supportent pas l'élément <code><canvas></code> et ceux pour lesquels JavaScript est désactivé.</p>
<h3 id="Balise_<canvas>_obligatoire">Balise <code></canvas></code> obligatoire</h3>
<p>À la différence de {{HTMLElement("img")}}, l'élément {{HTMLElement("canvas")}} doit être fermé avec la balise fermante <code></canvas></code>.</p>
<h3 id="Dimensionnement_du_canevas_CSS_ou_HTML">Dimensionnement du canevas : CSS ou HTML</h3>
<p>On peut modifier la taille affichée du canevas grâce à une feuille de style. L'image est mise à l'échelle lors du rendu pour correspondre à la taille indiquée par le style. Toutefois, cela pourra distordre l'image lors du rendu final.</p>
<p>Mieux vaut utiliser les attributs explicites <code>width</code> et <code>height</code> de l'élément en HTML (ou via du code JavaScript).</p>
<h3 id="Taille_maximale_d'un_canevas">Taille maximale d'un canevas</h3>
<p>La taille maximale d'un élément <code><canvas></code> dépend du navigateur utilisé. Voici un tableau de mesures provenant de tests et diverses sources (ex. <a href="https://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element">Stack Overflow</a>):</p>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Navigateur</th>
<th scope="col">Hauteur maximale</th>
<th scope="col">Largeur maximale</th>
<th scope="col">Aire maximale</th>
</tr>
</thead>
<tbody>
<tr>
<td>Chrome</td>
<td>32 767 pixels</td>
<td>32 767 pixels</td>
<td>268 435 456 pixels (soit 16 384 x 16 384)</td>
</tr>
<tr>
<td>Firefox</td>
<td>32 767 pixels</td>
<td>32 767 pixels</td>
<td>472 907 776 pixels (soit 22 528 x 20 992)</td>
</tr>
<tr>
<td>Safari</td>
<td>32 767 pixels</td>
<td>32 767 pixels</td>
<td>268 435 456 pixels (soit 16 384 x 16 384)</td>
</tr>
<tr>
<td>IE</td>
<td>8 192 pixels</td>
<td>8 192 pixels</td>
<td>?</td>
</tr>
</tbody>
</table>
<div class="blockIndicator note">
<p><strong>Note :</strong> Si on dépasse les dimensions ou l'aire maximale, le canevas deviendra inutilisable et les commandes de dessin ne fonctionneront pas.</p>
</div>
<h2 id="Exemples">Exemples</h2>
<h3 id="HTML">HTML</h3>
<p>Le fragment de code suivant ajoute un élément <code>canvas</code> au document. Un texte alternatif est fourni au cas où le navigateur ne peut pas afficher ce canevas. Un texte alternatif ou bien des éléments internes permettront de rendre le canevas plus accessible.</p>
<pre class="brush: html"><canvas id="canvas" width="300" height="300">
Désolé, votre navigateur ne prend pas en charge &lt;canvas&gt;.
</canvas>
</pre>
<h3 id="JavaScript">JavaScript</h3>
<p>On utilise également ce fragment de code JavaScript avec la méthode {{domxref("HTMLCanvasElement.getContext()")}} afin d'obtenir le contexte de dessin puis on dessine sur le canevas.</p>
<pre class="brush: js">var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'green';
ctx.fillRect(10, 10, 100, 100);</pre>
<h3 id="Gérer_l'opacité">Gérer l'opacité</h3>
<p>Si le canevas n'utilise pas la transparence, on pourra indiquer au navigateur que le canevas est opaque afin d'optimiser le rendu. Pour cela, on pourra utiliser la propriété <code>alpha</code> avec la valeur <code>false</code>.</p>
<pre class="brush: js">var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d', {alpha: false});</pre>
<p>Avant que cette option soit standard, on pouvait utiliser l'attribut HTML <code>moz-opaque</code> {{non-standard_inline}} {{deprecated_inline}} pour les navigateurs basés sur Gecko. Toutefois, ce n'est pas une solution standard, cf. le bug {{bug(878155)}} pour suivre le retrait de cet attribut.</p>
<h3 id="Résultat">Résultat</h3>
<p>{{EmbedLiveSample("Exemples","300","300")}}</p>
<h2 id="Accessibilité">Accessibilité</h2>
<h3 id="Contenu_alternatif_2">Contenu alternatif</h3>
<p>Seul, l'élément <code><canvas></code> est une image matricielle et ne fournit pas d'informations sur les objets dessinés. Le contenu d'un canevas n'est pas accessible aux outils d'assistance qui se basent sur le contenu sémantique du document HTML. De façon générale, on évitera de se servir uniquement de <code><canvas></code> pour produire un document accessible.</p>
<ul>
<li><a href="/Fr/docs/Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility">Les régions cliquables et l'accessibilité</a></li>
<li><a href="https://www.w3.org/WAI/PF/HTML/wiki/Canvas_Accessibility_Use_Cases">Cas d'utilisation pour l'accessibilité de <code><canvas></code></a></li>
<li><a href="https://www.w3.org/html/wg/wiki/AddedElementCanvas">Problèmes d'accessibilité de l'élément <code><canvas></code></a></li>
<li><a href="http://www.paciellogroup.com/blog/2012/06/html5-canvas-accessibility-in-firefox-13/">L'accessibilité de l'élément <code><canvas></code> dans Firefox 13, un article de Steve Faulkner (en anglais)</a></li>
<li><a href="https://html.spec.whatwg.org/multipage/scripting.html#best-practices">Les meilleures pratiques pour concevoir des éléments <code><canvas></code> interactifs</a></li>
</ul>
<h2 id="Résumé_technique">Résumé technique</h2>
<table class="properties">
<tbody>
<tr>
<th scope="row"><dfn><a href="/fr/docs/Web/HTML/Catégorie_de_contenu">Catégories de contenu</a></dfn></th>
<td><a href="/fr/docs/Web/HTML/Catégorie_de_contenu#Contenu_de_flux">Contenu de flux</a>, <a href="/fr/docs/Web/HTML/Catégorie_de_contenu#Contenu_phrasé">contenu phrasé</a>, <a href="/fr/docs/Web/HTML/Catégorie_de_contenu#Contenu_intégré">contenu intégré</a>, <a href="/fr/docs/Web/HTML/Catégorie_de_contenu#Contenu_tangible">contenu tangible</a>.</td>
</tr>
<tr>
<th scope="row"><dfn>Contenu autorisé</dfn></th>
<td>Transparent mais sans aucun descendant étant du <a href="/fr/docs/Web/HTML/Catégorie_de_contenu#Contenu_interactif">contenu interactif</a> à l'exception des éléments {{HTMLElement("a")}}, {{HTMLElement("button")}}, {{HTMLElement("input")}} dont l'attribut {{htmlattrxref("type", "input")}} vaut <code>checkbox</code>, <code>radio</code>, ou <code>button</code>.</td>
</tr>
<tr>
<th scope="row"><dfn>Omission de balises</dfn></th>
<td>{{no_tag_omission}}</td>
</tr>
<tr>
<th scope="row"><dfn>Parents autorisés</dfn></th>
<td>Tout contenu acceptant du <a href="/fr/docs/Web/HTML/Catégorie_de_contenu#Contenu_phrasé">contenu phrasé</a>.</td>
</tr>
<tr>
<th scope="row">Rôles ARIA autorisés</th>
<td>Tous les rôles sont autorisés</td>
</tr>
<tr>
<th scope="row"><dfn>Interface DOM</dfn></th>
<td>{{domxref("HTMLCanvasElement")}}</td>
</tr>
</tbody>
</table>
<h2 id="Spécifications">Spécifications</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Spécification</th>
<th scope="col">État</th>
<th scope="col">Commentaires</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('HTML WHATWG', 'scripting.html#the-canvas-element', '<canvas>')}}</td>
<td>{{Spec2('HTML WHATWG')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('HTML5 W3C', 'scripting-1.html#the-canvas-element', '<canvas>')}}</td>
<td>{{Spec2('HTML5 W3C')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>
<div class="hidden">Ce tableau de compatibilité a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div>
<p>{{Compat("html.elements.canvas")}}</p>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
<li><a href="/fr/docs/Web/HTML/Canvas">Le portail MDN sur l'élément <code><canvas></code></a></li>
<li><a href="/fr/docs/Tutoriel_canvas">Tutoriel <code><canvas></code></a></li>
<li><a href="https://simon.html5.org/dump/html5-canvas-cheat-sheet.html">Anti-sèche <code><canvas></code></a></li>
</ul>
|