浅析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 相关文章推荐
一款纯css3实现的动画加载导航
Oct 08 HTML / CSS
五款漂亮的纯CSS3动画按钮的实例教程
Nov 21 HTML / CSS
详解Html5原生拖拽操作
Jan 12 HTML / CSS
web页面录屏实现
Feb 12 HTML / CSS
html特殊符号示例 html特殊字符编码对照表
Jan 14 HTML / CSS
HTML5中5个简单实用的API
Apr 28 HTML / CSS
html5使用canvas绘制一张图片
Dec 15 HTML / CSS
简单介绍HTML5中的文件导入
May 08 HTML / CSS
浅谈基于HTML5的在线视频播放方案
Feb 18 HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
Mar 24 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
Sep 11 HTML / CSS
CSS中实现动画效果-附案例
Feb 28 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
JAVA/JSP学习系列之六
2006/10/09 PHP
php mssql 时间格式问题
2009/01/13 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
微信小程序实现星星评价效果
2018/11/02 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
react 生命周期实例分析
2020/05/18 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
超简单使用Python换脸实例
2019/03/27 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Python实现自动整理文件的脚本
2020/12/17 Python
如何用Python徒手写线性回归
2021/01/25 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
Internet体系结构
2014/12/21 面试题
教师师德教育的自我评价
2013/10/31 职场文书
小学音乐教学反思
2014/02/05 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
庆元旦广播稿
2014/02/10 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
董存瑞观后感
2015/06/11 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS
Mysql排序的特性详情
2021/11/01 MySQL