欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

canvas画布的宽高设定为什么不能用css设置-解析

程序员文章站 2022-05-24 21:30:09
...

1、仅将样式设置在css中的到的是拉伸的图 是错误的

canvas画布的宽高设定为什么不能用css设置-解析

2、仅在canvas中设置宽高属性 正确

canvas画布的宽高设定为什么不能用css设置-解析

3、仅 使用js设置宽高属性 正确

canvas画布的宽高设定为什么不能用css设置-解析

总结 

正确的情况是一条45度倾斜从(10,10)到(200,200)的直线,但是显示的效果变形了
<canvas >中有默认宽高300px*150px,如果在<canvas>标签中没有设定宽高,那么浏览器就会取默认值并进行拉伸,实际上我们在css中定义的宽高并没有生效,所以会出现变形的情况。
正确的写法应该是在<canvas>中设定所需宽高。

注意:
    js中设置时不要写成 canvas.style.width,那样等于是设置了css,仍然会被拉伸。
    设置的值 也不能加单位 如 200 px 不然也是错误的 也就是设置了css  错误的方式
    错误
    canvas.style.width=200px;
    canvas.style.height='200px';

    
    正确
    canvas.width=200;
    canvas.height=200;

    canvas画布宽高只能通过数值设定,不能使用百分比,也不需要单位。

附完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>canvas基础-绘制矩形</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        #canvas{
            border: 1px solid rebeccapurple;
            /* width: 500px;
            height: 500px; */
        }
    </style>
</head>
<body>
    <!-- 
        默认透明,
        默认宽300 高150  像素,
		
        注意事项:不要使用css设置canvas的宽和高。

        同时画布是透明的png,默认画布上的点、线、文字色 都是黑色
        坐标系:下和右是坐标系正方向 。

        canvas 是画布,所以也是图片
        width
        height
        也可以使用js指定画布的宽和高
     -->
    <canvas id="canvas"  width="500" height="400">您的浏览器不支持canvas,请升级</canvas>

    <script>
        // 获取元素
        let canvas = document.getElementById('canvas');
        // 可以用js设置 但不要加style.width 这样又成css了
        // canvas.width = 500;
        // canvas.height = 500;
        //获取画笔对象( 画布的上下文环境对象 )
        let ctx = canvas.getContext('2d');
        console.log(canvas.getContext,ctx);
        //绘制一个矩形  画笔对象上肯定有一个绘制矩形的功能函数   fillRect() 填充一个矩形  strokeRect 描边一个矩形
        // fillRect(x,y,width,height)

        ctx.moveTo(10,10);
        ctx.lineTo(200,200);
        ctx.lineWidth = 2;
        ctx.strokeStyle = 'red';
        ctx.stroke();

    </script>
</body>
</html>