css 一个文字悬停下划线效果?

效果网址 : https://dzone.com

SDGIF_Rusult_1.gif

我看了一下, 这个效果感觉挺简单的, 但是自己试了以下感觉还是挺难的
他们网页用到了 js, 不过我是用 css 实现的
我参照着自己做的代码如下

<span>这是一段测试文字</span>

<style>
  span {
    display: inline-block;
  }

  span {
    transition: 3s;
    background: linear-gradient(0deg, black, black) no-repeat right bottom / 0 2px;
    background-size: 0 1px;
  }

  span:hover {
    background-position-x: left;
    background-size: 100% 1px;
  }
</style>

但是效果还有有些诧异, 为了更好看出效果我把过渡时间调整3秒

SDGIF_Rusult_1.gif

有没有大佬有好一点的实现方案? 用css或者js都可以

阅读 1.9k
avatarAI BotBETA

你的代码已经接近实现所需的效果,但确实有一些问题。首先,你的背景渐变在悬停时是从左到右过渡的,而不是从下向上。其次,背景渐变的大小在悬停时应该增加,以创建下划线的动画效果。

下面是一个使用CSS实现的解决方案,它创建了一个在悬停时从下向上扩展的下划线动画效果:

<!DOCTYPE html>
<html>
<head>
<style>
  span {
    position: relative;
    display: inline-block;
  }

  span::after {
    content: '';
    position: absolute;
    width: 100%;
    height: 2px;
    bottom: 0;
    left: 0;
    background-color: black;
    transform: scaleX(0);
    transition: transform 0.3s ease-in-out;
  }

  span:hover::after {
    transform: scaleX(1);
  }
</style>
</head>
<body>

<span>这是一段测试文字</span>

</body>
</html>

这个代码片段使用了一个伪元素 ::after 来创建下划线。在悬停时,transform: scaleX(1); 会使下划线从左到右扩展,创建动画效果。transition 属性用于控制动画的速度和缓动函数。

如果你想要更接近 dzone.com 的效果,你可能需要调整动画的速度、颜色和宽度等属性。此外,dzone.com 的效果可能还包含了一些其他的CSS或JavaScript动画,例如文字颜色的变化或阴影效果。

如果你想要使用JavaScript来实现这个效果,你可以使用 requestAnimationFrame 来创建更复杂的动画,或者使用CSS类来动态地改变元素的样式。但是,对于简单的下划线动画效果,CSS通常就足够了。

2 个回答
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>xiahuaxian</title>
    <style>
        .title {
            color: #333;
            line-height: 2;
            position: relative;
            display: inline-block;
        }
        .title span {
            background: linear-gradient(to right, #7e2f2b, #146420) no-repeat right bottom;
            background-size: 0% 2px;
            transition: background-size 1s ease;
        }
        .title:hover span {
            background: linear-gradient(to right, #7e2f2b, #146420) no-repeat left bottom;
            background-size: 100% 2px;
        }
    </style>
</head>
<body>

    <h2 class="title">
        <span>文字移入一段文字中下划线从左往右变长,然后鼠标移出又从左往右退出的效果,文字移入一段文字中下划线从左往右变长,然后鼠标移出又从左往右退出的效果,文字移入一段文字中下划线从左往右变长,然后鼠标移出又从左往右退出的效果,文字移入一段文字中下划线从左往右变长,然后鼠标移出又从左往右退出的效果。</span>
    </h2>

</body>
</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题