在chart.js 中使用CSS 变量(颜色)-“var(--primaryColor)”不起作用

Jac*_*ahl 10 chart.js

我有一个 web 应用程序项目,它使用两个样式表来定义两个颜色集(白天和黑夜模式)。各样式表定义了相同的CSS变量具有不同颜色(例如,“ --primaryColor:‘白’”在dayMode.css和‘ --primaryColor:‘黑’ ’在nightMode.css。点击一个按钮时,样式表被触发。

现在,所有元素都通过引用这些变量来着色——在 CSS 和 JS 代码中。例如:

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

$(this).css({backgroundColor: "var(--primaryColor)"});
Run Code Online (Sandbox Code Playgroud)

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

yAxes: [{
    ticks: {
        fontColor: "var(--primaryTextColor)"
    }
}]
Run Code Online (Sandbox Code Playgroud)

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

bea*_*ver 16

CSS 变量在样式表中使用,如果你想在 JS 中访问它们,你可以像下面的代码片段那样做:

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

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

</div>
Run Code Online (Sandbox Code Playgroud)

所以在 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
        }
      }],
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
:root {
  --primaryColor: #00ff00;
  --chartColor: #ff0000;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

  • 你好!感谢您的回答!不幸的是,这没有帮助。是的,我可以通过这种方式访问​​变量,但切换 CSS 文件时它们不会自动更新。即使我通过再次在“更新变量函数”中收集变量并执行 myChart.update(); 来手动更新它们 ,它不会改变他们。 (3认同)