Für <canvas>
Elemente setzen die CSS-Regeln für width
und height
die tatsächliche Größe des Canvas-Element, das gezogen werden wird Die Seite. Auf der anderen Seite legen die HTML-Attribute width
und height
die Größe des Koordinatensystems oder Gitters fest, das die Canvas-API verwenden soll.
Betrachten wir zum Beispiel das (jsfiddle):
var ctx = document.getElementById('canvas1').getContext('2d');
ctx.fillStyle = "red";
ctx.fillRect(10, 10, 30, 30);
var ctx2 = document.getElementById('canvas2').getContext('2d');
ctx2.fillStyle = "red";
ctx2.fillRect(10, 10, 30, 30);
canvas {
border: 1px solid black;
}
<canvas id="canvas1" style="width: 50px; height: 100px;" height="50" width="100"></canvas>
<canvas id="canvas2" style="width: 100px; height: 100px;" height="50" width="100"></canvas>
Sowohl die auf sie relativ zu den inneren Koordinaten des Canvas-Element gezogen gleiche Sache gemacht haben. Aber in der zweiten Leinwand wird das rote Rechteck doppelt so breit sein, weil die Leinwand insgesamt durch die CSS-Regeln über einen größeren Bereich gestreckt wird.
Hinweis: Wenn die CSS-Regeln für width
und/oder height
nicht angegeben sind, verwendet der Browser die HTML-Attribute, um das Element so zu skalieren, dass 1 Einheit dieser Werte 1px auf der Seite entspricht.Wenn diese Attribute nicht angegeben sind, werden sie standardmäßig auf width
von 300
und height
von 150
gesetzt.
in der Tat .. Ich dachte immer, direkte Attribute wie „Breite“ und „Höhe“ wurden als veraltet in den letzten html-Versionen .. – Sirber
Oh, anscheinend ist es tatsächlich ziemlich gut beschrieben bei http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#attr-canvas- Breite (Abschnitt '# attr-canvas-width'). Das Problem ist, dass ich vorher die falsche "Breite" angeklickt habe und stattdessen zum Abschnitt "# dom-canvas-width" gegangen bin. Gespeichert http://www.w3.org/Bugs/Public/show_bug.cgi?id=9469 darüber. – SamB
hast du mir schreckliche Kopfschmerzen erspart .... Danke! – nurxyz