无法将画布元素高度设置为等于容器高度

时间:2015-01-24 04:41:00

标签: jquery html5 css3 canvas

我正在尝试将一系列画布元素设置为与其容器相同的高度:

$(document).ready(function() {
  var c = $('.canvas canvas');
  var container = $(c).parent();

  $(window).resize(respondCanvas);

  function respondCanvas() {
    c.each(function(index) {
      $(this).attr('width', $(container[index]).width());
      $(this).attr('height', $(container[index]).height());
    });
  }

  respondCanvas();
});
.flex {
  display: flex;
  overflow: auto;
}
#viewport {
  flex: 1 0 100%;
  flex-flow: row wrap;
  justify-content: space-between;
}
.canvas {
  display: flex; /* new addition from answer */
  background: #ccc;
  margin: 0.25rem;
}
#half-breadth,
#profile {
  flex: 1 0 100%;
}
#body-plan,
#current-section,
#rendering {
  flex: 1 0 32%;
}
canvas {
  flex: auto; /* new addition from answer */
  background: #ddd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<figure id="viewport" class="flex">
  <div id="half-breadth" class="canvas">
    <canvas id="half-breadth-canvas"></canvas>
  </div>
  <div id="profile" class="canvas">
    <canvas id="profile-canvas"></canvas>
  </div>
  <div id="body-plan" class="canvas">
    <canvas id="body-plan-canvas"></canvas>
  </div>
  <div id="current-section" class="canvas">
    <canvas id="current-section-canvas"></canvas>
  </div>
  <div id="rendering" class="canvas">
    <canvas id="rendering-canvas"></canvas>
  </div>
</figure>

至少在OS X上的Google Chrome中,画布小于包含div元素的高度,而在最后3个中,每个元素的数量较少。没有flex布局,所有都是小于容器的一致量。有没有办法让它们实际上完全相同的大小?理想情况下还可以在使用flex时进行修复吗?

此时,我不关心浏览器兼容性/可移植性(我使用flex,所以我已经决定生活在最前沿),但我确实需要使用canvas属性,就我而言我知道因为我不想扭曲内容(即我不能使用CSS 100%宽度/高度)。

更新:将CSS添加到代码段以反映答案中提供的已接受解决方案(请参阅CSS中的注释)。

1 个答案:

答案 0 :(得分:0)

canvas元素不是viewport的直接子元素,因此您必须将display:flex添加到.canvas类并指示画布为flex:auto