我們在淘寶、搜狐等大型網站上都可以看到使用的一些二級下拉菜單,比如下面這張圖片。
但是如何實現類似的圖片呢?實際上,我們有至少三種方式來實現,下面,我附上代碼供大家參考。
1.僅使用html和css
<meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding: 0;list-style: none;text-decoration: none;} #nav{width: 500px;height: 40px;background: #ccc;margin: 0 auto;} ul{background: #aaa} ul li{float:left; display:block; height: 40px; line-height: 40px; padding: 0 20px; position: relative;} ul li:hover{background: #cea;} ul li ul li{float: none;} /*關鍵一:將二級菜單設置為display:none;*/ ul li ul{position: absolute;top:40px;left: 0; display: none;} ul li ul li:hover{background: red;} /*關鍵二:在划過二級菜單從屬的一級菜單時,設置為display:block;*/ ul li:hover ul{display: block;} </style> <div id="nav"> <ul> <li><a href="">首頁</a></li> <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> </ul> </div>
我們可以看到,這種方法是比較好的,它保證了結構與表現的完全分離。
2.使用javascript實現二級下拉菜單
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding: 0;list-style: none;text-decoration: none;} #nav{width: 500px;height: 40px;background: #ccc;margin: 0 auto;} ul{background: #aaa} ul li{float:left; display:block; height: 40px; line-height: 40px; padding: 0 20px; position: relative;} ul li:hover{background: #cea;} ul li ul li{float: none;} ul li ul{position: absolute;top:40px;left: 0; display:none;} ul li ul li:hover{background: red;} </style> </head> <body> <div id="nav"> <ul> <li><a href="#">首頁</a></li> <li onmouseover="show(this)" onmouseout="hide(this)"><a href="#">汽車</a> <!-- 關鍵一:在二級標題從屬的一級標題標簽內設置時間執行程序,this代表的時這個li元素 --> <ul> <li><a href="#">奧迪</a> </li> <li><a href="#">道奇</a> </li> </ul> </li> <li onmouseover="show(this)" onmouseout="hide(this)"><a href="#">手機</a> <ul> <li><a href="#">小米</a> </li> <li><a href="#">華為</a> </li> </ul> </li> <li><a href="#">聯系我們</a></li> </ul> </div> <script> function show(li){ var ul=li.getElementsByTagName("ul")[0]; // 關建二:在li這個對象內查詢標簽名為ul的標簽,由於二級標簽只有一個,所以索引為0即可。 ul.style.display="block"; // 關鍵三:當鼠標划過li時,其子元素ul標簽的display為block } function hide(li){ var ul=li.getElementsByTagName("ul")[0]; ul.style.display="none"; // 關鍵四:當鼠標划出li時,其子元素ul的display為none } </script> </body> </html>
3.用jQuery實現二級下拉菜單
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding: 0;list-style: none;text-decoration: none;} #nav{width: 500px;height: 40px;background: #ccc;margin: 0 auto;} ul{background: #aaa} ul li{float:left; display:block; height: 40px; line-height: 40px; padding: 0 20px; position: relative;} ul li:hover{background: #cea;} ul li ul li{float: none;} ul li ul{position: absolute;top:40px;left: 0; display: none;} ul li ul li:hover{background: red;} </style> </head> <body> <div id="nav"> <ul> <li><a href="">首頁</a></li> <li class="navmenu"><a href="">汽車</a> <ul> <li><a href="#">奧迪</a> </li> <li><a href="#">道奇</a> </li> </ul> </li> <li class="navmenu"><a href="">手機</a> <ul> <li><a href="#">小米</a> </li> <li><a href="#">華為</a> </li> </ul> </li> <li><a href="">聯系我們</a></li> </ul> </div> <script src="jquery-3.1.1.js"></script> <!-- 關鍵一:引入jQuery庫文件 --> <script type="text/javascript"> $(function(){ $(".navmenu").mouseover(function(){ $(this).children("ul").show(); }) }) // 關鍵二:正確使用jQuey的語法完成行為。 $(function(){ $(".navmenu") .mouseout(function(){ $(this).children("ul").hide(); }) }) </script> </body> </html>
顯然,使用jQuery是非常方便的。
最終的實現效果如下;
即當鼠標划過一級菜單時,會出現相應的二級菜單。