1、導(dǎo)航(基礎(chǔ)樣式)
導(dǎo)航對于一位前端人員來說并不陌生,??梢哉f導(dǎo)航是一個網(wǎng)站重要的元素組件之一,可以便于用戶查找網(wǎng)站所提供的各項功能服務(wù),。導(dǎo)航的制作方法也是千奇百怪,五花八門。在這一節(jié)中將向大家介紹如何使用Bootstrap框架制作各式各樣的導(dǎo)航,。
在Bootstrap框架將導(dǎo)航獨立出來成為一個導(dǎo)航組件,根據(jù)不同的版本,,可以找到對應(yīng)的源碼:
? LESS版本:對應(yīng)的源文件是navs.less
? Sass版本:對應(yīng)的源文件是_navs.scss
? 編譯后版本:對應(yīng)源碼是bootstrap.css文件第3450行~第3641行
導(dǎo)航基礎(chǔ)樣式
Bootstrap框架中制作導(dǎo)航條主要通過“.nav”樣式,。默認(rèn)的“.nav”樣式不提供默認(rèn)的導(dǎo)航樣式,必須附加另外一個樣式才會有效,,比如“nav-tabs”,、“nav-pills”之類。比如一個tab導(dǎo)航條的例子,,他的實現(xiàn)方法就是為ul標(biāo)簽加入.nav和nav-tabs兩個類樣式,。
1 2 3 4 5 6 7 | < 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 >
|
/源碼請查閱bootstrap.css文件第3450行~第3493行/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | .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)航,,也稱為選項卡導(dǎo)航,。特別是在很多內(nèi)容分塊顯示的時,使用這種選項卡來分組十分適合,。
標(biāo)簽形導(dǎo)航是通過“nav-tabs”樣式來實現(xiàn),。在制作標(biāo)簽形導(dǎo)航時需要在原導(dǎo)航“nav”上追加此類名,如:
1 2 3 4 5 6 7 | < 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 >
|
運行的效果如下所示:
實現(xiàn)原理非常的簡單,,將菜單項(li)按塊顯示,,并且讓他們在同一水平上排列,然后定義非高亮菜單的樣式和鼠標(biāo)懸浮效果,。代碼如下:
/源碼請查閱bootstrap.css文件第3494行~第3509行/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | .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 ;
}
|
其實上例的效果和我們平時看到的選項卡效果并不一致,。一般情況之下,選項卡教會有一個當(dāng)前選中項,。其實在Bootstrap框架也相應(yīng)提供了,。假設(shè)我們想讓“Home”項為當(dāng)前選中項,只需要在其標(biāo)簽上添加類名“class="active"”即可:
1 2 3 4 | < ul class = "nav nav-tabs" >
< li class = "active" >< a href = "##" >Home</ a ></ li >
…
</ ul >
|
運行效果如下:
對應(yīng)樣式代碼如下:
/源碼請查閱bootstrap.css文件第3510行~第3518行/
1 2 3 4 5 6 7 8 9 | .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)前項之外,有的選項卡還帶有禁用狀態(tài),,實現(xiàn)這樣的效果,,只需要在標(biāo)簽項上添加“class=”disabled””即可:
1 2 3 4 5 | < ul class = "nav nav-tabs" >
< li class = "active" >< a href = "##" >Home</ a ></ li >
…
< li class = "disabled" >< a href = "##" >Responsive</ a ></ li >
</ ul >
|
運行效果如下:
實現(xiàn)這個效果的樣式,在默認(rèn)樣式“.nav”中就帶有:
/源碼請查看bootstrap.css文件第3469行~第3478行/
1 2 3 4 5 6 7 8 9 10 | .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 ;
}
|
注意:我們看到的選項卡效果,,點擊菜單項就可以切換內(nèi)容,,如果要實現(xiàn)這樣的效果需要配合js插件,這部分將在后面的博客中會介紹,。
3,、導(dǎo)航(膠囊形(pills)導(dǎo)航)
膠囊形(pills)導(dǎo)航聽起來有點別扭,因為其外形看起來有點像膠囊形狀,。但其更像我們平時看到的大眾形導(dǎo)航,。當(dāng)前項高亮顯示,并帶有圓角效果,。其實現(xiàn)方法和“nav-tabs”類似,,同樣的結(jié)構(gòu),只需要把類名“nav-tabs”換成“nav-pills”即可:
1 2 3 4 5 6 7 | < 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 >
|
實現(xiàn)效果樣式代碼:
/源碼請查閱bootstrap.css文件第3563行~第3577行/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | .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)航)
在實際運用當(dāng)中,,除了水平導(dǎo)航之外,還有垂直導(dǎo)航,,就類似前面介紹的垂直排列按鈕一樣,。制作垂直堆疊導(dǎo)航只需要在“nav-pills”的基礎(chǔ)上添加一個“nav-stacked”類名即可(stacked就是堆的意思):
1 2 3 4 5 6 7 | < 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 >
|
運行效果如下:
垂直堆疊導(dǎo)航與膠囊形導(dǎo)航相比,主要是讓導(dǎo)航項不浮動,,讓其垂直排列,,然后給相鄰導(dǎo)航項留有一定的間距:
/源碼請查閱bootstrap.css文件第3578行~第3584行/
1 2 3 4 5 6 7 | .nav-stacked > li {
float : none ;
}
.nav-stacked > li + li {
margin-top : 2px ;
margin-left : 0 ;
}
|
大家是否還記得,在下拉菜單一節(jié)中,,下拉菜單組與組之間有一個分隔線,。其實在垂直堆疊導(dǎo)航也具有這樣的效果,只需要添加在導(dǎo)航項之間添加“<li class=”nav-divider”></li>”即可:
1 2 3 4 5 6 7 8 | < 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 >
|
運行效果如下:
實現(xiàn)樣式:
/源碼請查閱bootstrap.css文件第3485行~3490行/
1 2 3 4 5 6 | .nav .nav-divider {
height : 1px ;
margin : 9px 0 ;
overflow : hidden ;
background-color : #e5e5e5 ;
}
|
或許你會問,,如果我在”nav-tabs”上添加“nav-stacked”是不是也能實現(xiàn)垂直的標(biāo)簽選項導(dǎo)航呢,?答案是:在bootstrap V2.x版本可以,,但在Bootstrap V3.x版本將這個效果取消了,,可能作者覺得垂直選擇項并不太常見,也不美觀吧,。
4,、自適應(yīng)導(dǎo)航(使用)
自適應(yīng)導(dǎo)航指的是導(dǎo)航占據(jù)容器全部寬度,而且菜單項可以像表格的單元格一樣自適應(yīng)寬度,。自適應(yīng)導(dǎo)航和前面使用“btn-group-justified”制作的自適應(yīng)按鈕組是一樣的,。只不過在制作自適應(yīng)導(dǎo)航時更換了另一個類名“nav-justified”。當(dāng)然他需要和“nav-tabs”或者“nav-pills”配合在一起使用。如:
1 2 3 4 5 6 7 | < 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īng)導(dǎo)航(實現(xiàn)原理)
實現(xiàn)原理并不難,,列表(<ul>)上設(shè)置寬度為“100%”,,然后每個菜單項(<li>)設(shè)置了“display:table-cell”,讓列表項以模擬表格單元格的形式顯示:
/源碼請查閱bootstrap.css文件第3585行~第3607行/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | .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 ;
}
}
|
這里有一個媒體查詢條件:“@media (min-width:768px){…}”表示自適應(yīng)導(dǎo)航僅在瀏覽器視窗寬度大于768px才能按上圖風(fēng)格顯示,。當(dāng)你的瀏覽器視窗寬度小于768px的時候,,將會按下圖的風(fēng)格展示:
從上圖效果可以得知,“nav-tabs”和“nav-justified”配合在一起使用,,也就是自適應(yīng)選項卡導(dǎo)航,,瀏覽器視窗寬度小于768px時,在樣式上做了另外的處理,。
/源碼請查閱bootstrap.css文件第3519行~第3562行/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | .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)航加下拉菜單(二級導(dǎo)航)
前面介紹的都是使用Bootstrap框架制作一級導(dǎo)航,但很多時候,,在Web頁面中是離不開二級導(dǎo)航的效果,。那么在Bootstrap框架中制作二級導(dǎo)航就更容易了。只需要將li當(dāng)作父容器,,使用類名“dropdown”,,同時在li中嵌套另一個列表ul,使用前面介紹下拉菜單的方法就可以:
1 2 3 4 5 6 7 8 9 10 11 | < ul class = "nav nav-pills" >
< li class = "active" >< a href = "##" >首頁</ 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 >
|
運行效果如下:
通過瀏覽器調(diào)試工具,,不難發(fā)現(xiàn),,點擊有二級導(dǎo)航的菜單項,會自動添加“open”類名,,再次點擊就會刪除添加的“open”類名:
簡單點來說,,就是依靠這個類名來控制二級導(dǎo)航顯示與否,并且設(shè)置了背景色和邊框:
/源碼查看bootstrap.css文件第3479行~3484行/
1 2 3 4 5 6 | .nav .open > a,
.nav .open >a:hover,
.nav .open >a:focus {
background-color : #eee ;
border-color : #428bca ;
}
|
大家回憶一下,,在制作下拉菜單時,,可以用分隔線,那么在二級導(dǎo)航中是否可以呢,?我們一起來看看:
不用再說太多,,只需要添加“<li class=”nav-divider”></li>”這樣的一個空標(biāo)簽就可以了。
運行效果如下:
/源碼請查看bootstrap.css文件第3485行~第3490行/
1 2 3 4 5 6 | .nav .nav-divider {
height : 1px ;
margin : 9px 0 ;
overflow : hidden ;
background-color : #e5e5e5 ;
}
|
6,、面包屑式導(dǎo)航
面包屑(Breadcrumb)一般用于導(dǎo)航,,主要是起的作用是告訴用戶現(xiàn)在所處頁面的位置(當(dāng)前位置)。在Bootstrap框架中面包屑也是一個獨立模塊組件:
- LESS版本:對應(yīng)源文件breadcrumbs.less
- Sass版本:對應(yīng)源文件_breadcrumbs.scss
- 編譯出來的版本:源碼對應(yīng)bootstrap.css文件第4112行~第4129行
使用方法:
使用方式就很簡單,,為ol加入breadcrumb類:
1 2 3 4 5 | < ol class = "breadcrumb" >
< li >< a href = "#" >首頁</ a ></ li >
< li >< a href = "#" >我的書</ a ></ li >
< li class = "active" >《圖解CSS3》</ li >
</ ol >
|
想想看,,當(dāng)前菜單項是不需要鏈接的,所以也就不用a標(biāo)簽了,。
實現(xiàn)原理:
看來不錯吧,!作者是使用li+li:before實現(xiàn)li與li之間的分隔符,,所以這種方案在IE低版本就慘了(不支持)。
/源碼查看bootstrap.css文件第4112行~第4129行/
1 2 3 4 5 6 7 8 9 10 11 | .breadcrumb {
padding : 8px 15px ;
margin-bottom : 20px ;
list-style : none ;
background-color : #f5f5f5 ;
border-radius: 4px ;
}
.breadcrumb> li {
display : inline- block ;
}
|
如果大家還想深入學(xué)習(xí),,可以點擊這里進(jìn)行學(xué)習(xí),,再為大家附兩個精彩的專題:Bootstrap學(xué)習(xí)教程
Bootstrap實戰(zhàn)教程
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,。
如對本文有疑問,,請?zhí)峤坏浇涣魃鐓^(qū),廣大熱心網(wǎng)友會為你解答??! 點擊進(jìn)入社區(qū)
|