<canvas>设置宽高遇到的问题

在使用<canvas>元素时必须设置宽度和高度,指定可以绘画的区域大小。但是这里设置宽度和高度的时候有一个小问题。

样例代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
    <title>canvas绘图</title>

</head>
<body>
<canvas id="drawimg" width="300" height="500">A drawimg of something.</canvas>

</body>
    <script>
var drawimg=document.getElementById("drawimg");
if(drawimg.getContext){
     var context=drawimg.getContext("2d");
          context.strokeRect(0, 0, 50, 50);
          context.fillRect(51, 0, 50, 50);
}
</script>
</html>

在这里我直接在<canvas>标签内设置了绘画区域的大小。在浏览器中显示的效果是这样的

现在我不在标签内设置宽高。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
    <title>canvas绘图</title>    <style type="text/css">
    #drawimg{
    width: 300px;
    height: 500px;
        }</style>
</head>
<body>
<canvas id="drawimg" >A drawimg of something.</canvas>

</body>
    <script>
var drawimg=document.getElementById("drawimg");
if(drawimg.getContext){
     var context=drawimg.getContext("2d");
          context.strokeRect(0, 0, 50, 50);
          context.fillRect(51, 0, 50, 50);
}
</script>
</html>

这时浏览器中显示的效果就成了这样

结果,原本是宽高一样矩形,高度明显拉长了。这是为什么呢?

其实<canvas>有自己的默认宽高300px*150px,而且在<canvas>中定义width、height跟在style中定义width和height是有所区别的,<canvas>标签的width和height是绘画区域实际宽度和高度,绘制的图形都是在这个上面。而style的width和height是<canvas>在浏览器中被渲染的高度和宽度。如果<canvas>的width和height没指定或值不正确,就被设置成默认值{width:300px,height:150px}。

这就解释了为什么第二种写法导致图形被拉伸,绘画区域的大小没有在<canvas>中定义,所以设置成立默认的{width:300px,height:150px},而<style>中设置为{width:300px;height:500px;}将绘画区域的高度拉伸了。

时间: 2024-10-06 00:07:53

<canvas>设置宽高遇到的问题的相关文章

不设置宽高,使元素居中的方法

在某些特定的场合,在没有知道宽度的情况下却要求水平居中,今找到些解决方法,现转过来一起学习学习 方案一.利用浮动的包裹性和相对定位百分比数据值特性,传说称之为“相对浮动” .unknow_width_center1 {position:relative; left:50%; float:left;}.unknow_width_center1 li {position:relative; right:50%; z-index:2; float:left}<</span>ul class=&

行内元素能设置宽高吗

除了行内非替换元素,table-rows,and row groups 其他元素都能设置宽 除了行内非替换元素,table-colums,colum-groups 其他元素都能设置高 行内元素包含行内替换元素(img等)和行内非替换元素(a span等) 行内替换元素是可以设置宽高的,行内非替换元素是不能设置宽高的. 当给行内元素设置 float:left; float:right; 或者 position:absolute; position:fixed; 行内非替换元素也是可以设置宽高的,究

可替换元素—行级元素可以设置宽高?

上篇文章讲的是行级元素与块级元素,明明说了行级元素不可设置width,height属性,而为何img.input等行级元素可以设置宽.高??? 看官莫急,下面我会详细解答. 可替换元素 1. 替换元素就是浏览器根据元素的标签和属性,来决定元素的具体显示内容.例如浏览器会根据<img>标签的src属性的值来读取图片信息并显示出来,而 如果查看(X)HTML代码,则看不到图片的实际内容:又例如根据<input>标签的type属性来决定是显示输入框,还是单选按钮等. 2. 他们区别一般i

里面的div没有设置宽高,用padding设置的50px来撑开宽高,这个时候就需要用position:absolute或者relative来让文本去掉继承的外层的整宽度

1. <!DOCTYPE html><html><head><style>*{margin:0px;padding:0px;}#div1{position: relative;height: 200px;width: 200px;margin: 100px;padding:10px;border: 1px solid black;} #div2{padding:50px;position: absolute;border: 1px solid black;b

解决GridView动态设置宽高导致第一个item点击不响应或显示不正常问题

最近做项目的时候遇到了2次这个问题,现在分享一下经验 一.问题 问题代码: </pre><p><pre name="code" class="java">@Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub final ViewHolder holder

frame方式布局一段文子,设置宽高

计算一段文字的宽高 /** * 计算一段文字的宽高 * * @param size 这段文字的最大宽高 * @param options NSStringDrawingUsesLineFragmentOrigin * @param attributes 文字的字体属性 * @param context nil * * @return 返回的是 CGRect 类型,frame */ - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStr

java压缩图片设置宽高

package html2pdf_2; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import com.sun.image

android下载网络图片,设置宽高,等比缩放

使用Picasso组件去下载图片会发现图片宽高会变形不受等比缩放控制,即使设置了图片的 scaleType,可能是对Picasso的api没有用对, Picasso.with(this.activity) .load(AppModel.GetInstance().userAvatarPath) .noFade() .fit() .into(avatar) 使用Glide库会更加方便,很好控制下载好的图片宽高等比缩放 1,布局如下: <ImageView android:id="@+id/q

安卓模拟器&quot;bluestacks&quot;在电脑上的设置.(宽,高)

可以在手机上找到大量英语学习APP. 习惯使用电脑的朋友,可以安装模拟器来使用这些APP. bluestacks 是一款比较好的模拟器. 但其默认的宽,高,却无法在软件中修改. 找到一个比较好的教程来完成修改. 在我电脑上,默认的是720(高) * 1152(宽). window和guest是一样的.