【发布时间】:2023-02-03 01:27:51
【问题描述】:
使用Chart.js 4.2.0 版,我尝试在 Windows 11 的最大化窗口中显示图表,其中图表高度为屏幕高度的 100%,图表宽度为屏幕宽度的 80%。
我尝试使用以下代码
<body>
<div height="100%" width="80%">
<canvas id="canvas">
但是这个简单的属性并不能完成这项工作。
最后,我找到了这个解决方案
<body>
<div>
<canvas id="canvas">
</canvas>
</div>
, options:
{ responsive: true
, maintainAspectRatio: true
, aspectRatio: 1.65
var ctx = document.getElementById("canvas").getContext("2d");
var myChart = new Chart(ctx, config);
myChart.canvas.parentNode.style.width = '80%';
这可以正常工作,但有点棘手,因为 width(不是 height)是在 Javascript 代码中动态设置的,aspectRatio 必须在 options 中手动修复。
是否有一个简单的解决方案来将宽度定义为屏幕的 80%,将高度定义为屏幕的 100%?
我当前的屏幕尺寸是 1920x1080。
我得到的是
当我在选项中抑制aspectRatio时,我得到了下图
【问题讨论】:
-
根据我的经验,在 div 上设置
maintainAspectRatio: false、responsive: true和大小样式,而不是画布(就像您已经做的那样)——就像来自 here 的 html 代码一样,使画布填充 div,达到指定的大小. Here's a fiddle 为我做的,我写了一个插件来显示尺寸。我不确定它不依赖于浏览器/操作系统(我不在 Windows 上)。 -
谢谢 !我的问题是使用“%”而不是“vh”或“vw”来定义相对高度或宽度。你的评论对我来说是一个很好的答案。小评论:我不会在你写的时候在画布上设置大小样式,而只会在父 div 上设置样式!为不同的 html 元素着色(如您所做)对解决问题非常有帮助。在浏览器中按 F11 也会显示我搜索的内容。
-
1) 如果评论对您有效,我会将其移至答案,因为它可能与其他人相关 2) 它似乎适用于
100vh和80%(虽然不是%) 3) 我并没有说你设计画布的样式 - 通过“你已经我的意思是你已经设置了 div 的样式,所以这一点已经在你的代码中完成了,尽管我可以将括号短语移动到 div 之后。