为何通过设置canvas的style来控制其长宽,画出的图会变成2倍?

varlj 2011-02-05 12:30:48
新学HTML5,在画图时发现一个问题,以fillRect为例

当我以其属性height和width控制长宽时,一切正常

<canvas id="cav" style="border:solid 1px #000;" width="600" height="400"></canvas>


如果使用CSS控制长宽时,则我设置的值都变成了2倍,仿佛我设置了scale(2,2)一样

<canvas id="cav" style="border:solid 1px #000;width:600px;height:400px;"></canvas>


请问这是怎么回事呢,有相关说明吗?

以下为测试代码,在firefox和chrome上看到的都一样


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>test</title>
</head>
<body>
<canvas id="cav1" style="border:solid 1px #000;" width="600" height="300"></canvas>
<br/><br/>
<canvas id="cav2" style="border:solid 1px #000;width:600px;height:300px;"></canvas>

<script type="text/javascript">
//正常
var can = document.getElementById("cav1");
var ctx=can.getContext('2d');
ctx.fillRect(10,10,200,100);
ctx.stroke();

//2倍
can = document.getElementById("cav2");
ctx=can.getContext('2d');
ctx.fillRect(10,10,200,100);
ctx.stroke();
</script>
</body>
</html>
...全文
499 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zznwap 2013-10-29
  • 打赏
  • 举报
回复
我也是初学,感觉应将网页出来的效果分成绘制图形和canvas容器两部分两者并不相关。<canvas>因为只有长宽两个属性所以第一段代码正确,<canvas>标签中的长宽代码只影响容器的大小,并不影响
ctx.fillRect(10,10,200,100);
的效果;而第二段代码中CSS代码把canvas默认长宽300 150(不包括容器边框)用类似图片放大的效果强制放大到600px 300px(边框应该是602 302),所以就是看到的样子了。 总结起来css中设置的长宽并非canvas的属性。而是对绘制出的图形进行缩放。如下面的代码:
<canvas id="cav2" style="border:solid 1px #000;width:600px;height:300px;" width="600" 

height="300"></canvas>
CSS中的长宽和canvas中的长宽可同时存在。代码先处理canvas中的长宽属性确定容器大小以及
ctx.fillRect(10,10,200,100);
的绘图大小,最后再执行CSS中的width和height设置,分别对长和宽进行缩放。
paul烂熊 2011-11-11
  • 打赏
  • 举报
回复
<canvas width="600px" height="600px"></canvas>

标签内改动就不会影响图片的效果,不要在style里面改!
paul烂熊 2011-11-11
  • 打赏
  • 举报
回复
默认w:300px h:150px
paul烂熊 2011-11-11
  • 打赏
  • 举报
回复
我也试过该情况,求解
杨哥儿 2011-02-05
  • 打赏
  • 举报
回复
不知道html方面的哪个定义修改了!
licip 2011-02-05
  • 打赏
  • 举报
回复
这个还没用过,帮你关注一下。
varlj 2011-02-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kk3k2005 的回复:]

我以前测试下来
canvas只认本身的width height属性 即canvas.width....
而style中的width,height不影响canvas本身的W,H属性 只影响可视效果
这样的话 如果 canvas默认是 W:300 H:200 而style设置 600,400 则看起来有了拉伸的效果 相当于canvas的全局缩放的效果
以上是个人理解
[/Quote]

谢谢,不过文档上似乎没有专门的说明?
看来现在只能注意一下这方面了
KK3K2005 2011-02-05
  • 打赏
  • 举报
回复
我以前测试下来
canvas只认本身的width height属性 即canvas.width....
而style中的width,height不影响canvas本身的W,H属性 只影响可视效果
这样的话 如果 canvas默认是 W:300 H:200 而style设置 600,400 则看起来有了拉伸的效果 相当于canvas的全局缩放的效果
以上是个人理解

87,917

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧