canvas.width和canvas.style.width的区别

先让我们来看下代码:

<!DOCTYPE HTML>
<html>
<body>

<canvas id="myCanvas" style="border:1px solid #c3c3c3;">
Your browser does not support the canvas element.
</canvas>

<script type="text/javascript">

var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
c.style.width=‘200px‘
c.style.height=‘200px‘
var grd=cxt.createLinearGradient(0,0,100,100);
grd.addColorStop(0,"#FF0000");
grd.addColorStop(1,"#00FF00");
cxt.fillStyle=grd;
cxt.fillRect(0,0,100,100);

</script>

</body>
</html>

我的本意是在200*200px的画布上画一个100*100的正方形,但是实际的结果为

为何会这样的?

在w3网站上是这样解释的:

  The canvas element has two attributes to control the size of the coordinate space: width and height. These attributes, when specified, must have values that are valid non-negative integers. The rules for parsing non-negative integers must be used to obtain their numeric values. If an attribute is missing, or if parsing its value returns an error, then the default value must be used instead. The width attribute defaults to 300, and the height attribute defaults to 150.

  The intrinsic dimensions of the canvas element equal the size of the coordinate space, with the numbers interpreted in CSS pixels. However, the element can be sized arbitrarily by a style sheet. During rendering, the image is scaled to fit this layout size.

根据上面的描述,我理解为width/height属性在我们没有设置的时候默认为300,150。但是注意这里并没有跟单位,不是单纯的300px,150px。其实width/height是在为画布分列和分行,比如默认是分为300列200行。在没有指定style.width/height时,1列(行)的宽(高)默认为1px。但是在我们显示指定了css渲染的像素的时候,就会发生改变。

让我们回头看刚才的例子:

我们设置了style.width/height为200x200 px

所画的矩形为100x100

那我按照刚才的理论算一下:

宽200px默认分为300列则实际矩形宽为:(200/300)*100 = 66.6px

高200px默认分为150行则世纪举行高为:(200/150)*100 = 133.3px

由此得以印证

时间: 2024-12-09 22:24:00

canvas.width和canvas.style.width的区别的相关文章

点击按钮,缩放图片(img.width、img.style.width、img.offsetWidth)

前几天在慕课网上看到一个关于图片缩放的教学视频,因为当时对老师使用img.width,而不是使用img.style.width而感到奇怪,所以周末得空了,想来自己试着写出来,相关视频网址如下:http://www.imooc.com/video/1111: 最开始想着按照视频使用定时器的思路来写,但是写到后面发现使用 img.width实现不了效果,然后就按照传参的思路来写,同样使用 img.width实现不了效果,所以后面改用img.style.width:我这等小白在这问题上纠结了好久,简直

canvas标签的width和height以及style.width和style.height的区别

其实这里已经说的很明白,通俗点说就是在canvas中定义width.height跟在style中定义width和height是不同的,canvas标签的width和height是画布实际宽度和高度,绘制的图形都是在这个上面.而style的width和height是canvas在浏览器中被渲染的高度和宽度.如果canvas的width和height没指定或值不正确,就被设置成默认值(width:300px,height:150px). 实例代码 <!DOCTYPE html><html&g

css width=&quot;100&quot; style =&quot;width:100px&quot; 区别

1. width="100"是正确的,而 width="100px"是错误的, style = "width:100px"是正确的 2. style ="width:100px"优先级较高 3. 只有有限的元素支持width="100"属性,例如table, td等 4. JQuery中获取width如下 <div style="width:200px;height:200px;"

offsetwidth和style.width的区别是什么

offsetwidth和style.width的区别是什么:上面两个属性的作用优点类似,都可以返回对象的宽度,但是两者又有很大的区别,下面将通过实例简单介绍一下它们的区别.代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn/"

js的 style.width 取不到元素的宽度值

以前一直用jquery的.width()方法来获取一个元素的当前的宽度.不管该元素是否设置了宽度,CSS样式是内联.外联or内嵌,都可用此方式获得元素当前的宽度. 今天想用原生JS想获取一个元素宽度时,写document.getElementById("id").style.width或者document.getElementById("id").width都取不到值... 总结了一下.在以下情况下,js原生.style.width或者.width取不到值 1.元素

CSS width:100%和width:auto的区别

width:100%和width:auto的区别 width:auto比较聪明,如果margin已经左右占去10px的空间,那么width给的值就是580px. <style> div{ width:600px; overflow:auto; background:#ccc; } p{ width:auto; margin:10px; background:red; } </style> </head> <body> <div> <p>

SSIS 系列 - 平面文件格式的区别(Delimited,Fixed width,Ragged Right, Fixed width ...)

SSIS 中处理文件,一般在描述输出平面文件格式的时候通常会出现以下几种选项 - Delimited - 默认输出列使用逗号分隔,也可以选择其它的诸如 | ,或者 Tab 等. Fixed Width - 列定长输出,固定长度,但不换行. Fixed Width with row delimiters - 其实就相当于 Ragged right,只不过换行符 CR+LF 的位置不同,这个是新的一列显示一个换行符. Ragged right - 和上面的这个格式区别就是 CR+LF 换行符处于最后

style=&quot;width:100px&quot; 和width=100 异同

异: 1.width属性不是每个元素都支持的,一般就table和body支持. 2.style="width: 100px"是CSS样式. 2.1.CSS样式有多种方式设置,直接写成这个样子属于内联CSS,也可以把这个提出来单独放到<style>里 <html> <head>    <style>      .mydiv { width: 100px; }      div { background-color: #ddd; margin

HTML5 canvas之一:canvas element

<!DOCTYPE HTML> <html> <head> <style> body { margin: 0px; padding: 0px; } </style> </head> <body> <canvas id="myCanvas" width="578" height="200"></canvas> <script> v