Para <canvas>
elementos, las reglas CSS para width
y height
establecer el tamaño real del elemento de tela que será dibujado a la página. Por otro lado, los atributos HTML de width
y height
establecen el tamaño del sistema de coordenadas o 'cuadrícula' que utilizará la API de lienzo.
Por ejemplo, considere esto (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>
Ambos han tenido la misma cosa dibujado en ellas relativa a las coordenadas internas del elemento canvas. Pero en el segundo lienzo, el rectángulo rojo será el doble de ancho porque el lienzo como un todo se extiende a través de un área más grande por las reglas de CSS.
Nota: Si no se especifican las reglas CSS para width
y/o height
, el navegador utilizará los atributos HTML para ajustar el tamaño del elemento de modo que 1 unidad de estos valores sea igual a 1px en la página.Si no se especifican estos atributos, se establecerán por defecto en width
de 300
y height
de 150
.
de hecho .. Siempre pensé atributos directos como "ancho" y "alto" quedaron en desuso en versiones recientes de html. – Sirber
Oh, aparentemente se describe bastante bien en http://www.whatwg.org/specs/web-apps/current-work/multipage/the- canvas-element.html#attr-canvas- ancho (sección '# attr-canvas-width'). El problema es que hice clic en el 'ancho 'incorrecto antes y en su lugar fui a la sección' # dom-canvas-width'. Archivado http://www.w3.org/Bugs/Public/show_bug.cgi?id=9469 al respecto. – SamB
me salvaste un terrible dolor de cabeza ... ¡gracias! – nurxyz