【基础知识】HTML5 Canvas设置Canvas元素width和height的两种不同方式(图文)

我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。

教程介绍、教程目录等能在README里查阅。

传送门:https://github.com/827652549/CanvasStudy

目录

 

设置Canvas元素width和height的两种不同方式

方式1:通过CSS设置:

方式2:通过canvas标签的属性设置

结果对比:

小结

警告

提示


设置Canvas元素width和height的两种不同方式

方式1:通过CSS设置:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用CSS设置canvas大小会带来canvas.width的不正确</title>
    <style>
        body {
            background: #dddddd;
        }

        #canvas {
            margin: 10px;
            padding: 10px;
            background: #ffffff;
            border: thin inset #aaaaaa;
            width: 600px;
            height: 300px;
        }
    </style>
</head>
<body>
<!--canvas的默认大小是300*150像素-->
<!--设置canvas的宽高的时候,不要通过CSS来设置width和height,因为CSS只能设置Canvas的元素本身大小,不能设置元素绘图表面(drawing surface)的大小-->
<canvas id="canvas">
    Canvas不被支持
</canvas>

</body>
<script src="Unit1-1.js"></script>
</html>

效果图:

通过CSS设置的效果图:

 

方式2:通过canvas标签的属性设置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            background: #dddddd;
        }

        #canvas {
            margin: 10px;
            padding: 10px;
            background: #ffffff;
            border: thin inset #aaaaaa;

        }
    </style>
</head>
<body>
<!--canvas的默认大小是300*150像素-->
<!--设置canvas的宽高的时候,不要通过CSS来设置width和height,因为CSS只能设置Canvas的元素本身大小,不能设置元素绘图表面(drawing surface)的大小-->
<canvas id="canvas" width="600" height="300">
    Canvas不被支持
</canvas>
<p>设置canvas的宽高的时候,不要通过CSS来设置width和height,因为CSS只能设置Canvas的元素本身大小,不能设置元素绘图表面(drawing surface)的大小
    <a href="Unit1-3.html">点击查看对比</a>
</p>
</body>
<script src="Unit1-1.js"></script>
</html>

效果图:

这里附上JS代码:

/**
 * 在页面中画一个canvas,然后在居中位置写上蓝色'Hello Canvas',并加上文字描边
 * @type {HTMLElement}
 */
var canvas = document.getElementById('canvas'),
    context = canvas.getContext('2d');
//设置字体格式
context.font = '38pt Arial';
//fillStyle设置或返回填充canvas的颜色、渐变、模式,其中CornflowerBlue 矢车菊蓝
context.fillStyle = 'cornflowerblue';
//strokeStyle用于设置或返回笔触的颜色、渐变、模式
context.strokeStyle = 'blue';
//设置文字的内容和位置
context.fillText('Hello Canvas', canvas.width / 2 - 150, canvas.height / 2 + 15);
context.strokeText("Hello Canvas", canvas.width / 2 - 150, canvas.height / 2 + 15);

结果对比:

实际上通过内置属性得到的页面结果才是我们想要的,但是为何通过CSS设置的样式会和我们预期的不一样呢?

canvas实际上有两套尺寸,一个是元素本身的大小,另一个是元素绘图表面(drawing surface)的大小,通过CSS只能改变元素本身的尺寸,而通过canvas标签属性能够改变元素本身和元素绘图表面的大小。

小结

今后设置canvas属性的时候,都使用标签内width和height设置canvas的尺寸,避免出错。

警告

如果既没有使用CSS改变canvas的尺寸,又没有使用标签内的属性进行设置,那么,当元素大小与canvas的绘图表面大小不相符时,浏览器会缩放后者,使之符合前者的大小,这样的话,很可能导致奇怪的,无用的效果。

提示

默认的canvas的大小是300*150像素 

 

 

所有的代码示例均共享在我的Github中:https://827652549.github.io/Canvas/Unit1/CanvasSize.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值