看别人网站的时候,看到一种导航菜单的动画,觉得很有意思,就仔细研究起来。

目前见过的动画有三种:水平下划线动画导航、水平背景动画导航、垂直动画导航,他们实现思路都是一样的,都是依赖 css3的同级通用选择器 "~" 。

自己实现了一遍,本文简要记录实现的思想。

大家可以先看看最后实现的效果:Demo点我

实现思路

HTML 结构

HTML结构没有特殊,就是 ul -> li:

  1. <ul class="a">
  2. <li class="n1"><a href="#">Navigator A</a></li>
  3. <li class="n2"><a href="#">Navigator B</a></li>
  4. <li class="n3 selected"><a href="#">Navigator C</a></li>
  5. <li class="n4"><a href="#">Navigator D</a></li>
  6. <li class="quebec">&nbsp;</li>
  7. </ul>

最后一个li空着,留着后面有用。

CSS 布局

实现基本样式,不多解释:

  1. li {
  2. list-style: none outside;
  3. position: relative;
  4. z-index: 1;
  5. float: left;
  6. padding: 0 0 0 0;
  7. }
  8. li a {
  9. position: relative;
  10. top: 5px;
  11. display: block;
  12. margin: 0 0;
  13. border-bottom: 5px solid transparent;
  14. padding: 10px 0;
  15. text-align: center;
  16. text-decoration: none;
  17. }
  18. .selected a {
  19. border-bottom: 5px solid #cfd0d0;
  20. color: #340e56;
  21. }

实现导航下划线

下面实现动画部分。

下方紫色滚动条是通过,刚才留着的最后一个li元素实现。

  1. .quebec {
  2. position: absolute;
  3. bottom: -5px;
  4. left: 0;
  5. z-index: 3;
  6. margin: 0;
  7. border: 0;
  8. width: 5px;
  9. height: 5px;
  10. padding: 0;
  11. overflow: hidden;
  12. text-indent: -9999em;
  13. background: #511d7f;
  14. -webkit-transition-property: left, width;
  15. -moz-transition-property: left, width;
  16. -ms-transition-property: left, width;
  17. -o-transition-property: left, width;
  18. transition-property: left, width;
  19. -webkit-transition-duration: .5s;
  20. -moz-transition-duration: .5s;
  21. -ms-transition-duration: .5s;
  22. -o-transition-duration: .5s;
  23. transition-duration: .5s;
  24. }

通过绝对定位,把最后一个 li.quebec 定位到导航下方,设置宽度高度。设置 transition,当我们改变 left, width的时候就能实现动画。

动起来

当hover到导航上面的时候,li.quebec 就定位left到其下面。实现这个效果的是css3的同级通用选择器 “~”

比如 A ~ B 匹配的是 任何在A元素之后的同级B元素

  1. .n1:hover ~ li.quebec { left: 0; width: 95px; }
  2. .n2:hover ~ li.quebec { left: 100px; width: 95px; }
  3. .n3:hover ~ li.quebec { left: 192px; width: 95px; }
  4. .n4:hover ~ li.quebec { left: 285px; width: 95px; }

这里就完成了一个 纯css的下划线动画导航。 最后的效果:Demo查看

扩展

当我们会实现水平的下划线动画导航后,实现 背景移动动画导航 思路也是一样,不过是li.quebec高度宽度的变化,背景透明度的变化。

垂直的动画导航 亦是如此,改变 li.quebec 的高度宽度,通过 translateY 控制其在垂直方向的位置。

为了效果更炫一点,我们还可以在hover不同li的时候,改变li.quebec的颜色、背景、透明度等。

纯css实现Magicline Navigation(下划线动画导航菜单)的更多相关文章

  1. 纯CSS 3D翻转一个面(翻转导航菜单 立方体)

    在做练习的时候学到css的翻转导航菜单,原代码有点让人头疼,通过对其css的参数一点点研究了其实现过程. 这里推荐大家研究这个3D翻转动画的代码. 我的github:swarz,欢迎给老弟我++星星 ...

  2. 纯CSS实现点击事件展现隐藏div菜单列表/元素切换

    在写移动端导航的时候经常用到点击按钮出现/隐藏导航条的情况,最常见的方法当然还是前端框架直接调用,省心省力,不易出错:当然还有使用纯JS实现的小代码段.我这里整理了纯CSS实现方式,给需要的人和给自己 ...

  3. 一款基jquery超炫的动画导航菜单

    今天给大家分享一款基jquery超炫的动画导航菜单.这款导航菜单,初始时页面中间一个按钮,单击按钮,菜单从左侧飞入页中.再次单击按钮,导航飞入左侧消息.动画效果很非常炫.一起看下效果图: 在线预览   ...

  4. jq倾斜的动画导航菜单

    效果预览网址:http://keleyi.com/keleyi/phtml/jqmenu/index.htm 支持IE.Chrome.火狐等浏览器 完整源代码,保存到HTML文件打开也可查看效果: & ...

  5. jquery倾斜的动画导航菜单

    1. [代码]完整源代码  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  6. 一款jquery编写图文下拉二级导航菜单特效

    一款jquery编写图文下拉二级导航菜单特效,效果非常简洁大气,很不错的一款jquery导航菜单特效. 这款jquery特效适用于很多的个人和门户网站. 适用浏览器:IE8.360.FireFox.C ...

  7. css删除线,下划线等

    <style> .p1 { text-decoration:overline; //上划线 } .p2 { text-decoration:line-through; //删除线 }  . ...

  8. css给文字加下划线

    语法:linear-gradient(direction, color-stop 1, color-stop 2,……) 简单用法:background-image: linear-gradient( ...

  9. 通过css3实现的动画导航菜单代码

    用css3样式实现的滑动导航菜单,html代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" &quo ...

随机推荐

  1. R中apply函数族

    参考于:http://blog.fens.me/r-apply/ 1. apply的家族函数 2. apply函数 apply函数是最常用的代替for循环的函数.apply函数可以对矩阵.数据框.数组 ...

  2. java多线程总结(一)

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: 1 2 3 4 5 6 7 8 9 10 11 ...

  3. mysql 练习题(Day44)

    init.sql文件内容 /* 数据导入: Navicat Premium Data Transfer Source Server : localhost Source Server Type : M ...

  4. zend studio设置utf8

    1. windows -> preference -> general -> workspace 2.项目右键 -> properities -> resource 3. ...

  5. C#:当前时间转换成文件名

    DateTime.Now.ToFileTime().ToString(); 结果是一个字符串,类似:131238643554094913.

  6. Mysql数据表字段设置了默认值,插入数据后默认字段的值却为null,不是默认值

    我将mysql的数据表的某个字段设置了默认值为1,当向该表插入数据的时候该字段的值不是默认值,而是null. 我的错误原因: 对数据库的操作我使用了持久化工具mybatis,插入数据的时候插入的是整个 ...

  7. HBase在数据统计应用中的使用心得

    转载自:http://www.cnblogs.com/panfeng412/archive/2011/11/19/2254921.html 1. 数据统计的需求 互联网上对于数据的统计,一个重要的应用 ...

  8. Oracle数据库安全(一)用户管理

    一.预定义用户 用户管理是Oracle数据库管理的核心和基础. 在创建Oracle数据库时,系统预定义创建的用户根据作用不同又可以分为以下3类 管理员用户 实例方案用户 内置用户 此外Oracle数据 ...

  9. MongoRepository动态代理及jpa方法解析源码分析

    public interface FzkRepository extends MongoRepository<Fzk, String> { Fzk findByName(String na ...

  10. Linux内核优化项

    net.ipv4.ip_forward = #该文件内容为0,表示禁止数据包转发,1表示允许 net.ipv4.conf.default.rp_filter = #是否忽略arp请求 net.ipv4 ...