CSS3实现动态的二级三级菜单效果实例代码
基础掌握知识
1.boder-radis圆角的制作
2.linear-gradient渐变背景的制作
3.box-shadow阴影效果的制作
4.transition转换效果的制作
5.transparent透明效果
6.CCS3中before的作用
实现的效果图如下:
搭建HTML容器
一级菜单ul的样式修饰:
设置一级菜单的宽度、整体居中显示、用border设置颜色为#222的1像素宽的边框、用background-color设置背景颜色为#111、用background-image和linear-gradient设置背景图片为#444和#111的渐变效果、用border-radius设置圆角边框为6px、用before和after的方式给一级ul填充内容是清除二级浮动的一种方式保证背景能够包裹所有ul内的元素
一级菜单内li的样式修饰:
用float将所有的li左浮动、用boder-right给每一个li制作一个左边框效果、用box-shadow制作阴影效果、position:relative是为了下面二级菜单的显示二级菜单会以absolute的方式定位
一级菜单内li中a元素以及鼠标移动到a元素上之后的样式修饰
这些属性比较简单,就不作一一介绍了
二级菜单ul的样式修饰
二级菜单默认是隐藏状态,用绝对定位的方式(相对于一级菜单)将二级菜单定位在top:38px;left:0;的位置上、同样给二级菜单设置渐变背景色和阴影的效果box-shadow中的rgba属性可以制作透明度的效果、用opacity这是透明级别为0、用transition制作一个过度显示和隐藏的效果
当鼠标移动到一级菜单栏的时候二级菜单栏显示
hover属性的应用
设置二级菜单li和a的样式
方法和一级菜单的li和a的修饰差不多,不做过多的解释
三角形的制作
用css3制作三角形的的方法就是四边设置同样宽度的border,将要保留的那一边的border设置颜色,其他三边的颜色设置为透明(transparent),则保留颜色的那一边的三角形就制作出来了
三级菜单位置的变换
将三级菜单定位到二级菜单的右边显示
完整代码(其中有针对IE6的兼容性处理)
代码如下 | 复制代码 |
<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="UTF-8">
<!--<script src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>-->
<title>用CSS3实现动画效果的制作</title>
<styletype="text/css">
.top-nav{width:969px;margin:60px auto;border:1px solid #222;background-color:#111;
background-image:linear-gradient(#444,#111);border-radius:6px;box-shadow:0 1px 1px #777;
padding:0;list-style:none;}
.top-nav:before,.top-nav:after{content: "";display: table;}
.top-nav:after{clear: both;}
/*针对IE6,_margin,_height是针对IE6的,其他浏览器中不需要*/
.top-nav{z-index: 1;}
.top-nav li{float: left;border-right:1px solid #222;box-shadow:1px 0 0 #444;position: relative;}
.top-nav li a{float:left;text-decoration: none;padding:12px 30px;font-size:12px;font-weight:bold;
text-shadow: 0 2px 0 #000;color: #999;}
.top-nav li a:hover{color: #fafafa;}
.top-nav li ul{visibility: hidden;position: absolute;list-style: none;top:38px;left: 0;z-index: 1;padding: 0;
background-color: #444;background-image: linear-gradient(#444,#111);box-shadow: 0 -1px 0 rgba(255,255,255,.3);
border-radius: 3px;opacity: 0;margin: 20px 0 0 0;transition: all .2s ease-in-out;
_margin:0; }
.top-nav li:hover > ul{opacity: 1;visibility: visible;margin: 0;}
.top-nav ul li{float: none;display: block;border: 0;box-shadow: 0 1px 0 #111,0 2px 0 #666;}
.top-nav ul a{padding: 10px;width: 130px;display: block;float: none;_height:10px;}
.top-nav ul a:hover{background-color: #0186ba;background-image: linear-gradient(#04acec,#0186ba);}
.top-nav ul li:first-child > a{border-radius: 3px 3px 0 0;}
.top-nav ul li:last-child > a{border-radius: 0 0 3px 3px;}
.top-nav ul li:first-child > a:before{ content: "";position: absolute;left:40px;top: -6px;
display: block;width: 0;border-bottom: 6px solid #444;border-left: 6px solid transparent; border-right: 6px solid transparent; }
.top-nav ul li:first-child > a:hover:before{border-bottom-color:#04acec; }
.top-nav ul ul{top:0;left: 150px;margin: 0 0 0 20px;_margin:0;box-shadow: -1px 0 0 rgba(255,255,255,.3);}
.top-nav ul ul li:first-child a:before{left: -6px;top: 50%;margin-top: -6px;border-left: 0;border-bottom: 6px solid transparent;
border-top: 6px solid transparent;border-right: 6px solid #3b3b3b;}
.top-nav ul ul li:first-child a:hover:before{border-right-color:#0299d3;border-bottom-color:transparent;}
</style>
<scripttype="text/javascript">
<!--针对IE6处理hover的问题-->
// $(function () {
// if($.browser.msie && $.broswer.version.substr(0,1)<7){
// $("li").has("ul").mouseover(function () {
// $(this).children("ul").css("visibility","visible");
// }).mouseout(function () {
// $(this).children("ul").css("visibility","hidden");
// });
// }
// })
</script>
</head>
<body>
<ulclass="top-nav">
<li><ahref="#">首页</a></li>
<li><ahref="#">课程大厅</a></li>
<li><ahref="#">学习中心 +</a>
<ul>
<li><ahref="#">视频学习</a>
<ul>
<li><ahref="#">css</a></li>
<li><ahref="#">js</a></li>
<li><ahref="#">jquery</a></li>
</ul>
</li>
<li><ahref="#">案例学习</a></li>
<li><ahref="#">交流平台</a></li>
</ul>
</li>
<li><ahref="#">关于我们</a></li>
</ul>
</body>
|
相关文章
- php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
- 有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 本文实例讲述了jQuery实现非常实用漂亮的select下拉菜单选择效果。分享给大家供大家参考,具体如下:先来看如下运行效果截图:在线演示地址如下:http://demo.jb51.net/js/2015/js-select-chose-style-menu-codes/具体代码如...2015-11-08
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- 本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
jQuery+slidereveal实现的面板滑动侧边展出效果
我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
- 一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
- 翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
- 微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
SQLMAP结合Meterpreter实现注入渗透返回shell
sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25- 本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24