结论:sizes属性在rel="shortcut icon"中完全不生效,被所有现代浏览器静默忽略;它仅对rel="icon"有效,且实际图标选择依赖文件真实尺寸、content-type、声明顺序及manifest.json中的sizes字段。

rel="shortcut icon" 里写 sizes 没用
直接说结论:sizes 属性在 rel="shortcut icon" 中完全不生效,浏览器既不读取、也不校验,更不会据此选图——它被所有现代浏览器(Chrome 90+、Firefox 84+、Edge 90+、Safari 15+)静默忽略。
这不是兼容性问题,而是标准层面的废弃行为:rel="shortcut icon" 本身已是过时写法,W3C 和 WHATWG 规范中从未定义它支持 sizes;浏览器实现也从未为此预留逻辑。
- 你写
<link rel="shortcut icon" href="icon.png" sizes="32x32">,Chrome 会加载icon.png,但完全无视sizes值,也不校验文件真实尺寸是否匹配 - 如果该 PNG 实际是 64×64 像素,浏览器仍照常加载并缩放显示(可能模糊),不会因
sizes="32x32"而跳过或报错 - 同时声明
rel="shortcut icon"和rel="icon"时,部分浏览器(如旧版 Safari)可能优先加载前者,导致本该生效的rel="icon"声明被绕过
sizes 只对 rel="icon" 且 type 匹配时才“形式上有效”
sizes 的唯一合法上下文是 rel="icon",且仅当 type 为 image/png 或 image/svg+xml 时,HTML 中的 sizes 值才会被解析(尽管仍不用于匹配)。
但注意:即使合法,它也**不参与图标选择逻辑**。浏览器真正依赖的是:
- 文件本身的像素尺寸(如
icon-192.png必须真是 192×192 像素) - 服务器返回的
Content-Type(优先级高于 HTML 中的type) - 多个
<link rel="icon">的声明顺序(只取第一个通过校验的) -
manifest.json中icons数组的sizes字段(这才是 PWA 图标实际生效的位置)
所以,sizes="32x32" 在 <link rel="icon" type="image/png" href="..."> 里,作用只是“显式提示”,帮助开发者和工具识别意图,不是运行时指令。
常见错误配置与后果
这些写法看似合理,实则白忙活甚至起反作用:
-
<link rel="shortcut icon" href="favicon.ico" sizes="16x16">:ICO 文件根本不用sizes,且rel="shortcut icon"已失效 -
<link rel="shortcut icon" type="image/png" sizes="192x192" href="icon.png">:rel值错误 → 浏览器跳过整条标签,type和sizes全无意义 -
<link rel="shortcut icon" href="icon.svg" sizes="any">:iOS 不认 SVG favicon,桌面 Chrome 虽支持但要求rel="icon"+type="image/svg+xml",此处全错
最常被忽略的一点:就算你把 sizes 写得再准,只要 favicon.ico 文件里没嵌入对应尺寸(比如只含 16×16),Windows 书签栏、任务栏就只能显示模糊小图——sizes 不触发缩放,浏览器连试都不试。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











