本文實現了一個經典的下拉菜單的制作。
首先,寫出Html部分:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <ul class="top-nav"> <li><a href="#">慕課網</a></li> <li><a href="#">課程大廳</a></li> <li><a href="#">學習中心</a> <ul> <li><a href="#">前端課程</a> <ul> <li><a href="#">html</a></li> <li><a href="#">javascript</a></li> <li><a href="#">css</a></li> </ul> </li> <li><a href="#">手機開發</a></li> <li><a href="#">后台編程</a></li> </ul> </li> <li><a href="#">關於我們</a></li> </ul> </body>
該代碼實現的效果圖如下:

可以看到,這是一個三級菜單。
現在,我們開始給一級菜單外部加入樣式:
.top-nav { width: 960px;/**寬度*/ 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 li { float: left;/**從左向右顯示*/ border-right: 1px solid #222;/**間隔線*/ box-shadow: 1px 0 0 #444; position: relative;/**相對定位*/ } .top-nav li a { float: left; padding: 12px 30px; color: #999; text-decoration: none;/**去掉下划線*/ text-shadow: 0 1px 0 #000;/**文本陰影*/ } .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 -1 0 rgba(255, 255, 255, 3); border-radius: 3px; opacity: 0;/**剛開始設為透明*/ margin: 20px 0 0 0; transition: all .2s ease-in-out;/**二級菜單動畫效果*/ } .top-nav li:hover > ul { opacity: 1; visibility: visible; margin: 0; }
得到下圖效果:

可以發現一級菜單的背景被遮蓋了,這是由於沒有清除浮動引起的。在樣式中加入如下代碼,清除浮動:
/**清除浮動*/ .top-nav:before, .top-nav:after { content: " "; display: table; } .top-nav:after { clear: both; }
背景出現:

下來定義子菜單的超鏈接和二級菜單的圓角樣式:
/**二級菜單*/ .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; } .top-nav ul a:hover { background-color: #0186ba; background-image: linear-gradient(#04accc, #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 ul { float: none; left: 125px; top: 0; display: block; }
如此,我們的效果圖就做好了:

是不是很酷?接下來為下拉菜單實現尖角。尖角位於二級菜單上面,是一個向上的箭頭:
.top-nav ul li:first-child > a:before { content: " "; position: absolute; left: 40px;/**顯示位置*/ top: -6px; border-left: 6px solid transparent; /**左右透明,只留下方*/ border-right: 6px solid transparent; border-bottom: 6px solid #444; } .top-nav ul li:first-child > a:hover:before { border-bottom-color: #04acec; }
尖角的實現原理:border上下左右四個方向,控制是否顯示,則可以出現三角的效果。
同樣,三級菜單尖角與二級類似,不過變成了向右的箭頭:
.top-nav ul ul li:first-child > a:before { content: " "; position: absolute; left: -6px; top: 50%; border-left: 0; border-right: 6px solid #3b3b3b; border-bottom: 6px solid transparent; border-top: 6px solid transparent; } .top-nav ul ul li:first-child > a:hover:before { border-right-color: #0299d3; border-bottom-color: transparent;/**取消二級菜單的顏色*/ }
在這里要注意去掉從二級菜單繼承的顏色。
於是,一個下拉菜單就做好了:

