導航和選單的教程一
jQuery製作多級導航選單([color=red][b]說的很詳細[/b][/color]) [url]http://www.w3cplus.com/jquery/how-to-build-and-enhance-more-level-navigation-menu[/url]
[color=red][b]先了解css選擇器[/b][/color]:[url]http://www.ruanyifeng.com/blog/2009/03/css_selectors.html[/url]
注意:[b]多元素的組合選擇器[/b]
[color=red][b]E,F[/b][/color] 多元素選擇器,同時匹配所有E元素或F元素,E和F之間用逗號分隔
[color=red][b]E F[/b][/color] 後代元素選擇器,匹配所有屬於E元素後代的F元素,E和F之間用空格分隔
[color=red][b]E > F[/b][/color] 子元素選擇器,匹配所有E元素的子元素F
[color=red][b]E + F[/b][/color] 毗鄰元素選擇器,匹配所有緊隨E元素之後的同級元素F
[color=red][b]E:hover[/b][/color] 匹配滑鼠懸停其上的E元素
[color=darkblue][b]目標[/b][/color]
[img]http://www.w3cplus.com/sites/default/files/level-fourth-demo.png[/img]
這個導航有一個最大的特點:[color=red][b]在現代瀏覽器中無需任何指令碼也支援下拉選單的功能。[/b][/color]
[color=darkblue][b]第一步:HTML Markup[/b][/color]
首先我們需要一個正常而又清晰的導航選單結構,一般我們都是這樣寫的:
[color=darkblue][b]第二步:CSS Code[/b][/color]
上面我們完成了基本結構,接下來我們要使用樣式來美化他,不過這裡和平時美化稍有不同,因為還需要考慮到使用樣式控制下拉選單的顯示與隱藏功能。別的不說,我們直接上程式碼才一關鍵:
[b]1、頂級導航樣式[/b]
上面主要修飾的是頂級導航的樣式,接下來看第二步。
[b]2、二級選單樣式[/b]
這裡有一個關鍵地方:[color=red][b]選單載入進頁面時,所有子級選單項都是被隱藏,[/b][/color]
然後我們利用的是CSS的":hover"來實現,當滑鼠次級導航的父元素上時,他才被顯示,當滑鼠離開時又被隱藏:
只是在IE6的瀏覽器中並不支援“li:hover”功能(具體解決辦法可以參考《瀏覽器相容之旅的第四站:IE常見Bug——part2》)[url]http://www.w3cplus.com/ten-most-common-ie-bugs-and-how-to-fix-them-part-2[/url],以致於我們使用純CSS製作下拉導航存在一個隱患,但對於棄用了IE6的朋友,那是沒有問題的。
另外我們這裡使用的三角標誌也是純CSS的製作,如上圖所示,具體實現方法:[color=red][b]我們採用元素的0寬度和高度,並使用元素的border屬性來製作[/b][/color],請看三角實現的程式碼:
如果對這種製作方法感興趣的,可以點選Matt寫的《How to Create DIV Shapes Like Triangles and Circles》[url]http://blog.mattforhire.ca/2011/08/10/how-to-create-div-shapes-like-triangles-and-circles/[/url]。
3、三級(或更深層級)樣式
前面兩步都是一級二級選單樣式,其實三級選單或者說四級選單,他們的基本樣式都和前面的一樣,只不過是一個位置的不同而以[color=red][b]二級選單通常都是在一級導航的下面,而三級選單通常是在二級的右邊,四級就是三級的右邊,依些類推放置[/b][/color]。下面我們來看其程式碼:
[color=red][b]這裡的left和top很特別,使得left之上級的後面,並與最後一個li的top同樣水平[/b][/color].[i][color=blue][b]為什麼使用li:hover?[/b][/color][/i][color=red][b]E:hover[/b][/color] 匹配滑鼠懸停其上的E元素.
此處也是利用“li:hover”來控制下拉選單的顯示和隱藏功能。
其實到此為此,我們這個多級選單導航功能在現代瀏覽器中就可以正常執行了,但由於在"IE6"下不支援“li:hover”致使無法正常執行,而IE6相對來說還是蠻多人在使用,那麼為了讓其達到一樣的效果,我們就接著使用jQuery,讓這個多級導航選單在各瀏覽器中都能執行。
[color=darkblue][b]第三步:jQuery Code[/b][/color]
前面也說了,達到前面DEMO展示的效果,在現代瀏覽器中到上面一步就算功德圓滿了,可是還有一個IE6,我們只好使用JQuery方法來輔助完成,首先在第一步將jQuery版本庫導進來:
<script type="text/javascript" src="../js/jquery.min.js"></script>
下面接著看實現功能的jQuery程式碼
[b]1、jQuery實現的方法一:[/b]
[b]2、jQuery實現的方法二:[/b]
這裡我們主要使用了jQuery中的.hover()方法來控制子選單的顯示與否,當然我們帶可以使用.mouseover()和.mouseout()方法來代替.hover()方法;而且這裡還使用了.slideDown()方法,讓動更顯示更生動,當然大家還可以配合jquery.effects.core.js使用。具體效果,大家可以點選Demo,此例中和Demo稍有不同,感興趣的可以檢視程式碼,或直接將本例程式碼Copy到你本地,就能正常執行。
到此,一個生動而輕便的多級導航就完成了。在這個例項中,我們一起見證了兩點:其一,在現代瀏覽器中使用純CSS也一樣能製作出靚麗好看的多級導航;其二,不使用任何jQuery外掛,也能製作相容性強,外觀好看的多級導航選單。如果你不在需要相容IE6,你完全可以使用純CSS來製作多級選單。不知道你有沒有心動,有心動就動手吧,自力更生,才能豐衣足食。
[b]2011-09-29更新[/b]
如需轉載煩請註明出處:W3CPLUS[url]http://www.w3cplus.com/[/url]
[color=red][b]先了解css選擇器[/b][/color]:[url]http://www.ruanyifeng.com/blog/2009/03/css_selectors.html[/url]
注意:[b]多元素的組合選擇器[/b]
[color=red][b]E,F[/b][/color] 多元素選擇器,同時匹配所有E元素或F元素,E和F之間用逗號分隔
[color=red][b]E F[/b][/color] 後代元素選擇器,匹配所有屬於E元素後代的F元素,E和F之間用空格分隔
[color=red][b]E > F[/b][/color] 子元素選擇器,匹配所有E元素的子元素F
[color=red][b]E + F[/b][/color] 毗鄰元素選擇器,匹配所有緊隨E元素之後的同級元素F
[color=red][b]E:hover[/b][/color] 匹配滑鼠懸停其上的E元素
[color=darkblue][b]目標[/b][/color]
[img]http://www.w3cplus.com/sites/default/files/level-fourth-demo.png[/img]
這個導航有一個最大的特點:[color=red][b]在現代瀏覽器中無需任何指令碼也支援下拉選單的功能。[/b][/color]
[color=darkblue][b]第一步:HTML Markup[/b][/color]
首先我們需要一個正常而又清晰的導航選單結構,一般我們都是這樣寫的:
<body>
<ul id="nav">
<li><a href="">Home</a></li>
<li><a href="">About</a>
<ul>
<li><a href="">About Us</a></li>
<li><a href="">About Team</a></li>
<li><a href="">About You</a>
<ul>
<li><a href="">More About Us</a></li>
<li><a href="">More About Team</a></li>
<li><a href="">More About You</a>
<ul>
<li><a href="">level4</a></li>
<li><a href="">level4</a></li>
<li><a href="">level4</a></li>
</ul></li>
</ul></li>
</ul></li>
<li><a href="">Portfolio</a></li>
<li><a href="">Contact</a></li>
<li><a href="">Blog</a></li>
</ul>
</body>
[color=darkblue][b]第二步:CSS Code[/b][/color]
上面我們完成了基本結構,接下來我們要使用樣式來美化他,不過這裡和平時美化稍有不同,因為還需要考慮到使用樣式控制下拉選單的顯示與隱藏功能。別的不說,我們直接上程式碼才一關鍵:
[b]1、頂級導航樣式[/b]
/*Menu*/
#nav {
background: #e5e5e5;
float: left;
margin: 0; padding: 0;
border: 1px solid white;
border-bottom: none;
}
#nav li a,
#nav li {
float: left;
}
#nav li {
list-style: none;
position: relative;
}
#nav li a {
padding: 1em 2em;
text-decoration: none;
color: white;
background: #292929;
background: -moz-linear-gradient(top, black, #3c3c3c 1px, #292929 25px);
background: -webkit-gradient(linear, left top, left 25, from(black), color-stop(4%, #3c3c3c), to(#292929));
border-right: 1px solid #3c3c3c;
border-left: 1px solid #292929;
border-bottom: 1px solid #232323;
border-top: 1px solid #545454;
}
#nav li a:hover {
background: #2a0d65;
background: -moz-linear-gradient(top, #11032e, #2a0d65);
background: -webkit-gradient(linear, left top, left bottom, from(#11032e), to(#2a0d65));
}
上面主要修飾的是頂級導航的樣式,接下來看第二步。
[b]2、二級選單樣式[/b]
/* Submenu */
.hasChildren {
position: absolute;
width: 0px; height: 0px;
border: 5px solid #000;
border-color: #fff #000 #000;
background: black;
right : 0;
bottom: 18px;
}
#nav li ul .hasChildren {
border-color: #000 #000 #000 #fff;
bottom: 20px;
right: 5px;
}
#nav li ul {
display: none;
position: absolute;
left: 0;
top: 100%;
padding: 0; margin: 0;
}
#nav li:hover > ul {
display: block;
}
#nav li ul li,
#nav li ul li a {
float: none;
}
* html #nav li ul li {
display: inline; /* for IE6 */
}
#nav li ul li a {
width: 150px;
display: block;
}
這裡有一個關鍵地方:[color=red][b]選單載入進頁面時,所有子級選單項都是被隱藏,[/b][/color]
#nav li ul {
display: none;
position: absolute;
left: 0;
top: 100%;
padding: 0; margin: 0;
}
然後我們利用的是CSS的":hover"來實現,當滑鼠次級導航的父元素上時,他才被顯示,當滑鼠離開時又被隱藏:
#nav li:hover > ul {
display: block;
}
只是在IE6的瀏覽器中並不支援“li:hover”功能(具體解決辦法可以參考《瀏覽器相容之旅的第四站:IE常見Bug——part2》)[url]http://www.w3cplus.com/ten-most-common-ie-bugs-and-how-to-fix-them-part-2[/url],以致於我們使用純CSS製作下拉導航存在一個隱患,但對於棄用了IE6的朋友,那是沒有問題的。
另外我們這裡使用的三角標誌也是純CSS的製作,如上圖所示,具體實現方法:[color=red][b]我們採用元素的0寬度和高度,並使用元素的border屬性來製作[/b][/color],請看三角實現的程式碼:
/*向下的三角形*/
.hasChildren {
position: absolute;
width: 0px; height: 0px;
border: 5px solid #000;
border-color: #fff #000 #000;
background: black;
right : 0;
bottom: 18px;
}
/*向右的三角形*/
#nav li ul .hasChildren {
border-color: #000 #000 #000 #fff;
bottom: 20px;
right: 5px;
}
如果對這種製作方法感興趣的,可以點選Matt寫的《How to Create DIV Shapes Like Triangles and Circles》[url]http://blog.mattforhire.ca/2011/08/10/how-to-create-div-shapes-like-triangles-and-circles/[/url]。
3、三級(或更深層級)樣式
前面兩步都是一級二級選單樣式,其實三級選單或者說四級選單,他們的基本樣式都和前面的一樣,只不過是一個位置的不同而以[color=red][b]二級選單通常都是在一級導航的下面,而三級選單通常是在二級的右邊,四級就是三級的右邊,依些類推放置[/b][/color]。下面我們來看其程式碼:
/* SUBSUB Menu */
#nav li ul li ul {
display: none;
}
#nav li ul li:hover ul {
left: 100%;
top: 0;
}
[color=red][b]這裡的left和top很特別,使得left之上級的後面,並與最後一個li的top同樣水平[/b][/color].[i][color=blue][b]為什麼使用li:hover?[/b][/color][/i][color=red][b]E:hover[/b][/color] 匹配滑鼠懸停其上的E元素.
此處也是利用“li:hover”來控制下拉選單的顯示和隱藏功能。
其實到此為此,我們這個多級選單導航功能在現代瀏覽器中就可以正常執行了,但由於在"IE6"下不支援“li:hover”致使無法正常執行,而IE6相對來說還是蠻多人在使用,那麼為了讓其達到一樣的效果,我們就接著使用jQuery,讓這個多級導航選單在各瀏覽器中都能執行。
[color=darkblue][b]第三步:jQuery Code[/b][/color]
前面也說了,達到前面DEMO展示的效果,在現代瀏覽器中到上面一步就算功德圓滿了,可是還有一個IE6,我們只好使用JQuery方法來輔助完成,首先在第一步將jQuery版本庫導進來:
<script type="text/javascript" src="../js/jquery.min.js"></script>
下面接著看實現功能的jQuery程式碼
[b]1、jQuery實現的方法一:[/b]
$(document).ready(function(){
//遍歷#nav中的所有li
$('#nav').find('li').each(function(){
//如果li中含有ul
if($(this).find('ul').length > 0) {
//插入span.hasChildren,(三角標誌)
$('<span class="hasChildren" />').appendTo($(this).children(":first"));
//給li繫結一個hover事件
$(this).hover(function(){
//:hover狀態,顯示子選單
$(this).find('>ul').stop(true,true).slideDown();
},function(){
//mouseout狀態隱藏子選單
$(this).find('>ul').stop(true,true).hide();
});
}
});
});
[b]2、jQuery實現的方法二:[/b]
$(document).ready(function(){
var site = function(){
this.navLi = $('#nav li').children('ul').hide().end();
this.init();
}
site.prototype = {
init : function(){
this.setMenu();
},
//Enables the slideDown menu, and adds suppert for IE6
setMenu: function(){
$.each(this.navLi,function(){
if($(this).children('ul')[0]) {
$(this).append('<span class="hasChildren" />');
}
});
this.navLi.hover(function(){
$(this).find('>ul').stop(true,true).slideDown();
},function(){
$(this).find('>ul').stop(true,true).hide();
});
}
}
new site();
});
這裡我們主要使用了jQuery中的.hover()方法來控制子選單的顯示與否,當然我們帶可以使用.mouseover()和.mouseout()方法來代替.hover()方法;而且這裡還使用了.slideDown()方法,讓動更顯示更生動,當然大家還可以配合jquery.effects.core.js使用。具體效果,大家可以點選Demo,此例中和Demo稍有不同,感興趣的可以檢視程式碼,或直接將本例程式碼Copy到你本地,就能正常執行。
到此,一個生動而輕便的多級導航就完成了。在這個例項中,我們一起見證了兩點:其一,在現代瀏覽器中使用純CSS也一樣能製作出靚麗好看的多級導航;其二,不使用任何jQuery外掛,也能製作相容性強,外觀好看的多級導航選單。如果你不在需要相容IE6,你完全可以使用純CSS來製作多級選單。不知道你有沒有心動,有心動就動手吧,自力更生,才能豐衣足食。
[b]2011-09-29更新[/b]
<script type="text/javascript">
$(document).ready(function(){
$('#nav ul').css({"display":"none"});//Opera Fix
$('#nav li').each(function(){
if($(this).find('ul').length>0) {
$('<span class="hasChildren" />').appendTo($(this).children(":first"));
$(this).hover(function(){
$(this).find('ul:first').css({"visibility":"visible","display":"none"}).show();
},function(){
$(this).find('ul:first').css({"visibility":"hidden"});
});
}
});
});
</script>
如需轉載煩請註明出處:W3CPLUS[url]http://www.w3cplus.com/[/url]
相關文章
- PbootCMS導航選單-導航選單的使用教程boot
- [開發教程] 第32講:Bootstrap導航選單裡的下拉選單boot
- [開發教程]第24講:Bootstrap導航選單boot
- 導航選單(動畫)--- jQuery動畫jQuery
- CSS垂直導航選單CSS
- CSS 動態導航選單CSS
- JavaScript 三級導航選單JavaScript
- JavaScript二級導航選單JavaScript
- jQuery滑動導航選單jQuery
- 固定在頂部的導航選單
- 一側具有滑鼠跟隨效果的垂直導航選單
- Element-ui之導航選單UI
- CSS導航欄及下拉選單CSS
- CSS多級導航選單效果CSS
- CSS垂直三級導航選單CSS
- 左側分類導航選單
- html-製作導航選單HTML
- 35個優秀的jQuery和CSS3導航選單jQueryCSSS3
- ul li實現的水平導航選單
- 具有響應式效果的導航選單
- PbootCMS導航選單標籤的小技巧boot
- [開發教程]第25講:Bootstrap導航選單的響應式設計boot
- vue元件之路之menu導航選單Vue元件
- (四)選單導航及路由設定路由
- jQuery三級導航選單詳解jQuery
- jQuery底部跟隨水平導航選單jQuery
- 純CSS打造淘寶導航選單欄CSS
- 純css製作導航下拉選單CSS
- CSS 平行四邊形導航選單CSS
- 具有彈性效果的右鍵導航選單
- jQuery背景滑動跟隨的導航選單jQuery
- 12個獨特的導航選單設計
- 手風琴方式展開和摺疊導航選單效果
- 使用 jQuery 和 CSS3 製作滑動導航選單jQueryCSSS3
- css簡單水平導航選單程式碼例項CSS
- CSS 可伸縮圓角導航選單CSS
- BootstrapBlazor實戰 Menu 導航選單使用(1)bootBlazor
- BootstrapBlazor實戰 Menu 導航選單使用(2)bootBlazor