ChartJS 使用列计数时画布拉伸

owfi6suc  于 2023-02-16  发布在  Chart.js
关注(0)|答案(1)|浏览(201)

我正在使用chart.js,我有两个饼图和一个条形图,我希望它们显示在一行中。我希望条形图比单独的饼图大,所以我做了以下操作。
为了使两个饼图适合一个列,我使用了column-count。
这是我使用的CSS

  1. .container {
  2. display: flex;
  3. }
  4. .row {
  5. display: flex;
  6. flex-direction: row;
  7. flex-wrap: wrap;
  8. width: 100%;
  9. margin-bottom: 30px;
  10. }
  11. .column {
  12. display: flex;
  13. flex-direction: column;
  14. flex-basis: 100%;
  15. flex: 1;
  16. align-self: stretch;
  17. margin-right: 10px;
  18. margin-left: 10px;
  19. }
  20. .container div {
  21. flex: 1;
  22. }
  23. canvas {
  24. max-width: 100%;
  25. display: flex;
  26. }
  27. .pie {
  28. column-count: 2;
  29. max-height: 93%;
  30. }

而HTML

  1. <div class="container">
  2. <div class="row">
  3. <div class="pie">
  4. <canvas baseChart [data]="pieFeeChartData" [type]="pieChartType"
  5. [options]="pieFeeChartOptions">
  6. </canvas>
  7. <canvas baseChart [data]="pieFooChartData" [type]="pieChartType"
  8. [options]="pieFooChartOptions">
  9. </canvas>
  10. </div>
  11. <div class="column">
  12. <canvas baseChart [data]="barBlahChartData"
  13. [options]="barBlahChartOptions" [type]="barChartType">
  14. </canvas>
  15. </div>
  16. </div>
  17. </div>

我最好的解决方案是将.pie中的max-height设置为93%。它确实给予了我接近我想要的,但它不精确,格式与较小的窗口大小不一致。它还不错,但我希望找到一个更精确的解决方案,而不使用硬编码值。我已经尝试了很多不同的Flex设置,但我希望在整个项目中尽可能地保持这些CSS设置的一致性,所以这也不是理想的。
下面是当我不设置max-height: 93%;时发生的情况的屏幕截图

dluptydi

dluptydi1#

使用网格可以大大简化这一过程,它会给你更多可预测的结果,在你的项目中更容易重用,而且随着项目的增长,推理也会容易得多。
另外,请注意canvas高度值如何使用!important覆盖Chart.js作为内联样式应用的图表高度的固定值。

  1. .container {
  2. width: 90%;
  3. margin: auto;
  4. }
  5. .row {
  6. display: grid;
  7. /*
  8. A standard 12 column grid can be evenly
  9. divided into quarters and thirds.
  10. */
  11. grid-template-columns: repeat(12, 1fr);
  12. }
  13. .col-full {
  14. grid-column: span 12;
  15. }
  16. .col-half {
  17. grid-column: span 6;
  18. }
  19. .col-quarter {
  20. grid-column: span 3;
  21. }
  22. /* ✨ Magic ✨ */
  23. canvas {
  24. max-width: 100%;
  25. height: 100% !important;
  26. }

现在是HTML:

  1. <div class="container">
  2. <div class="row">
  3. <div class="col-quarter">
  4. <canvas id="pieChart1"></canvas>
  5. </div>
  6. <div class="col-quarter">
  7. <canvas id="pieChart2"></canvas>
  8. </div>
  9. <div class="col-half">
  10. <canvas id="barChart"></canvas>
  11. </div>
  12. </div>
  13. </div>

结果:

展开查看全部

相关问题