效果图: 兼容ie678 火狐
<style> body,ul{ margin:0;padding:0; } a{ text-decoration:none; } /*清除样式,使各浏览器兼容ul样式*/ ul{ list-style:none; } /*一级导航的宽度和高度*/ #nav{ height:90px; width:100%; } /*导航里的所有li 都左侧浮动*/ #nav li{ float:left; height:80px; border-right: 1px solid #131313; background:green; position: relative; /*该属性用于二级导航,使二级导航里li的绝对定位生效*/ } #nav li a{ color:white; width:160px; display:block;/*使a元素块级化,用于制作hover状态下的效果*/ background:silver; padding:0 30px; line-height:80px;/*设置line-height 文字垂直居中*/ } /*hover效果*/ #nav li a:hover{ background-color:red; } #nav ul{ position:absolute;/*使二级导航脱离文档流,不占用空间*/ left:0; width:160px;/*指定二级导航的宽度,将float的li限定在一列中*/ } </style> <body> <div style="background:gold"> <ul id="nav"> <li><a href="#">国内电影</a> <ul> <li><a href="#">风月</a></li> <li><a href="#">动作</a></li> </ul> </li> <li><a href="#">国外电影</a> <ul> <li><a href="#">激情</a></li> <li><a href="#">速度</a></li> </ul> </li> <li><a href="#">综艺电影</a></li> <li><a href="#">科幻电影</a></li> <li><a href="#">生活电影</a></li> <li><a href="#">手机电影下载</a></li> <li><a href="#">爱情</a></li> <li><a href="#">喜剧电影</a></li> </ul> </div>
<!-- 这个div 用于测试导航下边的内容。 因为二级导航的position:absolute;使二级导航脱离文档流,所以二级导航不占用空间。 下面的内容紧贴导航--> <div> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssssasdfasfsdafsaffffffffffffffffffdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<br/> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssssssssssssssssssssssssssssssss<br/></div> </body>
用css写出导航后,就可以用js控制样式,达到显示和隐藏二级导航的效果了。可能比较疑惑的就是一级导航的li为relative,二级导航的ul为absolute。
二:下面就测试一下,脱离文档流不占用空间的absolute。
效果图:
代码:
<style> .pbox{ width:400px; height:600px; background:silver; position:relative;/*父元素relative·*/ } .cbox1{ background:green; width:150px; height:300px; } .cbox2{ background:red; width:150px; height:300px; position:absolute;/*脱离文档流,不占用空间*/ left:10px; } </style> <div class="pbox"><!--含有三个子div元素,pbox为relative--> <div class="cbox1"></div> <div class="cbox2"></div> <div>adsfdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd</div><!--该div 紧跟cbox1的div,因为cbox2已经不占用空间了--> </div>
三、JS控制二级导航的显示与隐藏
<style> body,ul{ margin:0;padding:0; } a{ text-decoration:none; } ul{ list-style:none; } #nav{ height:90px; width:100%; } #nav li{ float:left; height:80px; border-right: 1px solid #131313; background:green; position: relative; } #nav li a{ color:white; width:160px; display:block; background:silver; padding:0 30px; line-height:80px; } #nav li a:hover{ background-color:red; } #nav li ul{ position:absolute; left:0; width:160px; display:none;/*让二级导航隐藏*/ } #nav li.show ul{ display:block; /*显示二级导航的css*/ } </style> <script> window.onload=function(){ var nav = document.getElementById("nav"); alert(nav.childNodes.length); for (i=0; i < nav.childNodes.length; i++) { var childNod = nav.childNodes[i]; if (childNod.nodeName=="LI") { childNod.onmouseover=function(){ this.className+=" show";//添加显示样式 }; childNod.onmouseout=function() { this.className=this.className.replace(" show", "");//删除显示样式 }; }; } } </script> <body> <div style="background:gold"> <ul id="nav"> <li ><a href="#">国内电影</a> <ul> <li><a href="#">风月</a></li> <li><a href="#">动作</a></li> </ul> </li> <li><a href="#">国外电影</a> <ul> <li><a href="#">激情</a></li> <li><a href="#">速度</a></li> </ul> </li> <li><a href="#">综艺电影</a></li> <li><a href="#">科幻电影</a></li> <li><a href="#">生活电影</a></li> <li><a href="#">手机电影下载</a></li> <li><a href="#">爱情</a></li> <li><a href="#">喜剧电影</a></li> </ul> </div> <div> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssssasdfasfsdafsaffffffffffffffffffdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<br/> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssss<br/> hello world adfafasdfsssssssssssssssssssssssssssssssssssssssssss<br/></div> </body>