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

如何实现文字hover时变色且鼠标移开后颜色保持不变

实现悬停变色后永久保持效果的解决方案

你当前的代码失效是因为:hover伪类仅在鼠标悬停在元素上时生效,鼠标移出后绑定的动画属性会被移除,元素样式回归初始状态。如果要实现悬停触发、无需点击的永久变色效果,必须使用少量JavaScript实现,纯CSS无法原生支持这类持久状态的记忆。

方案1:JavaScript实现(推荐,完全符合需求)

只需要给原有代码加1个事件监听即可,代码改动极小:
修改CSS,用过渡代替动画更适配场景:

.main{
    color: white;
    font-size: 20px;
    /* 定义变色过渡效果,和你原有动画参数一致 */
    transition: color 1s cubic-bezier(0.165, 0.84, 0.44, 1);
}
/* 定义变色后的永久样式 */
.main.changed {
    color: black;
}

HTML保持原有代码不变:

<p class="main">
  Lorem ipsum dolor sit amet
</p>

新增JS代码绑定事件:

// 鼠标第一次移入时添加永久变色类,后续不会回弹
document.querySelector('.main').addEventListener('mouseenter', e => e.target.classList.add('changed'))

方案2:纯CSS实现(需调整交互为点击触发)

如果完全不想用JS,可以借助表单复选框的:checked状态实现持久样式,但是需要用户点击元素才能保持变色效果,仅悬停的话移出还是会回弹:

<label class="text-wrap">
  <!-- 隐藏的复选框用来记录状态 -->
  <input type="checkbox" hidden>
  <p class="main">Lorem ipsum dolor sit amet</p>
</label>
.main{
    color: white;
    font-size: 20px;
    transition: color 1s cubic-bezier(0.165, 0.84, 0.44, 1);
}
/* 悬停时临时变色 */
.text-wrap:hover .main {
    color: black;
}
/* 复选框选中后永久保持变色 */
.text-wrap input:checked ~ .main {
    color: black;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:36:05