Canvas绘制文本必须先设置ctx.font完整字符串(如"16px sans-serif")再调用fillText(),字体大小不能单独设置;单位推荐px,中文需多字体回退,小字号可缩放提升清晰度,修改字号须清屏重绘。

Canvas 绘制文本必须通过绘图上下文(ctx)设置字体样式后调用 fillText() 或 strokeText(),字体大小不能单独设置,必须作为 ctx.font 字符串的一部分完整声明。
字体大小必须写在 font 属性里
ctx.font 是一个复合字符串,不是独立的字号属性。只写 "20px" 或只写 "Arial" 都无效,必须组合成完整格式,例如:
ctx.font = "16px sans-serif"ctx.font = "bold 24px 'Microsoft YaHei', Arial"ctx.font = "italic 30px Georgia"
单位推荐用 px;em、rem、% 等相对单位虽部分浏览器支持,但行为不一致,容易出错;pt、cm 等物理单位极少使用且兼容性差。
绘制前必须先设 font,再调用 fillText
Canvas 不会记住上次的字体设置,也不会继承样式。每次调用 fillText() 前,都要确保 ctx.font 已正确赋值:
立即学习“前端免费学习笔记(深入)”;
- 如果先画文字再设 font,文字仍按默认(通常是 10px sans-serif)渲染
- 若连续绘制不同字号的文字,每段前都需重新设置
ctx.font - 示例顺序不能颠倒:
ctx.font = "20px Arial"; ctx.fillText("Hi", 10, 30);
中文显示建议加多字体回退
单写 "16px SimSun" 在非 Windows 系统可能失效。稳妥写法是列出常用中文字体并以通用字体收尾:
ctx.font = "18px 'PingFang SC', 'Microsoft YaHei', sans-serif"- 避免使用全角空格或中文引号,字体名含空格时用英文单/双引号包裹
- 小字号(≤12px)下中文易模糊,可考虑用
ctx.scale(2, 2)提升渲染精度,再相应调整坐标和字号
动态改字号要重绘,不能直接修改
Canvas 文本是位图,一旦绘制完成就无法像 DOM 元素那样修改样式。想改变字号,必须:
- 用
ctx.clearRect()清除原区域(或整个画布) - 更新
ctx.font值 - 再次调用
fillText()重绘 - 动画场景中,这个过程要在每一帧重复执行



















