canvas宽高尺寸

Canvas width、height属性

canvas的真实尺寸,默认值分别为300px、150px。

例

绘制图形时,使用的坐标,与 canvas 属性的宽高完全相同,左上点与右下点连接上

<canvas width="300" height="300" style="border: 1px solid #ccc;"></canvas>

<script>
    const canvas = document.querySelector("canvas");

    const ctx = canvas.getContext('2d');
    ctx.moveTo(0,0)
    ctx.lineTo(300,300)
    // 绘制线
    ctx.stroke();
</script>

css 的 width、height属性

使用 css 的 宽高属性,是对 canvas 的宽高属性 的 缩放,所以要搭配 canvas 的宽高属性,否则显示不正确

例

虽然下面代码设置 css 的宽高都是 200px ,但画线时,0,0 到 300,150,能够从左上角连接到右下角,说明:

  1. 如果没有设置 canvas 的宽高属性,那么就是 300宽、150高
  2. 绘图时的坐标,是基于 canvas 的宽高,css 的宽高只是 缩放比例 后,即:拉伸成 200px宽,200px高,渲染到浏览器上

<canvas  style="border: 1px solid #ccc;width:200px; height:200px;"></canvas>

<script>
    const canvas = document.querySelector("canvas");

    const ctx = canvas.getContext('2d');
    ctx.moveTo(0,0)
    ctx.lineTo(300,150)
    // 绘制线
    ctx.stroke();
</script>

例2

虽然下面代码设置 css 的宽高都是 200px ,但画线时,0,0 到 200,200,也 不能够 从左上角连接到右下角,说明:

  1. 如果没有设置 canvas 的宽高属性,那么就是 300宽、150高
  2. 绘图时的坐标,是基于 canvas 的宽高,css 的宽高只是 缩放比例 后,即:拉伸成 200px宽,200px高,渲染到浏览器上
<canvas id="canvas" style="width:200px; height:200px;">

<script>
    var canvas=document.getElementById('canvas');  
    var context=canvas.getContext('2d');
    context.beginPath();
    context.moveTo(0,0);
    context.lineTo(200,200);
    context.stroke();
</script>

最终显示结果,在画板(200X200)上渲染的图形:

总结

为了避免显示错误,保持canvas 宽高属性 和 css宽高 的 比例一致

参考:
https://segmentfault.com/a/1190000020189168


原文出处:/show_1IX8OYe8fMjo.html