推荐使用a[href^="https://"]精确匹配标准https链接,因其能准确识别合法url协议后必接的//,避免误匹配如https-internal或httpsomething等非url字符串。

匹配以 https 开头的链接必须用 [href^="https"],但要注意协议是否带 //
直接写 [href^="https"] 能匹配 href="https://example.com",也能误匹配 href="https-internal://app" 或 href="httpsomething"。真实项目中更稳妥的做法是匹配 https://(带斜杠),因为合法 URL 的协议后必接 //。
- ✅ 推荐:
a[href^="https://"]—— 精确命中标准 HTTPS 链接 - ⚠️ 慎用:
a[href^="https"]—— 会匹配到非 URL 字符串,比如href="https-proxy-config" - ? 注意:
http://和https://是不同前缀,需分开写或用逗号组合:a[href^="http://"], a[href^="https://"]
[href^="..."] 对相对路径和空值无效
CSS 属性选择器只匹配元素上**实际渲染出的 href 属性值**,不会做 URL 解析或补全。这意味着:
- ❌ 不匹配相对路径:
<a href="/login"></a>中的/login不以https开头,无论页面协议是什么 - ❌ 不匹配 JavaScript 动态赋值:如果 JS 后续执行了
link.href = "https://...",但初始 HTML 没该属性,[href^="https"]仍不生效(除非属性被显式写入 DOM) - ❌ 不匹配
href=""或缺失href的<a></a>标签 —— 属性不存在,选择器自然跳过
需要同时匹配 www 和非 www 的 HTTPS 域名?别硬靠 ^=
[href^="https://"] 只管开头,不管后面是不是域名、有没有 www。如果你的真实需求是「样式化所有外链 HTTPS 地址」,仅靠属性选择器不够可靠:
- ✅ 可配合
:not()排除站内路径:a[href^="https://"]:not([href*="//my-site.com"])(注意双引号和属性嵌套) - ⚠️
[href*="my-site.com"]有风险:可能误伤https://evil-my-site.com,建议用完整子串或 JS 辅助校验 - ? 更健壮的做法:服务端或构建时加 class,如
<a href="..." class="external https"></a>,再用a.external.https选中 —— CSS 选择器不该承担语义判断
IE8 及更早版本不支持 ^=,但现代项目通常不用管
如果你的项目明确要求兼容 IE8,[href^="https"] 完全无效,它会直接被浏览器忽略。此时只能退回到 JS 方案:
document.querySelectorAll('a').forEach(link => {
if (link.href.startsWith('https://')) {
link.classList.add('is-https');
}
});
不过现在绝大多数项目已放弃 IE8 支持,CSS 层面直接用 [href^="https://"] 是安全且高效的。真正容易被忽略的是:开发时在本地用 file:// 协议打开 HTML,所有 https:// 链接都不会被匹配 —— 因为浏览器限制了混合协议资源加载,连属性值都可能被清空或重写。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











