javascript - 为什么 chart.js Canvas 不遵守容器元素的填充?

标签 javascript html css canvas chart.js

我将 Chart.js 与简单的折线图一起使用,但 Chart.js 计算的宽度和高度属性似乎是基于忽略填充的父元素的总宽度和高度。

var options = {
    maintainAspectRatio: false,
    responsive: true
};

var data = {
    labels: ["", "", "", "", "", "", ""],
    datasets: [
        {
            label: "My First dataset",
            fillColor: "rgba(220,220,220,0.2)",
            strokeColor: "rgba(220,220,220,1)",
            pointColor: "rgba(220,220,220,1)",
            pointStrokeColor: "#fff",
            pointHighlightFill: "#fff",
            pointHighlightStroke: "rgba(220,220,220,1)",
            data: [65, 59, 80, 81, 56, 55, 40]
        },
        {
            label: "My Second dataset",
            fillColor: "rgba(151,187,205,0.2)",
            strokeColor: "rgba(151,187,205,1)",
            pointColor: "rgba(151,187,205,1)",
            pointStrokeColor: "#fff",
            pointHighlightFill: "#fff",
            pointHighlightStroke: "rgba(151,187,205,1)",
            data: [28, 48, 40, 19, 86, 27, 90]
        }
    ]
};

var ctx1 = document.getElementById("mychart1").getContext("2d");
var myNewChart = new Chart(ctx1).Line(data, options);
.container {
    padding: 15px 15px 15px 15px;
    width: 300px;
    height: 200px;
    border: 1px solid black;
}

.child {
    display: inline-block;
    border: 1px solid red;
    width:100%;
    height:100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.1.1/Chart.js"></script>


<div class='container'>
    <canvas id='mychart1' class='child'></canvas>
</div>
<br>
<div class='container'>
    <div class='child'>test</div>
</div>

JSFiddle

第二个容器和子容器显示了我期望的行为。这是 Chart.js 如何计算 Canvas 的宽度和高度的错误,还是我犯了样式错误?

最佳答案

我还需要一个响应式 Canvas 并遇到了这个问题。这是我的修复:

<div>
    <canvas id="chart"></canvas>
</div>

由于 Chart.js 将 Canvas 缩放到容器的宽度,忽略了填充,我只是将 Canvas 包裹在 div 中。 div 缩放到带有填充的容器,尊重填充,然后响应式 Chart.js canvas 缩放到 div

关于javascript - 为什么 chart.js Canvas 不遵守容器元素的填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28162810/

相关文章:

javascript - 循环遍历多个选择的ajax数据

javascript - 使用javascript生成一个id为 'active state'

jquery - 添加信息到动态文本框 jQuery

html - 我怎样才能让我的导航下拉菜单出现在我的横幅前面?

css - 删除 Vuetify v-app-bar 上的默认填充

javascript - Ace 编辑器更改字段焦点在 Tab 键上

javascript - Math.max.apply() 是如何工作的?

html - 显示为内联的 block 元素(绝对定位,左侧)

javascript - 可以在node.js/Javascript中拦截对模块或类的调用

css - 当 xhr 请求正在进行时, Angular 2/5 加载指示器