Tengo 2 lienzos, uno usa atributos HTML width
y height
para dimensionarlo, el otro usa CSS:
<canvas id="compteur1" width="300" height="300" onmousedown="compteurClick(this.id);"></canvas>
<canvas id="compteur2" style="width: 300px; height: 300px;" onmousedown="compteurClick(this.id);"></canvas>
Compteur1 se muestra como debería, pero no compteur2. El contenido se dibuja usando JavaScript en un lienzo de 300x300.
¿Por qué hay una diferencia de visualización?
#attr-canvas-width
). El problema es que hice clic en el errorwidth
antes y fui a la#dom-canvas-width
sección en su lugar. Archivado w3.org/Bugs/Public/show_bug.cgi?id=9469 al respecto.Para configurar
width
yheight
que necesita, puede usarfuente
el.setAttribute('width', parseInt($el.css('width')))
hizo el truco, graciaswidth: 100%;
propiedad css?canvas.setAttribute('width', window.getComputedStyle(canvas, null).getPropertyValue("width"));
. Repita para la altura.Para los
<canvas>
elementos, las reglas CSSwidth
yheight
establecen el tamaño real del elemento del lienzo que se dibujará en la página. Por otro lado, los atributos HTML dewidth
yheight
establecen el tamaño del sistema de coordenadas o 'cuadrícula' que utilizará la API de lienzo.Por ejemplo, considere esto ( jsfiddle ):
A ambos se les ha dibujado lo mismo en relación con las coordenadas internas del elemento de lienzo. Pero en el segundo lienzo, el rectángulo rojo tendrá el doble de ancho porque las reglas de CSS extienden el lienzo como un todo en un área más grande.
Nota: Si las reglas CSS para
width
y / oheight
no se especifican, el navegador usará los atributos HTML para dimensionar el elemento de manera que 1 unidad de estos valores sea igual a 1px en la página. Si no se especifican estos atributos, los valores predeterminados serán awidth
de300
y aheight
de150
.fuente
El lienzo se estirará si establece el ancho y la altura en su CSS. Si desea manipular dinámicamente la dimensión del lienzo, debe usar JavaScript de esta manera:
fuente
canvas.setAttribute
antescanvas.getContext('2d')
para evitar el estiramiento de la imagen.El navegador utiliza el ancho y el alto del CSS, pero el elemento del lienzo se escala según el ancho y el alto del lienzo. En javascript, lea el ancho y alto de css y configure el ancho y alto del lienzo para eso.
fuente
Corrección de Shannimal
fuente
CSS establece el ancho y la altura del elemento de lienzo para que afecte el espacio de coordenadas dejando todo dibujado torcido
Este es mi camino sobre cómo establecer el ancho y la altura con Vanilla JavaScript
fuente
Si desea un comportamiento dinámico basado en, por ejemplo, consultas de medios CSS, no use atributos de ancho y alto de lienzo. Utilice las reglas de CSS y luego, antes de obtener el contexto de representación del lienzo, asigne a los atributos de ancho y alto los estilos de ancho y alto de CSS:
fuente