Eu tenho 2 telas, uma usa atributos HTML width
e height
para dimensioná-la, a outra 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>
O Compteur1 é exibido como deveria, mas não o compteur2. O conteúdo é desenhado usando JavaScript em uma tela de 300 x 300.
Por que há uma diferença de exibição?
#attr-canvas-width
). O problema é que eu cliquei no erradowidth
antes e fui para a#dom-canvas-width
seção. Arquivado em w3.org/Bugs/Public/show_bug.cgi?id=9469 sobre isso.Para definir
width
eheight
você precisa, você pode usarfonte
el.setAttribute('width', parseInt($el.css('width')))
fez o truque, graçaswidth: 100%;
propriedade css?canvas.setAttribute('width', window.getComputedStyle(canvas, null).getPropertyValue("width"));
. Repita para a altura.Para
<canvas>
elementos, o CSS governawidth
eheight
define o tamanho real do elemento da tela que será desenhado na página. Por outro lado, os atributos HTMLwidth
eheight
definem o tamanho do sistema de coordenadas ou da 'grade' que a API da tela usará.Por exemplo, considere isso ( jsfiddle ):
Ambos tiveram a mesma coisa desenhada em relação às coordenadas internas do elemento canvas. Mas na segunda tela, o retângulo vermelho terá o dobro da largura porque a tela como um todo está sendo esticada por uma área maior pelas regras do CSS.
Nota: Se as regras de CSS para
width
e / ouheight
não forem especificadas, o navegador usará os atributos HTML para dimensionar o elemento, de modo que 1 unidade desses valores seja igual a 1px na página. Se esses atributos não forem especificados, eles serão padronizados como awidth
de300
e aheight
de150
.fonte
A tela será esticada se você definir a largura e a altura no seu CSS. Se você deseja manipular dinamicamente a dimensão da tela, use o JavaScript da seguinte forma:
fonte
canvas.setAttribute
antescanvas.getContext('2d')
para evitar o alongamento da imagem.O navegador usa a largura e a altura do CSS, mas o elemento da tela é dimensionado com base na largura e altura da tela. Em javascript, leia a largura e a altura do CSS e defina a largura e a altura da tela para isso.
fonte
Correção Shannimal
fonte
O CSS define a largura e a altura do elemento da tela, de modo que afeta o espaço das coordenadas, deixando tudo o que está distorcido
Aqui está o meu caminho sobre como definir a largura e a altura com Vanilla JavaScript
fonte
Se você deseja um comportamento dinâmico baseado em, por exemplo, consultas de mídia CSS, não use atributos de largura e altura da tela. Use regras CSS e, em seguida, antes de obter o contexto de renderização da tela, atribua aos atributos width e height os estilos CSS width e height:
fonte