CSS3效果:鼠标悬停背景展开效果

看腻导航栏背景变色的hover效果,我们看一下比较特殊的hover效果。

分析

我们观察到,当鼠标悬停在导航栏的项目中,出现从中间向左右展开的背景效果;移开时,又从左右向中间收缩。可以做出如下分析:

  • 文字本身是没有展开和收缩效果,说明文字与背景不是同一个元素。
  • 文字在背景上面显示,文字元素与背景元素是上下层关系,也就是存在定位。
  • 背景展开和收缩有明显的过渡效果。

实现

根据以上三点,我们逐个突破。

1. 文本元素与背景元素

  • 文本元素
    首先,文本使用span标签实现。加上宽高、居中等简单样式。
  • HTML
<span>项目</span>
  • CSS
span{
    display: inline-block;
    width: 100px;
    height: 30px;
    line-height: 30px;
    text-align: center;
}
  • 背景元素
    背景本身没有具体意义,只是用来修饰,我们可以使用span伪元素:after实现(这样可以减少一个专门表示背景的标签)。
  • CSS
span:after{
    content: "";
    background-color: #f00;
}

现在只能看到文字,还看不到背景色,因为背景元素没有内容也没有设置宽高。效果如图:


只能看到文字,背景色没有撑开

2. 在文本元素下面显示背景元素

元素层叠效果一般是父relativeabsolute实现。

  • 文本元素
span{
    display: inline-block;
    width: 100px;
    height: 30px;
    line-height: 30px;
    text-align: center;
    position: relative;
}
  • 背景元素
span:after{
    content: "";
    background-color: #f00;
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    z-index: -1;
}

注意:top: 0;bottom: 0;right: 0;left: 0;作用是背景平铺整个文本元素。

3. 鼠标悬停背景元素展开

背景元素开始时位于水平中间位置,也就是说距离左右是文本元素长度的一半。当鼠标悬停到文本元素上,背景展开。

  • 背景元素初始状态
span:after{
    content: "";
    background-color: #f00;
    position: absolute;
    top: 0;
    bottom: 0;
    right: 50%;
    left: 50%;
    z-index: -1;
}
  • 鼠标悬停背景元素展开
span:hover:after{
    right: 0;
    left: 0;
}

鼠标悬停马上显示背景色,效果如同span:hover直接改变颜色一致。我们还需要给背景元素加上过渡。

span:after{
    content: "";
    background-color: #f00;
    position: absolute;
    top: 0;
    bottom: 0;
    right: 50%;
    left: 50%;
    z-index: -1;
    transition: 0.3s;
}

大功告成。


完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>项目</title>
    <style>
    span{
        display: inline-block;
        width: 100px;
        height: 30px;
        line-height: 30px;
        text-align: center;
        position: relative;
    }
    span:after{
        content: "";
        background-color: #f00;
        position: absolute;
        top: 0;
        bottom: 0;
        right: 50%;
        left: 50%;
        z-index: -1;
        transition: 0.3s;
    }
    span:hover:after{
            right: 0;
        left: 0;
    }
    </style>
</head>
<body>
<span>项目</span>
</body>
</html>

拓展

  1. 既然可以实现从中间向左右展开,是否可以实现从中间向上下展开?


  • 能否可以实现单向展开呢?(从左向右,从右向左,从上向下,从下向上)


  • 能否可以实现从中间向上下左右同时展开呢?


  • 能否可以实现对角方向展开呢?


** 以上四个问题全部解决,恭喜你,鼠标悬停背景展开效果完全学会了。**

如有疑问欢迎留言

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载请声明 原文链接地址 关注公众号获取更多资讯 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位...
    前端进阶之旅阅读 16,611评论 32 459
  • Bootstrap是什么? 一套易用、优雅、灵活、可扩展的前端工具集--BootStrap。GitHub上介绍 的...
    凛0_0阅读 10,924评论 3 184
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • CSS基础 本文包括CSS基础知识选择器(重要!!!)继承、特殊性、层叠、重要性CSS格式化排版单位和值盒模型浮动...
    廖少少阅读 3,179评论 0 40
  • 正值炎夏,每天不动都一身汗! 而且我也特别爱出汗。一出门汗水就顺着头发,脑门往下流,什么妆都得花的乱七八糟。 最重...
    后知后觉的人阅读 2,322评论 8 2