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>
2番目のコンテナと子は、私が期待している動作を示しています。これは、Chart.jsがキャンバスの幅と高さを計算する方法のバグですか、それともスタイリングの間違いですか?
レスポンシブキャンバスも必要で、この問題がありました。これは私の修正でした:
<div>
<canvas id="chart"></canvas>
</div>
Chart.jsは、パディングを無視して、キャンバスをコンテナの幅に合わせて拡大縮小するため、キャンバスをdiv
でラップしました。 div
は、パディングを考慮して、パディングを使用してコンテナーに合わせてスケーリングし、レスポンシブChart.js canvas
はdiv
に合わせてスケーリングします。
私もこの問題をグーグルで調べて、簡単な解決策を見つけました。
height
を追加して、それに応じて自動的に幅を調整し、より適切な方法で表示するようにしました。本当に必要な場合は、width
も追加できます。 canvas
要素はHTML5
の一部です。
px
を使用して値を入力することはできません。それを無視して、必要な数値を入力してください。
<canvas id="myChart" height="80"></canvas>
より良い解決策は、.container {box-sizing: border-box;}
を使用することです
Jsfiddleの例で、responsive
属性をfalseに変更します。
var options = {
maintainAspectRatio: true,
responsive: false
};
以前の設定では、Chrome devツールを使用して要素を検査するときに、高さと幅の両方にさらに30ピクセルが追加されました。キャンバスのサイズのため、キャンバス。
ラップしてから、このCSSを使用しました。
.chart-container {
box-sizing:border-box;
margin:2%;
width:96%;
}
これにより、エッジからパッドが入り、反応しやすくなります。 2%を使用しましたが、レイアウトに合ったパーセンテージを使用できます。