Bootstrap每天必學(xué)之導(dǎo)航
1、導(dǎo)航(基礎(chǔ)樣式)
導(dǎo)航對(duì)于一位前端人員來(lái)說(shuō)并不陌生??梢哉f(shuō)導(dǎo)航是一個(gè)網(wǎng)站重要的元素組件之一,可以便于用戶查找網(wǎng)站所提供的各項(xiàng)功能服務(wù)。導(dǎo)航的制作方法也是千奇百怪,五花八門。在這一節(jié)中將向大家介紹如何使用Bootstrap框架制作各式各樣的導(dǎo)航。
在Bootstrap框架將導(dǎo)航獨(dú)立出來(lái)成為一個(gè)導(dǎo)航組件,根據(jù)不同的版本,可以找到對(duì)應(yīng)的源碼:
☑ LESS版本:對(duì)應(yīng)的源文件是navs.less
☑ Sass版本:對(duì)應(yīng)的源文件是_navs.scss
☑ 編譯后版本:對(duì)應(yīng)源碼是bootstrap.css文件第3450行~第3641行
導(dǎo)航基礎(chǔ)樣式
Bootstrap框架中制作導(dǎo)航條主要通過(guò)“.nav”樣式。默認(rèn)的“.nav”樣式不提供默認(rèn)的導(dǎo)航樣式,必須附加另外一個(gè)樣式才會(huì)有效,比如“nav-tabs”、“nav-pills”之類。比如一個(gè)tab導(dǎo)航條的例子,他的實(shí)現(xiàn)方法就是為ul標(biāo)簽加入.nav和nav-tabs兩個(gè)類樣式。
<ul class="nav nav-tabs"> <li><a href="##">Home</a></li> <li><a href="##">CSS3</a></li> <li><a href="##">Sass</a></li> <li><a href="##">jQuery</a></li> <li><a href="##">Responsive</a></li> </ul>

/源碼請(qǐng)查閱bootstrap.css文件第3450行~第3493行/
.nav {
padding-left: 0;
margin-bottom: 0;
list-style: none;
}
.nav> li {
position: relative;
display: block;
}
.nav> li > a {
position: relative;
display: block;
padding: 10px 15px;
}
.nav> li >a:hover,
.nav> li >a:focus {
text-decoration: none;
background-color: #eee;
}
.nav>li.disabled> a {
color: #999;
}
.nav>li.disabled>a:hover,
.nav>li.disabled>a:focus {
color: #999;
text-decoration: none;
cursor: not-allowed;
background-color: transparent;
}
.nav .open > a,
.nav .open >a:hover,
.nav .open >a:focus {
background-color: #eee;
border-color: #428bca;
}
.nav .nav-divider {
height: 1px;
margin: 9px 0;
overflow: hidden;
background-color: #e5e5e5;
}
.nav> li > a >img {
max-width: none;
}
2、導(dǎo)航(標(biāo)簽形tab導(dǎo)航)
標(biāo)簽形導(dǎo)航,也稱為選項(xiàng)卡導(dǎo)航。特別是在很多內(nèi)容分塊顯示的時(shí),使用這種選項(xiàng)卡來(lái)分組十分適合。
標(biāo)簽形導(dǎo)航是通過(guò)“nav-tabs”樣式來(lái)實(shí)現(xiàn)。在制作標(biāo)簽形導(dǎo)航時(shí)需要在原導(dǎo)航“nav”上追加此類名,如:
<ul class="nav nav-tabs"> <li><a href="##">Home</a></li> <li><a href="##">CSS3</a></li> <li><a href="##">Sass</a></li> <li><a href="##">jQuery</a></li> <li><a href="##">Responsive</a></li> </ul>
運(yùn)行的效果如下所示:

實(shí)現(xiàn)原理非常的簡(jiǎn)單,將菜單項(xiàng)(li)按塊顯示,并且讓他們?cè)谕凰缴吓帕校缓蠖x非高亮菜單的樣式和鼠標(biāo)懸浮效果。代碼如下:
/源碼請(qǐng)查閱bootstrap.css文件第3494行~第3509行/
.nav-tabs {
border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
float: left;
margin-bottom: -1px;
}
.nav-tabs > li > a {
margin-right: 2px;
line-height: 1.42857143;
border: 1px solid transparent;
border-radius: 4px 4px 0 0;
}
.nav-tabs > li >a:hover {
border-color: #eee #eee #ddd;
}
其實(shí)上例的效果和我們平時(shí)看到的選項(xiàng)卡效果并不一致。一般情況之下,選項(xiàng)卡教會(huì)有一個(gè)當(dāng)前選中項(xiàng)。其實(shí)在Bootstrap框架也相應(yīng)提供了。假設(shè)我們想讓“Home”項(xiàng)為當(dāng)前選中項(xiàng),只需要在其標(biāo)簽上添加類名“class="active"”即可:
<ul class="nav nav-tabs"> <li class="active"><a href="##">Home</a></li> … </ul>
運(yùn)行效果如下:

對(duì)應(yīng)樣式代碼如下:
/源碼請(qǐng)查閱bootstrap.css文件第3510行~第3518行/
.nav-tabs >li.active> a,
.nav-tabs >li.active>a:hover,
.nav-tabs >li.active>a:focus {
color: #555;
cursor: default;
background-color: #fff;
border: 1px solid #ddd;
border-bottom-color: transparent;
}
除了當(dāng)前項(xiàng)之外,有的選項(xiàng)卡還帶有禁用狀態(tài),實(shí)現(xiàn)這樣的效果,只需要在標(biāo)簽項(xiàng)上添加“class=”disabled””即可:
<ul class="nav nav-tabs"> <li class="active"><a href="##">Home</a></li> … <li class="disabled"><a href="##">Responsive</a></li> </ul>
運(yùn)行效果如下:

實(shí)現(xiàn)這個(gè)效果的樣式,在默認(rèn)樣式“.nav”中就帶有:
/源碼請(qǐng)查看bootstrap.css文件第3469行~第3478行/
.nav>li.disabled> a {
color: #999;
}
.nav>li.disabled>a:hover,
.nav>li.disabled>a:focus {
color: #999;
text-decoration: none;
cursor: not-allowed;
background-color: transparent;
}
注意:我們看到的選項(xiàng)卡效果,點(diǎn)擊菜單項(xiàng)就可以切換內(nèi)容,如果要實(shí)現(xiàn)這樣的效果需要配合js插件,這部分將在后面的博客中會(huì)介紹。
3、導(dǎo)航(膠囊形(pills)導(dǎo)航)
膠囊形(pills)導(dǎo)航聽(tīng)起來(lái)有點(diǎn)別扭,因?yàn)槠渫庑慰雌饋?lái)有點(diǎn)像膠囊形狀。但其更像我們平時(shí)看到的大眾形導(dǎo)航。當(dāng)前項(xiàng)高亮顯示,并帶有圓角效果。其實(shí)現(xiàn)方法和“nav-tabs”類似,同樣的結(jié)構(gòu),只需要把類名“nav-tabs”換成“nav-pills”即可:
<ul class="nav nav-pills"> <li class="active"><a href="##">Home</a></li> <li><a href="##">CSS3</a></li> <li><a href="##">Sass</a></li> <li><a href="##">jQuery</a></li> <li class="disabled"><a href="##">Responsive</a></li> </ul>
實(shí)現(xiàn)效果樣式代碼:
/源碼請(qǐng)查閱bootstrap.css文件第3563行~第3577行/
.nav-pills > li {
float: left;
}
.nav-pills > li > a {
border-radius: 4px;
}
.nav-pills > li + li {
margin-left: 2px;
}
.nav-pills >li.active> a,
.nav-pills >li.active>a:hover,
.nav-pills >li.active>a:focus {
color: #fff;
background-color: #428bca;
}
4、導(dǎo)航(垂直堆疊的導(dǎo)航)
在實(shí)際運(yùn)用當(dāng)中,除了水平導(dǎo)航之外,還有垂直導(dǎo)航,就類似前面介紹的垂直排列按鈕一樣。制作垂直堆疊導(dǎo)航只需要在“nav-pills”的基礎(chǔ)上添加一個(gè)“nav-stacked”類名即可(stacked就是堆的意思):
<ul class="nav nav-pills nav-stacked"> <li class="active"><a href="##">Home</a></li> <li><a href="##">CSS3</a></li> <li><a href="##">Sass</a></li> <li><a href="##">jQuery</a></li> <li class="disabled"><a href="##">Responsive</a></li> </ul>
運(yùn)行效果如下:

垂直堆疊導(dǎo)航與膠囊形導(dǎo)航相比,主要是讓導(dǎo)航項(xiàng)不浮動(dòng),讓其垂直排列,然后給相鄰導(dǎo)航項(xiàng)留有一定的間距:
/源碼請(qǐng)查閱bootstrap.css文件第3578行~第3584行/
.nav-stacked > li {
float: none;
}
.nav-stacked > li + li {
margin-top: 2px;
margin-left: 0;
}
大家是否還記得,在下拉菜單一節(jié)中,下拉菜單組與組之間有一個(gè)分隔線。其實(shí)在垂直堆疊導(dǎo)航也具有這樣的效果,只需要添加在導(dǎo)航項(xiàng)之間添加“<li class=”nav-divider”></li>”即可:
<ul class="nav nav-pills nav-stacked"> <li class="active"><a href="##">Home</a></li> <li><a href="##">CSS3</a></li> <li><a href="##">Sass</a></li> <li><a href="##">jQuery</a></li> <li class="nav-divider"></li> <li class="disabled"><a href="##">Responsive</a></li> </ul>
運(yùn)行效果如下:

實(shí)現(xiàn)樣式:
/源碼請(qǐng)查閱bootstrap.css文件第3485行~3490行/
.nav .nav-divider {
height: 1px;
margin: 9px 0;
overflow: hidden;
background-color: #e5e5e5;
}
或許你會(huì)問(wèn),如果我在”nav-tabs”上添加“nav-stacked”是不是也能實(shí)現(xiàn)垂直的標(biāo)簽選項(xiàng)導(dǎo)航呢?答案是:在bootstrap V2.x版本可以,但在Bootstrap V3.x版本將這個(gè)效果取消了,可能作者覺(jué)得垂直選擇項(xiàng)并不太常見(jiàn),也不美觀吧。
4、自適應(yīng)導(dǎo)航(使用)
自適應(yīng)導(dǎo)航指的是導(dǎo)航占據(jù)容器全部寬度,而且菜單項(xiàng)可以像表格的單元格一樣自適應(yīng)寬度。自適應(yīng)導(dǎo)航和前面使用“btn-group-justified”制作的自適應(yīng)按鈕組是一樣的。只不過(guò)在制作自適應(yīng)導(dǎo)航時(shí)更換了另一個(gè)類名“nav-justified”。當(dāng)然他需要和“nav-tabs”或者“nav-pills”配合在一起使用。如:
<ul class="nav nav-tabs nav-justified"> <li class="active"><a href="##">Home</a></li> <li><a href="##">CSS3</a></li> <li><a href="##">Sass</a></li> <li><a href="##">jQuery</a></li> <li><a href="##">Responsive</a></li> </ul>
運(yùn)行效果如下:

自適應(yīng)導(dǎo)航(實(shí)現(xiàn)原理)
實(shí)現(xiàn)原理并不難,列表(<ul>)上設(shè)置寬度為“100%”,然后每個(gè)菜單項(xiàng)(<li>)設(shè)置了“display:table-cell”,讓列表項(xiàng)以模擬表格單元格的形式顯示:
/源碼請(qǐng)查閱bootstrap.css文件第3585行~第3607行/
.nav-justified {
width: 100%;
}
.nav-justified > li {
float: none;
}
.nav-justified > li > a {
margin-bottom: 5px;
text-align: center;
}
.nav-justified > .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media (min-width: 768px) {
.nav-justified > li {
display: table-cell;
width: 1%;
}
.nav-justified > li > a {
margin-bottom: 0;
}
}
這里有一個(gè)媒體查詢條件:“@media (min-width:768px){…}”表示自適應(yīng)導(dǎo)航僅在瀏覽器視窗寬度大于768px才能按上圖風(fēng)格顯示。當(dāng)你的瀏覽器視窗寬度小于768px的時(shí)候,將會(huì)按下圖的風(fēng)格展示:

從上圖效果可以得知,“nav-tabs”和“nav-justified”配合在一起使用,也就是自適應(yīng)選項(xiàng)卡導(dǎo)航,瀏覽器視窗寬度小于768px時(shí),在樣式上做了另外的處理。
/源碼請(qǐng)查閱bootstrap.css文件第3519行~第3562行/
.nav-tabs.nav-justified {
width: 100%;
border-bottom: 0;
}
.nav-tabs.nav-justified > li {
float: none;
}
.nav-tabs.nav-justified > li > a {
margin-bottom: 5px;
text-align: center;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media (min-width: 768px) {
.nav-tabs.nav-justified > li {
display: table-cell;
width: 1%;
}
.nav-tabs.nav-justified > li > a {
margin-bottom: 0;
}
}
.nav-tabs.nav-justified > li > a {
margin-right: 0;
border-radius: 4px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active >a:hover,
.nav-tabs.nav-justified > .active >a:focus {
border: 1px solid #ddd;
}
@media (min-width: 768px) {
.nav-tabs.nav-justified > li > a {
border-bottom: 1px solid #ddd;
border-radius: 4px 4px 0 0;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active >a:hover,
.nav-tabs.nav-justified > .active >a:focus {
border-bottom-color: #fff;
}
}
5、導(dǎo)航加下拉菜單(二級(jí)導(dǎo)航)
前面介紹的都是使用Bootstrap框架制作一級(jí)導(dǎo)航,但很多時(shí)候,在Web頁(yè)面中是離不開(kāi)二級(jí)導(dǎo)航的效果。那么在Bootstrap框架中制作二級(jí)導(dǎo)航就更容易了。只需要將li當(dāng)作父容器,使用類名“dropdown”,同時(shí)在li中嵌套另一個(gè)列表ul,使用前面介紹下拉菜單的方法就可以:
<ul class="nav nav-pills"> <li class="active"><a href="##">首頁(yè)</a></li> <li class="dropdown"> <a href="##" class="dropdown-toggle" data-toggle="dropdown">教程<span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="##">CSS3</a></li> … </ul> </li> <li><a href="##">關(guān)于我們</a></li> </ul>
運(yùn)行效果如下:

通過(guò)瀏覽器調(diào)試工具,不難發(fā)現(xiàn),點(diǎn)擊有二級(jí)導(dǎo)航的菜單項(xiàng),會(huì)自動(dòng)添加“open”類名,再次點(diǎn)擊就會(huì)刪除添加的“open”類名:

簡(jiǎn)單點(diǎn)來(lái)說(shuō),就是依靠這個(gè)類名來(lái)控制二級(jí)導(dǎo)航顯示與否,并且設(shè)置了背景色和邊框:
/源碼查看bootstrap.css文件第3479行~3484行/
.nav .open > a,
.nav .open >a:hover,
.nav .open >a:focus {
background-color: #eee;
border-color: #428bca;
}
大家回憶一下,在制作下拉菜單時(shí),可以用分隔線,那么在二級(jí)導(dǎo)航中是否可以呢?我們一起來(lái)看看:
不用再說(shuō)太多,只需要添加“<li class=”nav-divider”></li>”這樣的一個(gè)空標(biāo)簽就可以了。
運(yùn)行效果如下:

/源碼請(qǐng)查看bootstrap.css文件第3485行~第3490行/
.nav .nav-divider {
height: 1px;
margin: 9px 0;
overflow: hidden;
background-color: #e5e5e5;
}
6、面包屑式導(dǎo)航
面包屑(Breadcrumb)一般用于導(dǎo)航,主要是起的作用是告訴用戶現(xiàn)在所處頁(yè)面的位置(當(dāng)前位置)。在Bootstrap框架中面包屑也是一個(gè)獨(dú)立模塊組件:
- LESS版本:對(duì)應(yīng)源文件breadcrumbs.less
- Sass版本:對(duì)應(yīng)源文件_breadcrumbs.scss
- 編譯出來(lái)的版本:源碼對(duì)應(yīng)bootstrap.css文件第4112行~第4129行
使用方法:
使用方式就很簡(jiǎn)單,為ol加入breadcrumb類:
<ol class="breadcrumb"> <li><a href="#">首頁(yè)</a></li> <li><a href="#">我的書(shū)</a></li> <li class="active">《圖解CSS3》</li> </ol>
想想看,當(dāng)前菜單項(xiàng)是不需要鏈接的,所以也就不用a標(biāo)簽了。

實(shí)現(xiàn)原理:
看來(lái)不錯(cuò)吧!作者是使用li+li:before實(shí)現(xiàn)li與li之間的分隔符,所以這種方案在IE低版本就慘了(不支持)。
/源碼查看bootstrap.css文件第4112行~第4129行/
.breadcrumb {
padding: 8px 15px;
margin-bottom: 20px;
list-style: none;
background-color: #f5f5f5;
border-radius: 4px;
}
.breadcrumb> li {
display: inline-block;
}
如果大家還想深入學(xué)習(xí),可以點(diǎn)擊這里進(jìn)行學(xué)習(xí),再為大家附兩個(gè)精彩的專題:Bootstrap學(xué)習(xí)教程 Bootstrap實(shí)戰(zhàn)教程
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
- Bootstrap導(dǎo)航欄各元素操作方法(表單、按鈕、文本)
- Bootstrap每天必學(xué)之導(dǎo)航條
- Bootstrap實(shí)現(xiàn)響應(yīng)式導(dǎo)航欄效果
- Bootstrap實(shí)現(xiàn)默認(rèn)導(dǎo)航欄效果
- 第一次接觸神奇的Bootstrap菜單和導(dǎo)航
- Bootstrap每天必學(xué)之附加導(dǎo)航(Affix)插件
- 第一次接觸神奇的Bootstrap導(dǎo)航條
- Bootstrap多級(jí)導(dǎo)航欄(級(jí)聯(lián)導(dǎo)航)的實(shí)現(xiàn)代碼
- Bootstrap每天必學(xué)之響應(yīng)式導(dǎo)航、輪播圖
- Bootstrap導(dǎo)航中表單簡(jiǎn)單實(shí)現(xiàn)代碼
相關(guān)文章
淺談Javascript如何實(shí)現(xiàn)勻速運(yùn)動(dòng)
這篇文章主要介紹了淺談Javascript如何實(shí)現(xiàn)勻速運(yùn)動(dòng)的方法及相關(guān)代碼,需要的朋友可以參考下2014-12-12
從0到1學(xué)習(xí)JavaScript編寫貪吃蛇游戲
這篇文章主要為大家詳細(xì)介紹了JavaScript編寫貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
JS集成fckeditor及判斷內(nèi)容是否為空的方法
這篇文章主要介紹了JS集成fckeditor及判斷內(nèi)容是否為空的方法,涉及fckeditor的設(shè)置及頁(yè)面元素的操作技巧,并分析了php環(huán)境下配置文件上傳的注意事項(xiàng),需要的朋友可以參考下2016-05-05
JavaScript之iterable_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了JavaScript之iterable,遍歷Array可以采用下標(biāo)循環(huán),遍歷Map和Set就無(wú)法使用下標(biāo)。為了統(tǒng)一集合類型,ES6標(biāo)準(zhǔn)引入了新的iterable類型,Array、Map和Set都屬于iterable類型2017-06-06
javascript頁(yè)面動(dòng)態(tài)顯示時(shí)間變化示例代碼
頁(yè)面動(dòng)態(tài)顯示時(shí)間變化的方法有很多,本文為大家介紹下使用javascript的具體實(shí)現(xiàn),感興趣的朋友不要錯(cuò)過(guò)2013-12-12

