CSS3制作hover下划线动画

1、前几天看到hexo的next主题标题hover效果很炫,自己尝试写了一个,另一个是next的实现,照例先上图

2、实现小黑科技

 <!-- html结构 -->
 <div>
     <a href="javascript:void(0);" class="demo1">自己实现的hover效果</a>
 </div>
/* css样式 */
        .demo1{
            position: relative;
            text-decoration: none;
            font-size: 20px;
            color: #333;
        }
        .demo1:before{
            content: "";
            position: absolute;
            left: 50%;
            bottom: -2px;
            width: 0;
            height: 2px;
            background: #4285f4;
            transition: all .3s;
        }
        .demo1:hover:before{
            width: 100%;
            left: 0;
            right: 0;
        }

关键在于没有hover的时候定义width为0,这样可以实现宽度从0到100%的变化。

left为50%,目的是为了动画开始的位置是在50%的位置。

3、hexo next主题的官方实现

<!-- html结构 -->
<div>
    <a href="javascript:void(0);" class="demo2">hexo next主题的实现</a>
</div>
/* css样式 */
        .demo2{
            position: relative;
            text-decoration: none;
            font-size: 20px;
            color: #333;
        }
        .demo2:before{
            content: "";
            position: absolute;
            left: 0;
            bottom: -2px;
            height: 2px;
            width: 100%;
            background: #4285f4;
            transform: scale(0);
            transition: all 0.3s;
        }
        .demo2:hover:before{
            transform: scale(1);
        }

这个实现的关键就是scale(0)到scale(1)的变化。

css3的scale transform的原点是中点,所以会从中间的位置开始动画。

4、两者区别

通过动画也看出来,next的动画有透明渐变的效果,和scale的表现形式有关。

第一个实现只是width变化,但是也可以用animation实现和next一样的效果。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

相关推荐:

如何在 Tkinter 中实现无闪烁的图像缩放动画

本文详解Tkinter图像缩放动画中闪烁问题的根本原因(重复创建canvas图像项+未控制帧率),并提供基于canvas.itemconfig()更新图像和after()驱动定时帧循环的专业解决方案,附完整可运行类封装示例。 本文详解tkinter图像缩放动画中闪烁问题的根本原因(重复创建canva...

Tkinter 图像缩放动画无闪烁实现指南

本文详解如何在Tkinter中实现平滑、无闪烁的图像缩放动画,核心在于避免重复创建canvas图像项、使用itemconfig动态更新图像,并通过after()实现可控帧率与事件循环协同。 本文详解如何在tkinter中实现平滑、无闪烁的图像缩放动画,核心在于避免重复创建canvas图像项、使用`i...

如何在 Tkinter Canvas 中实现循环动画的暂停与继续功能

本文介绍如何使用after()方法替代for循环,在Tkinter中实现Canvas(或任意控件)上图像/内容轮播的可响应式暂停/恢复控制,避免time.sleep()导致界面冻结的问题。 本文介绍如何使用`after()`方法替代`for`循环,在tkinter中实现canvas(或任意控件)上图...

如何在 Tkinter Canvas 中实现可暂停/恢复的循环动画

本文介绍使用after()方法替代传统for循环,在tkinter中实现响应式、可随时暂停与恢复的图像轮播(或canvas动画),确保gui始终保持交互能力,避免time.sleep()导致界面冻结。 本文介绍使用after()方法替代传统for循环,在tkinter中实现响应式、可随时暂停与恢复的...

为什么Python中的双下划线方法被称为魔法方法_了解其对内置运算符的重载

魔法方法是Python中以双下划线开头和结尾的特殊方法,由解释器在特定语法(如+、len()、==)触发时自动调用,用于定义类的对象行为协议,实现运算符重载、字符串表示、比较逻辑等功能。 Python中的双下划线方法(如__add__、__eq__、__len__)不是“魔法”,而是明确的协议接口—...

如何实现Python类的私有属性访问控制_使用双下划线前缀触发名称修饰机制

不能。双下划线前缀仅触发名称修饰(变为_ClassName__name),并非真正私有;Python无强制访问控制,修饰后仍可通过改写名直接访问,主要用途是避免子类命名冲突。 Python双下划线前缀真的能阻止访问吗 不能。双下划线前缀(如__value)不会真正隐藏属性,只是触发名称修饰(name...