列表卡片整块套了一个 a 标签,右上角还有个分类标签也是链接,点标签却打开了文章,右键看元素,标签的 a 被浏览器拆到了卡片外面。乍看像缓存或者权限的锅,追下去往往不是。

.card { position: relative; }
.card .card-link::after {
  content: '';
  position: absolute;
  inset: 0;
}
.card .tag { position: relative; z-index: 1; }

追下去是这么回事:HTML 不允许 a 标签嵌套,解析时内层链接会被提前闭合,DOM 结构和写的不一样。点击事件冒泡到外层,也会触发外层链接的跳转。

「卡片嵌套链接」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

具体做法是,外层不要用 a 包整块,改成 article 加一个绝对定位的链接覆盖层;内层标签提高层级,放在覆盖层上面,点它就不会落到文章链接;或者用 JS 判断点击目标,命中内层链接时阻止冒泡。

验收就看一点,点卡片空白处进文章,点分类标签进分类页,两个目标互不干扰。

作者 9823189