flex元素中的Chart.js溢出而不是收缩

moiiocjp  于 2022-11-06  发布在  Chart.js
关注(0)|答案(4)|浏览(282)

我尝试过在chart.js的 Package 器div上将最小宽度设置为0,但是如果拖动窗口,图表会变大,然后不会缩小。
我想不通!我唯一能做的就是将宽度设置为99%,但是图表不再与我的其他div对齐。我已经为此工作了几天,请帮助!

问:如何使chart.js的宽度达到100%,并增大/缩小到其边界大小。
若要重现,请转到示例,如果关闭菜单,图表将增大;如果打开菜单,图表将不会缩小。它将保持原来的大小并向右溢出。
注意:我的实际项目有两个独立的组件,分别是图表和侧栏。所以calc解决方案在这种情况下不起作用,我不想为了保持良好的实践而紧密耦合任何组件。

Here is my StackBlitz working example
以下图片展示了复制品:
1.图表大小合适,菜单打开x1c 0d1x
1.关闭菜单时图表变大(大小仍然正确)

1.打开菜单,图表向右溢出

olmpazwi

olmpazwi1#

(摘自我的评论。)
我无法运行StackBlitz(由于Firefox中的跟踪保护,出现JS错误),所以我无法验证这一点,但我在Flex布局中确实遇到了这个问题,并通过确保在父(和祖先)Flex元素上设置overflow: hidden来解决它。粗略查看一下CSS,发现这只在.page-wrapper上完成。

aemubtdh

aemubtdh2#

更新:此解决方案已停止与chart.js 3一起使用
我也遇到过类似的问题:

<div style="display: flex; flex-direction: column">
  <h2>...</h2>
  <div class="chart-container" style="position: relative; flex: 1">
    <canvas></canvas>
  </div>
  <span>...</span>
  <span>...</span>
</div>

我最外层的div是在一个css网格中,也许这也起了作用。
总之,我诊断出问题是这样的:尽管我对chart.js的选项应用了{ responsive: true, maintainAspectRatio: false },但图表的大小是固定的,这会导致chart-container不收缩(即使应用了overflow: hidden,我也不完全理解为什么),这会导致chartjs插入的div元素检测到大小变化,而不会改变其高度。
因此,解决方案是简单地将画布上的高度覆盖为100%:canvas {height: 100%!important}
这允许画布容器收缩,导致大小检测div收缩,从而导致画布的重新呈现,从而防止出现纵横比问题。

xxe27gdn

xxe27gdn3#

将画布包裹在div中,宽度为100%,并将画布的最大宽度设置为100%对我来说很有效:

<div style="width: 100%; position: relative;">
    <canvas id="chart" style="max-width: 100%;"></canvas>
</div>
mlmc2os5

mlmc2os54#

这里你的画布宽度在绝对父元素之内,所以建议你使用JavaScript动态地改变这个值(在你的例子中是Angular 的)。但是,因为你正在寻找基于CSS的解决方案,这里是你可以添加到你的app.components.css文件中的:

.sidebar-wrapper.shrink + div.main-wrapper canvas {
  width: calc(100vw - 40px) !important;
}
.sidebar-wrapper:not(.shrink) + div.main-wrapper canvas {
  width: calc(100vw - 230px) !important;
}

下面是一个工作示例:https://chartjs-overflow-ex-vlsqmn.stackblitz.io/

相关问题