canvas 的HTML属性
(一) 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属性的更多相关文章
- canvas的globalCompositeOperation属性
		在开发过程中遇到过类似刮刮卡的效果,就是涂抹时变透明,显示出下方的内容,做法思路简单说一下问题和解决方案: 分为2层,最下面一层是内容,比如'一等奖',上面一层用一个canvas遮挡住,画布本来是透明 ... 
- canvas线条的属性
		一.线条的帽子lineCap 取值:butt(默认值),round圆头,square方头 var canvas=document.getElementById("canvas"); ... 
- 在html5 canvas的destination-atop属性的一些奇怪的问题
		最近在整理canvas的时候发现HTML5 Canvas开发详解一个奇怪的属性解释 目标图形是显示在画布上的位图 而原图形是指要回执在画布上的形状 w3school上面是这样说的 destinatio ... 
- [ javascript canvas toDataURL() clip() ]  javascript canvas toDataURL() clip() 属性及方法演示
		<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ... 
- 【HTML5】Canvas之globalCompositeOperation属性详解
		globalCompositeOperation即Canvas中的合成操作. 1.source-over 这是默认值,他表示绘制的图形将画在现有画布之上 <!DOCTYPE html> & ... 
- 关于canvas 易忘属性
		globalAlpha=1//表示全局的一个透明度值 默认值是1 globalCompositeOperation // 默认值="source-over"(Default) 
- HTML5新增Canvas标签及对应属性、API详解(基础一)
		知识说明: HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting! 一.标签 ... 
- canvas绘图详解笔记之线条及线条属性
		创建 canvas 首先创建一个canvas元素,我们只需要在html文件中加入这么一句代码: <canvas id="canvas">当前浏览器不支持canvas,请 ... 
- 用html5的canvas和JavaScript创建一个绘图程序
		本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ... 
随机推荐
- Ubuntu 16.04.3 LTS 安装 MongoDB
			1.安装Ubuntu16.04 运行sudo apt-get install mongodb安装Mongodb 如果没有MongoDB库,则运行sudo apt-get update更新库. 2.运行 ... 
- WPF常用TriggerAction用法 (一)
			Microsoft.Expression.Interactivity 常用TriggerAction-> CallMethodAction ChangePropertyAction Contro ... 
- Nginx+Memcache+一致性hash算法 实现页面分布式缓存(转)
			网站响应速度优化包括集群架构中很多方面的瓶颈因素,这里所说的将页面静态化.实现分布式高速缓存就是其中的一个很好的解决方案... 1)先来看看Nginx负载均衡 Nginx负载均衡依赖自带的 ngx_h ... 
- Android View添加删除或隐藏显示的默认动画;
			代码中给控件设置Visibility ? VISIBLE : GONE ;时太生硬,用户体验不好:设置一个Android ViewGroup的默认动画很实用: 给需要添加动画的控件或布局的父布局,记住 ... 
- [Vue warn]: Duplicate keys detected: '1'. This may cause an update error
			今天遇到这个问题,遇到这个问题多数因为:key值的问题 第一种情况(key重复) <div class="name-list" v-for="(item,index ... 
- [持续交付实践] pipeline使用:Shared Libraries
			前言 随着pipeline交付流水线在团队中的推广,使用pipeline脚本的job也迅速增加.虽然我们已经基于公司的技术栈特点做了一个尽可能通用的pipeline脚本样例,让搭建者只需要修改几个赋值 ... 
- scala 随笔
			创建map,并向map添加元素 val idMap = Map( "group_id" -> "GID", "sim_id" -> ... 
- python———day02
			算术运算符 >>>1+2 3 >>>3-2 1 >>>2*2 4 >>>5/2 2.5 >>>5//2 #整除 ... 
- python3 写excel文件 xlsxwriter模块
			之前一直用这个传说中可以让python飞起来的xlwings模块来写入excel文件,今天发现xlsxwriter模块,发现这才是飞起来的feel!! 使用体验对比: xlwings:写入7000+单 ... 
- js点击图片放大
			废话不说直接放代码了: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ... 
