优先选内联SVG:无损缩放、CSS控色、语义完整;禁用硬塞img;Canvas中手绘路径或转SVG URL;图标位置用相对坐标;对齐需调vertical-align和baseline;必加aria-label等可访问性属性。

仪表盘里加图标,别只用 ![]()
硬塞
直接塞 看似省事,但一到高 DPI 屏(比如 MacBook、安卓旗舰)就模糊,缩放时失真,多语言界面里还难对齐文字。图标在仪表盘里不是装饰,是语义锚点——CPU 图标得让人一眼认出是 CPU,不是“一个小图”。![]()
- 优先选内联
:复制图标 SVG 源码粘进 HTML,用width/height控尺寸,fill由 CSS 控颜色,缩放无损,还能用:hover或 JS 动态改色 - 避免用字体图标(如 Font Awesome)做关键指标图标:它依赖外部字体文件,加载失败就变方块;且无法单独控制每个图标的描边粗细或旋转角度
- 如果必须用
,确保提供srcset:比如,否则 Retina 屏下永远模糊
Canvas 仪表盘上怎么叠图标?不能用 drawImage() 直接贴
你在 canvas 里画了个 gauge,想在左上角加个“⚠️”警告图标——千万别用 ctx.drawImage() 贴 PNG。canvas 渲染路径一旦缩放或 DPR 变化,图标边缘发虚,动画帧间还会错位。
- 把警告图标也写成 SVG 路径,用
ctx.beginPath()+ctx.moveTo()手绘:三角形+感叹号,几行代码搞定,完全跟随 canvas 缩放逻辑 - 若已有现成 SVG 图标,用
URL.createObjectURL(new Blob([svgString], {type: 'image/svg+xml'}))转成 URL,再传给drawImage(),比直接贴 PNG 抗锯齿强得多 - 图标位置别写死像素值:用
canvas.width * 0.05这类相对坐标,适配不同尺寸表盘
图标和数值标签怎么对齐才不飘?
常见现象:CPU 图标在 “87%” 左边,看着总像没对齐,尤其在 Firefox 或旧版 Electron 里更明显。问题不在 margin,而在基线(baseline)。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 给图标容器(比如
)设vertical-align: middle,同时确保父元素line-height和字体大小匹配(例如font-size: 14px; line-height: 16px) - 如果图标是 SVG,加
vertical-align: -0.125em微调:SVG 默认基线偏高,-0.125em 是经验值,能压住文字底部 - 绝对定位图标时,别用
top: 0:改用top: 50%; transform: translateY(-50%),确保垂直居中不随字体变化漂移
aria-label 和图标共存时容易漏掉什么?
屏幕阅读器不会自动读出图标含义。你放了个齿轮 SVG 表示“设置”,不加语义,它就跳过——或者只读“图像”,毫无信息量。
- 内联 SVG 必须加
role="img"+aria-label="设置",不能只靠title元素(部分读屏器忽略) - 如果图标是
,alt属性必须写明功能,不是“齿轮图标”——而是“打开系统设置” - 仪表盘里多个同类图标(比如 5 个指标旁都带“刷新”图标),每个都要有唯一
aria-labelledby指向对应指标标题,否则读屏器会重复读“刷新”五次,不说明刷新谁
Canvas 上手绘图标最稳,SVG 内联最灵活, 最易翻车。真正难的不是“加”,而是让图标在各种缩放、DPR、读屏场景下,始终准确传达意图。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










