Ancho y alto del lienzo en HTML5

Resuelto Dustin asked hace 13 años • 3 respuestas

¿Es posible corregir el ancho y el alto de un canvaselemento HTML5?

La forma habitual es la siguiente:

<canvas id="canvas" width="300" height="300"></canvas>
Dustin avatar Feb 09 '11 03:02 Dustin
Aceptado

El canvaselemento DOM tiene propiedades .heighty .widthque corresponden a los atributos height="…"y width="…". Configúrelos en valores numéricos en código JavaScript para cambiar el tamaño de su lienzo. Por ejemplo:

var canvas = document.getElementsByTagName('canvas')[0];
canvas.width  = 800;
canvas.height = 600;

Tenga en cuenta que esto borra el lienzo, aunque debe seguir con ctx.clearRect( 0, 0, ctx.canvas.width, ctx.canvas.height);para manejar aquellos navegadores que no borran completamente el lienzo. Deberá volver a dibujar cualquier contenido que desee que se muestre después del cambio de tamaño.

Tenga en cuenta además que la altura y el ancho son las dimensiones lógicas del lienzo utilizadas para dibujar y son diferentes de los atributos CSS style.heighty style.width. Si no configura los atributos CSS, el tamaño intrínseco del lienzo se utilizará como tamaño de visualización; Si configura los atributos CSS y difieren de las dimensiones del lienzo, su contenido se escalará en el navegador. Por ejemplo:

// Make a canvas that has a blurry pixelated zoom-in
// with each canvas pixel drawn showing as roughly 2x2 on screen
canvas.width  = 400;
canvas.height = 300; 
canvas.style.width  = '800px';
canvas.style.height = '600px';

Vea este ejemplo en vivo de un lienzo ampliado 4x.

Mostrar fragmento de código

Phrogz avatar Feb 08 '2011 22:02 Phrogz

Un lienzo tiene 2 tamaños, la dimensión de los píxeles en el lienzo (es el almacén de respaldo o el buffer de dibujo) y el tamaño de visualización. El número de píxeles se establece mediante los atributos del lienzo. En HTML

<canvas width="400" height="300"></canvas>

O en JavaScript

someCanvasElement.width = 400;
someCanvasElement.height = 300;

Separados de eso están el ancho y alto del estilo CSS del lienzo.

En CSS

canvas {  /* or some other selector */
   width: 500px;
   height: 400px;
}

O en JavaScript

canvas.style.width = "500px";
canvas.style.height = "400px";

Podría decirse que la mejor manera de hacer un lienzo de 1x1 píxeles es USAR SIEMPRE CSS para elegir el tamaño y luego escribir un poquito de JavaScript para que la cantidad de píxeles coincida con ese tamaño.

function resizeCanvasToDisplaySize(canvas) {
   // look up the size the canvas is being displayed
   const width = canvas.clientWidth;
   const height = canvas.clientHeight;

   // If it's resolution does not match change it
   if (canvas.width !== width || canvas.height !== height) {
     canvas.width = width;
     canvas.height = height;
     return true;
   }

   return false;
}

¿Por qué es esta la mejor manera? Porque funciona en la mayoría de los casos sin tener que cambiar ningún código.

Aquí hay un lienzo de ventana completo:

Mostrar fragmento de código

Y aquí hay un lienzo como flotador en un párrafo.

Mostrar fragmento de código

Aquí hay un lienzo en un panel de control de tamaño considerable.

Mostrar fragmento de código

aquí hay un lienzo como fondo

Mostrar fragmento de código

Debido a que no configuré los atributos, lo único que cambió en cada muestra es el CSS (en lo que respecta al lienzo)

Notas:

  • No coloques bordes ni relleno en un elemento de lienzo. Calcular el tamaño para restarlo del número de dimensiones del elemento es problemático
gman avatar Apr 12 '2017 08:04 gman