使用CSS变量(颜色)与chart.js - “var( - primaryColor)”无法正常工作

时间:2018-03-10 11:56:22

标签: chart.js

我有一个网络应用项目,使用两个样式表来定义两个颜色集(白天和夜晚模式)。每个样式表定义具有不同颜色的相同CSS变量(例如 dayMode.css 中的“ - primaryColor:'white '”和“ - primaryColor:'black nightMode.css 中的“”。单击按钮时切换样式表。

现在,所有元素都通过引用这些变量而着色 - 包括CSS和JS代码。例如:

div {background-color: var(--primaryColor);}

$(this).css({backgroundColor: "var(--primaryColor)"});

切换样式表时,所有元素都会调整为新定义。现在我设置了我的第一个Chart.js并试图用我的变量着色它,如:

yAxes: [{
    ticks: {
        fontColor: "var(--primaryTextColor)"
    }
}]

不起作用。知道如何解决这个问题吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

CSS变量在样式表中使用,如果您要在JS中访问它们,您可以在下面的代码段中执行:

var style = getComputedStyle(document.body);
var primCol = style.getPropertyValue('--primaryColor');
$("#mydiv").text("primaryColor: " + primCol);
:root {
  --primaryColor: #336699;
}

#mydiv {
  background-color: var(--primaryColor);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mydiv">

</div>

所以在chart.js中:

var style = getComputedStyle(document.body);
var primCol = style.getPropertyValue('--primaryColor');
var chartCol = style.getPropertyValue('--chartColor');

var chartData = {
  labels: ['a', 'b', 'c', 'd'],
  datasets: [{
    label: 'value',
    backgroundColor: 'rgba(219, 20, 0, 0.2)',
    borderColor: chartCol,
    data: [30, 50, 25, 10]
  }]
};

var ctx = document.getElementById("myChart").getContext("2d");
var myBar = new Chart(ctx, {
  type: 'line',
  data: chartData,
  options: {
  	legend: { display: false },
    scales: {    
      yAxes: [{
        ticks: {
          fontColor: primCol,
        }
      }],
      xAxes: [{
        ticks: {
          beginAtZero: true
        }
      }],
    }
  }
});
:root {
  --primaryColor: #00ff00;
  --chartColor: #ff0000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="myChart" height="300" width="500"></canvas>