目前,我们在画布上编写文本时使用硬编码样式:
ctx.setTransform(1,0,0,1,0,0);
ctx.fillStyle = "#2F353C";
ctx.font = "15px 'Roboto', sans-serif";
ctx.fillText(varName || '', 5, 12);
我非常希望将实际样式信息存储在CSS文件中,并以某种方式从那里访问它. (我不期待奇迹,像CSS一样神奇地应用于画布中渲染的元素……)
我能想到的唯一方法是在画布后面创建一些文本元素,为它们分配类,然后以某种方式访问它们的计算属性,将它们传递给画布元素.
有没有更好的办法?
最佳答案 警告
这个答案应该删除,但因为它已被接受,我无法.以下是答案,但是存在许多问题和浏览器兼容性问题,使得这个答案不切实际.
画布的SVG标记
如果使用SVG图像渲染到画布,则可以将CSS样式规则添加到SVG中的元素,只要继续渲染SVG,它就会反映所有规则,包括动画和其他基于时间的FX.
使用CSS进行SVG标记
<!-- within the SVG element -->
<svg>
<style>
/* CSS */
#buttonWhite { /* ID name */
fill:white;
font-size:12px;
}
#buttonBlue {
fill:blue;
font-size:16px;
}
</style>
<text id="buttonWhite" x="100" y="100">I am white</text>
<text id="buttonBlue" x="100" y="200">I am blue</text>
</svg>
脚本
// within the script
var svg = new Image();
svg.src = "SVG_URL.svg";
// once svg has loaded then display it on the canvas
ctx.drawImage(svg,0,0);
如果您对CSS或SVG进行了更改,则需要重新渲染它以查看更改.
UPDATE
有关在CSS中链接的更多信息,请参阅MDN SVG & CSS
我在CSS中犯了一个错误,忘记了SVG有自己的风格.我通过用填充替换颜色来纠正它.