中直接放会出问题,因浏览器将svg当黑盒位图处理,导致图标不随文字缩放、点击区域错位、读屏器跳过语义;嵌入inline svg须满足四条件:带viewbox、宽高用em/rem、focusable="false"、内部路径用fill="currentcolor"。

为什么<summary></summary>里直接放<img src="icon.svg">会出问题
图标不随文字缩放、点击区域错位、读屏器跳过图标语义——根本原因是<img>把 SVG 当作黑盒位图处理,<summary></summary>的原生 display 行为也被破坏。浏览器不会解析 SVG 内部结构,fill无法继承 color,vertical-align 失效,甚至 Safari 会把箭头和图标挤成一行或错位。
<summary></summary>中嵌入 inline SVG 的实操要点
直接把 SVG XML 粘进 <summary></summary>,但必须满足四个条件:
- SVG 标签带
viewBox(如viewBox="0 0 24 24"),否则缩放失真 - 宽高设为
1.2em或1rem,不用固定像素值 -
<svg></svg>加focusable="false",避免键盘 Tab 时焦点落在图标上 - 内部
<path></path>等元素删掉所有fill/stroke内联属性,统一用fill="currentColor"
示例写法:<summary><svg width="1.2em" height="1.2em" viewbox="0 0 24 24" focusable="false"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path></svg> 搜索功能</summary>
对齐与触控安全区必须调的两个 CSS
默认情况下,SVG 在 <summary></summary> 中会基线对齐,底部留白;小屏手指点不准则因 padding 过小。这两处不调,视觉和可用性都垮:
- 给
<svg></svg>加vertical-align: middle,别用margin-top微调——字体变化时偏移量漂移 - 给
<summary></summary>加padding: 0.5rem 1rem(至少 44×44px 触控区),再配cursor: pointer提升反馈 - 禁用
list-style时,只对<summary></summary>设list-style: none,别碰::marker——否则 Safari 箭头消失
无障碍与语义不能靠“看起来像”糊弄
图标不是装饰,它是功能入口的一部分。漏掉这三步,屏幕阅读器可能读成“空白按钮”或跳过整个交互点:
-
<summary></summary>本身已含语义,**不要**再包<button></button>或加role="button"——会触发双重事件 - 图标加
aria-hidden="true",确保读屏器只读文字内容,不重复播报“图标” - 如果文字本身不表意(比如只写“▼”),必须用
aria-label补充,例如<summary aria-label="展开高级筛选选项">...</summary>
最易被忽略的是:SVG 未设 focusable="false" 时,键盘用户 Tab 到图标就卡住,无法继续到内容区——这不是 bug,是设计遗漏。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











