You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS中*:hover选择器无法为所有元素添加悬停效果的问题

解决*:hover仅部分元素生效的问题

修复方案1:用outline替代border

因为border会被子元素的边框覆盖,改用outline就能让所有元素的hover效果正常显示:

*,
*:before,
*:after {
  box-sizing: border-box;
}

* {
  outline: solid .5px #dbdbdb;
  /* 可选:加这个避免outline和内容重叠 */
  outline-offset: -1px;
}

*:hover {
  outline: solid .5px #737373;
}
<div>
  <h1>Example Domain</h1>
  <p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p>
  <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>

修复方案2:让父元素hover时子元素保持原边框

如果你希望鼠标停在父元素上时,只有父元素边框变色,子元素不变:

*,
*:before,
*:after {
  box-sizing: border-box;
}

* {
  border: solid .5px #dbdbdb;
}

*:hover {
  border-color: #737373;
}

/* 悬停父元素时,强制子元素用默认边框 */
*:hover * {
  border-color: #dbdbdb;
}

为什么会出现这个问题

不是*:hover没生效,是子元素的边框挡住了父元素的hover效果:

  • *选择器会选中所有元素,包括父元素和所有子元素,所以每个元素都有浅灰色边框。
  • 当鼠标移到<div>上时,<div>确实触发了hover,边框变深,但它里面的<h1>、<p>还保持浅灰色边框,这些子元素的边框在视觉上盖过了父元素的深边框,导致你看不到父元素的变化。
  • 而<a>是行内元素,它的边框直接包着自身内容,没有子元素遮挡,所以hover效果一眼就能看到。

内容的提问来源于stack exchange,提问作者Moel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:55:31