浅析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媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
Apr 03 HTML / CSS
一款纯css3实现简单的checkbox复选框和radio单选框
Nov 05 HTML / CSS
CSS Grid布局教程之什么是网格布局
Dec 30 HTML / CSS
利用CSS3把图片变成灰色模式的实例代码
Sep 06 HTML / CSS
用CSS3的box-reflect来制作倒影效果
Nov 15 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
Apr 26 HTML / CSS
详解canvas在圆弧周围绘制文本的两种写法
May 22 HTML / CSS
基于Canvas+Vue的弹幕组件的实现
Jul 23 HTML / CSS
HTML5 预加载让页面得以快速呈现
Aug 13 HTML / CSS
HTML5有哪些新特征
Dec 01 HTML / CSS
Html5 Geolocation获取地理位置信息实例
Dec 09 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
Dec 29 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
php 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
微信小程序开发实现消息推送
2020/11/18 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
详解supervisor使用教程
2017/11/21 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Windows下安装Scrapy
2018/10/17 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
军训学生自我鉴定
2014/02/12 职场文书
《童年的发现》教学反思
2014/02/14 职场文书
三八节标语
2014/06/27 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
违反交通法规检讨书
2014/09/10 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
志愿者事迹材料
2014/12/26 职场文书
工程部文员岗位职责
2015/02/04 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书