我正在以一种相当直接的方式将文本打印到画布上:
var ctx = canvas.getContext('2d');
ctx.font = "10pt Courier";
ctx.fillText("Hello World", 100, 100);
但是我该如何将文本变成粗体、斜体或两者结合?有什么建议可以修复这个简单的例子吗?
我正在以一种相当直接的方式将文本打印到画布上:
var ctx = canvas.getContext('2d');
ctx.font = "10pt Courier";
ctx.fillText("Hello World", 100, 100);
但是我该如何将文本变成粗体、斜体或两者结合?有什么建议可以修复这个简单的例子吗?
从MDN关于CanvasRenderingContext2D.font
的文档中得知:
CanvasRenderingContext2D.font
属性指定在绘制文本时使用的当前文本样式。这个字符串使用与CSS font相同的语法。
这意味着以下任何一种方式都可以工作:
ctx.font = "italic 10pt Courier";
ctx.font = "bold 10pt Courier";
ctx.font = "italic bold 10pt Courier";
这里有一些额外的资源以获取更多信息:
提醒一下,对于任何看到此信息的人,请确保按照已接受答案中显示的顺序进行操作。
当我使用错误的顺序时,我遇到了一些跨浏览器的问题。 在Chrome中,“10px Verdana bold”有效,但在IE或Firefox中无效。 根据提示将其改为“bold 10px Verdana”可以解决这些问题。 如果您遇到类似的问题,请仔细检查顺序。
measureText
来测量其大小,设置新样式,然后像这样绘制下一个块:
// get canvas / context
var can = document.getElementById('my-canvas');
var ctx = can.getContext('2d')
// draw first text
var text = '99%';
ctx.font = 'bold 12pt Courier';
ctx.fillText(text, 50, 50);
// measure text
var textWidth = ctx.measureText(text).width;
// draw second text
ctx.font = 'normal 12pt Courier';
ctx.fillText(' invisible', 50 + textWidth, 50);
<canvas id="my-canvas" width="250" height="150"></canvas>
ctx.font = "400 10pt Courier"
- Ivan Pctx.font = "400 10pt Open Sans"
设置字体粗细对我没有起作用。 - sean2078