fillText()需同时设置font、fillStyle和textBaseline才能显示文字:font须含字号与字体族,fillStyle不可为透明或非法值,y坐标对应基线而非顶边,中文字体需声明后备,Web Font须等待加载完成。
fillText() 不是“加个标签就能出字”,它依赖三样东西:画布上下文、字体设置、填充样式。缺任何一项,文字就完全不显示——这是最常卡住人的地方。
Canvas 不继承 CSS 字体或颜色,所有渲染参数必须手动指定。常见错误是只写 ctx.fillText("hello", 10, 50) 却没设 font 或 fillStyle:
font 必须包含字号和字体族,例如 "16px Arial" 或 "bold 14px 'Microsoft YaHei'";只写 "Arial" 会失效fillStyle 默认是 "#000000",但若之前被设成透明色(如 "rgba(0,0,0,0)")或非法值(如 "none"),文字照样不可见"14px 'PingFang SC', 'Microsoft YaHei', sans-serif",避免系统无对应字体时渲染成方块fillText("A", x, y) 的 y 指的是文字**基线**所在位置,不是顶边也不是中心。这意味着:
y 值下,“A” 和 “g” 的实际视觉顶部/底部位置不同ctx.textBaseline = "top"
ctx.textAlign = "center",再把 x 设为 canvas.width / 2
ctx.measureText(text).actualBoundingBoxAscent(Chrome 84+ / Firefox 91+ 支持)fillText(text, x, y, maxWidth) 的 maxWidth 是可选参数,但:
立即学习“前端免费学习笔记(深入)”;
ctx.measureText() 测量、截断、分段绘制,或改用 CSS + DOM 覆盖方案Web Font 是异步加载的。如果在 @font-face 字体还没就绪时就调 fillText(),Canvas 会降级使用后备字体,结果就是乱码或方块:
window.onload,它不保证字体已就绪;应监听 document.fonts.load() 的 Promisefont 类型,确认字体文件状态为 200setTimeout 延迟绘制,但上线必须用字体加载检测最容易被忽略的其实是时机问题:字体没加载完、font 写错格式、y 当成顶边来用——这三类问题占了文字不显示案例的八成以上。别急着查文档,先盯住这三点检查一遍。