(一) width/height 默认值与单位  

  Canvas  标签只有两个属性—— width\height,作为一种替换元素,它默认大小为300×150像素。

  canvas的单位只能是是px,值只能是整数。如果你设置为其他单位或者不设置,在渲染时,依旧按照像素单位显示。

  如果数值设置称负数,或者 不设置,则按照 300×150像素显示(前提是 没有设置css,否则会有一些神奇的现象出现)。

  

(二)属性与CSS权重问题

 <canvas style="background-color: #039be5; width: 300px" width="100px" ></canvas>

  请试想下,这个canvas表现出 的宽度,高度是多少?

  宽度是300px,因此,css的权重是  >   HTML 属性权重

  渲染出的高度却不是默认150px,如下图所示:

 

  渲染出的高度是450px,这是为什么呢?

  MDN上有句话: 绘制时图像会伸缩以适应它的框架尺寸

  也就是说:  这里会按照等比例缩放:  即 (300【css宽度】/100【width宽度】)*150(height默认高度) = 450 px (渲染高度) 。  

  canvas的等比特性是强制的,有时候就会造成绘制的图形会发生扭曲。

  如下,我即设置样式中的 width与height,又单独设置了 HTML属性中的width,但是 300/100=3,而300/150=2,

  所里两者比例不一致,我绘制的圆,便会出现扭曲。 因此,实际开发中,不要两者都设置。

 <canvas style="background-color: #039be5; width: 300px; height: 300px;" width="100px" ></canvas>
 let context=document.querySelector('canvas').getContext('2d');
context.fillStyle='red';
context.arc(60,65,35,0,2*Math.PI);
context.fill();

  (三) Css 中width/height 与 HTML属性 widht/height 关系

              试想下,当我们在css中设置了属性,并未设置 HTML属性时, 绘制图像时,它的坐标位置,尺寸大小是相对 我们在css中设置的宽度与高度吗?

 <canvas style="background-color: #039be5; height: 300px;" ></canvas>
<script type="text/javascript">
let context=document.querySelector('canvas').getContext('2d');
context.fillStyle='red';
context.arc(150,75,75,0,2*Math.PI);
context.fill();
</script>

 如上,我们设置一个高度为300px(宽度渲染为600px)的画布,然后在距离左顶点 150px,75px(也是圆心所在标记) 处绘制了一个圆,这个圆会居中吗? 

  如果按照真实的高度300px来计算,距离上边距75px显然是不可能居中的;合理的解释是,是按照默认的HTML height属性150px来进行了定位。

  

  如果只设置HTML属性,同样的JS绘制,效果图如下。

 <canvas style="background-color: #039be5; " height="300px" width="600px"></canvas>

   因此,使用Canvas API进行图像绘制时,其坐标位置,尺寸大小都是按照 HTML属性来进行定位的。

 

  

canvas 的HTML属性的更多相关文章

  1. canvas的globalCompositeOperation属性

    在开发过程中遇到过类似刮刮卡的效果,就是涂抹时变透明,显示出下方的内容,做法思路简单说一下问题和解决方案: 分为2层,最下面一层是内容,比如'一等奖',上面一层用一个canvas遮挡住,画布本来是透明 ...

  2. canvas线条的属性

    一.线条的帽子lineCap 取值:butt(默认值),round圆头,square方头 var canvas=document.getElementById("canvas"); ...

  3. 在html5 canvas的destination-atop属性的一些奇怪的问题

    最近在整理canvas的时候发现HTML5 Canvas开发详解一个奇怪的属性解释 目标图形是显示在画布上的位图 而原图形是指要回执在画布上的形状 w3school上面是这样说的 destinatio ...

  4. [ javascript canvas toDataURL() clip() ] javascript canvas toDataURL() clip() 属性及方法演示

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...

  5. 【HTML5】Canvas之globalCompositeOperation属性详解

    globalCompositeOperation即Canvas中的合成操作. 1.source-over 这是默认值,他表示绘制的图形将画在现有画布之上 <!DOCTYPE html> & ...

  6. 关于canvas 易忘属性

    globalAlpha=1//表示全局的一个透明度值 默认值是1 globalCompositeOperation // 默认值="source-over"(Default)

  7. HTML5新增Canvas标签及对应属性、API详解(基础一)

    知识说明: HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting! 一.标签 ...

  8. canvas绘图详解笔记之线条及线条属性

    创建 canvas 首先创建一个canvas元素,我们只需要在html文件中加入这么一句代码: <canvas id="canvas">当前浏览器不支持canvas,请 ...

  9. 用html5的canvas和JavaScript创建一个绘图程序

    本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...

随机推荐

  1. scikit-learn框架学习笔记(一)

    sklearn于2006年问世于Google,是使用python语言编写的.基于numpy.scipy和matplotlib的一个机器学习算法库,设计的非常优雅,它让我们能够使用同样的接口来实现所有不 ...

  2. vue新建移动端项目模板

    vue移动端模板 tip: 1.ui我们使用的是vux,庆幸的是,解决了打包过大的问题, 2.这里使用的是rem布局,移动端还是要使用ipad和不同尺寸的手机 3.版本:webpack:3.6.0   ...

  3. 安卓ndk 忽略 error: undefined reference to '找不到符号

    最近在搞天使之翼的mrp模拟器... 移到AndroidStudio了,现在想把原来的Android .mk那种方式的改成cmake的方式编译,但是编译时有一些符号找不到. undefined ref ...

  4. js动态添加、删除行

    <meta charset="utf-8"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transiti ...

  5. 在eclipse下,用Maven创建Spring MVC工程

    参考链接:https://www.cnblogs.com/yangyxd/p/5955630.html 1.打开Eclipse,Ctrl + N  创建Maven

  6. python源码探秘:用户函数的执行过程

    脚本函数编译后如何执行?脚本编译后是pyc码,pycodeobject对象的串行化.import时是对pyc文件反系列化.函数编译后会生成函数对象,函数对象的TP_call对应的是function_c ...

  7. 如何用jquery获取form表单的值

    $(function(){ $('.btn').click(function(){ alert($('#form').serialize()); }) }) 这样就获取到了 #form的值.

  8. Linux 下安装 tomcat

    前提:已经安装配置好了 JDK 1.下载二进制文件 wget http://us.mirrors.quenda.co/apache/tomcat/tomcat-9/v9.0.19/bin/apache ...

  9. docker swarm集群搭建以及使用滚动更新

    基础环境,三台虚拟机 172.17.3.70 172.17.3.71 172.17.3.72 系统配置:centos 7,关闭selinux 需要优化的基础配置: [root@sw1 ~]# vim ...

  10. 中兴iptv机顶盒破解教程图文:亲测中兴B760EV3、B860A、B860AV1.1完美安装应用!非ttl破解![转]

    一直以为中兴的这几个盒子只能通过ttl来破解,不过现在再也不用这么麻烦了,有了这个工具,前后破解不超3分钟!理论上支持所有中兴的iptv机顶盒的破解! 亲测中兴B760EV3.B860A.B860AV ...