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

如何在hover h1时用CSS为::before伪元素添加动画?

问题

我有如下页面结构,希望鼠标悬停在h1元素上时,为其::before伪元素添加动画(如缩放或倾斜效果)。目前我编写的CSS代码无法生效,不知问题出在哪里?如何仅用CSS实现该动画,不使用JavaScript?

原代码示例

HTML

<div class="wrapper">
  <h1>About Us</h1>
</div>

CSS

.wrapper{
  width:200px;
  margin:100px auto;
}
.wrapper h1::before {
  content: url('https://i.ibb.co/Bg4jS5B/hat-1-e1713504486338.png'); 
  display: inline-block;
  margin-left: -25px; 
  margin-top: -35px; 
  width:30px;
  position: absolute;
  /*filter: brightness(0) invert(1);*/
  transition: all 0.3s ease-in-out;
}
.wrapper h1::before:hover {
  cursor:progress;
  transform: scale(1.2); 
}
问题原因

你的CSS选择器逻辑错误:.wrapper h1::before:hover表示只有鼠标悬停在伪元素自身区域时才会触发样式变化,而不是悬停在h1元素上触发伪元素的动画。伪元素是依附于父元素的,无法单独作为hover触发主体来控制自身样式变化。

解决方案

将hover事件绑定到父元素h1上,再通过选择器控制伪元素的样式,就能实现鼠标悬停h1时伪元素播放动画的效果。

修正后的完整代码

HTML(无需修改)

<div class="wrapper">
  <h1>About Us</h1>
</div>

CSS

.wrapper{
  width:200px;
  margin:100px auto;
}
.wrapper h1::before {
  content: url('https://i.ibb.co/Bg4jS5B/hat-1-e1713504486338.png'); 
  display: inline-block;
  margin-left: -25px; 
  margin-top: -35px; 
  width:30px;
  position: absolute;
  transition: all 0.3s ease-in-out;
}
/* 关键改动:监听h1的hover状态,控制伪元素的样式 */
.wrapper h1:hover::before {
  cursor: progress;
  transform: scale(1.2); 
}

说明

  • 核心是调整选择器顺序:h1:hover::before表示当h1处于hover状态时,修改其::before伪元素的样式。
  • 伪元素已设置transition属性,缩放动画会自动平滑过渡,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:05:00