无法在画布的一部分上绘制

时间:2016-12-15 11:37:15

标签: css google-chrome html5-canvas flexbox

screenshot of page in Chrome

请注意画布底部的空白行。它的 不可能在那条线上画画。

如何使用整个画布进行绘制(全分辨率)?

浏览器:54.0.2840.99(官方构建)m(32位)/ Windows 7

整页中运行:

var el = document.getElementsByTagName("canvas")[0];
var ctx = el.getContext("2d");
el.width = el.clientWidth;
el.height = el.clientHeight;
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(el.width, el.height);
ctx.lineTo(0, el.height);
ctx.fill();
ctx.closePath();
html {
  height: 100%;
}
body {
  display: flex;
  flex-direction: column;
  height: 100%;
  width: 667.19px; /* = `80vh` in viewport of 834 px height */
}
.bar {
  flex: auto;
  background: black;
  height: 20px;
}
#display {
  position: relative;
  width: 100%;
  height: 0;
  padding-bottom: 100%;
}
canvas {
  position: absolute;
  width: 100%;
  height: 100%;
}
 <div class="bar"></div>
 <div id="display">
   <canvas></canvas>
 </div>
 <div class="bar"></div>

要说清楚:上面的JavaScript代码会调整画布的像素尺寸,使其与canvas元素的像素尺寸相匹配。这个问题是关于画布的一个区域,不能用于它。

1 个答案:

答案 0 :(得分:0)

画布的默认样式是display:block(或者某种东西;无论哪种方式,它都不是display:block)。因此,浏览器会在其下方添加少量空间,就像在文本下方一样。您应该可以通过将{{1}}添加到画布的样式来解决此问题。