浅析canvas元素的html尺寸和css尺寸对元素视觉的影响


Posted in HTML / CSS onJuly 22, 2019

遇到的问题:canvas元素变形失真的原因

一个DOM元素存在三种尺寸:style尺寸,html尺寸,css尺寸。

使用canvas元素时,canvas元素默认宽高是300px * 150px。这里的默认尺寸是html尺寸。

为了更好地帮助理解,以作画为例。画板是css尺寸或者style尺寸,画布是html尺寸。

如果我们没有显示指定canvas元素的html尺寸,而在css文件中指定了它的css尺寸。结果是十分令人困惑。

例如我们在一个默认300px * 150px的画布上画了一个圆半径为50px的圆。

<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>canvas尺寸</title>
    <style>
        #canvas {
            width: 200px;
            height: 200px;
        }
    </style>
</head>
<body>
<div>
    <canvas id="canvas"></canvas>
</div>
<script>
    window.onload = function () {
        const canvas = document.getElementById("canvas");
        const ctx = canvas.getContext("2d");
        ctx.beginPath();
        ctx.strokeStyle = "#aaaaaa";
        ctx.arc(100, 100, 50, 0, 2 * Math.PI);
        ctx.stroke();
        ctx.closePath();
    };
</script>
</body>
</html>

最后显示的结果如下:

浅析canvas元素的html尺寸和css尺寸对元素视觉的影响

可以看出画布的尺寸确实是200 * 200。但是圆已经变成了椭圆,图形发生了形变。这是为什么呢?

如果移除css设定的尺寸又会怎么样呢?

浅析canvas元素的html尺寸和css尺寸对元素视觉的影响

可以看出此时图形是正常的。画布的尺寸确实是默认的300 * 150。

从对比以及想象中我们可以得出结论:

起初我们是在300 150的画布上绘制一个圆。绘制完成之后,我们又希望将画布的尺寸变成200 200,同时画布还是那块画布,不作更换。

可行的方法是将画布经行拉伸。假设画布存在弹性,那么一块画布从300 150拉伸成200 200。画布上的圆的长半轴变成原来的1.33倍,短半轴变成0.68倍。此时圆自然就是椭圆了。

结论:

在使用canvas画图的时候,为了避免不必要的麻烦,一定记得为canvas元素设定html尺寸的宽高。

总结

以上所述是小编给大家介绍的浅析canvas元素的html尺寸和css尺寸对元素视觉的影响,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

HTML / CSS 相关文章推荐
纯CSS实现预加载动画效果
Sep 06 HTML / CSS
检测用户浏览器是否支持CSS3的方法
Aug 29 HTML / CSS
IE兼容css3圆角的实现代码
Jul 21 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
Mar 16 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
Jan 17 HTML / CSS
基于ccs3的timeline时间线实现方法
Apr 30 HTML / CSS
html5 跨文档消息传输示例探讨
Apr 01 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
May 07 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
Jan 10 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
May 15 HTML / CSS
使用数据结构给女朋友写个Html5走迷宫游戏
Nov 26 HTML / CSS
Html5新增了哪些功能
Apr 16 HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
Jul 18 #HTML / CSS
详解window.open被浏览器拦截的解决方案
Jul 18 #HTML / CSS
data:image data url 文件转为Blob上传后端的方法
Jul 16 #HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
Jul 09 #HTML / CSS
Html5移动端适配IphoneX等机型的方法
Jun 25 #HTML / CSS
微信小程序之html5 canvas绘图并保存到系统相册
Jun 20 #HTML / CSS
使用canvas一步步实现图片打码功能的方法
Jun 17 #HTML / CSS
You might like
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
PHP如何实现跨域
2016/05/30 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
js实现tab切换效果
2017/02/16 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
python实现批量监控网站
2016/09/09 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
python实现微信远程控制电脑
2018/02/22 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
Python中url标签使用知识点总结
2020/01/16 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
应届生污水处理求职信
2013/11/06 职场文书
日语专业毕业生自荐信
2013/11/11 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
财政局个人总结
2015/03/04 职场文书
交通事故被告答辩状
2015/05/22 职场文书
怎样写观后感
2015/06/19 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript