Responsive Charts

When it comes to change the chart size based on the window size, a major limitation is that the canvas render size (canvas.width and .height) can not be expressed with relative values, contrary to the display size ( and .height). Furthermore, these sizes are independent from each other and thus the canvas render size does not adjust automatically based on the display size, making the rendering inaccurate.

The following examples do not work:

  • <canvas height="40vh" width="80vw">: invalid values, the canvas doesn't resize (example)
  • <canvas style="height:40vh; width:80vw">: invalid behavior, the canvas is resized but becomes blurry (example)

Chart.js provides a few options to enable responsiveness and control the resize behavior of charts by detecting when the canvas display size changes and update the render size accordingly.

Configuration Options

Name Type Default Description
responsive Boolean true Resizes the chart canvas when its container does (important note...).
responsiveAnimationDuration Number 0 Duration in milliseconds it takes to animate to new size after a resize event.
maintainAspectRatio Boolean true Maintain the original canvas aspect ratio (width / height) when resizing.
onResize Function null Called when a resize occurs. Gets passed two arguments: the chart instance and the new size.

Important Note

Detecting when the canvas size changes can not be done directly from the CANVAS element. Chart.js uses its parent container to update the canvas render and display sizes. However, this method requires the container to be relatively positioned and dedicated to the chart canvas only. Responsiveness can then be achieved by setting relative values for the container size (example):

<div class="chart-container" style="position: relative; height:40vh; width:80vw">
    <canvas id="chart"></canvas>

The chart can also be programmatically resized by modifying the container size: = '128px';

results matching ""

    No results matching ""