1、導航(基礎樣式)
導航對於一位前端人員來說並不陌生。可以說導航是一個網站重要的元素組件之一,可以便於用戶查找網站所提供的各項功能服務。導航的制作方法也是千奇百怪,五花八門。在這一節中將向大家介紹如何使用Bootstrap框架制作各式各樣的導航。
在Bootstrap框架將導航獨立出來成為一個導航組件,根據不同的版本,可以找到對應的源碼:
☑ LESS版本:對應的源文件是navs.less
☑ Sass版本:對應的源文件是_navs.scss
☑ 編譯後版本:對應源碼是bootstrap.css文件第3450行~第3641行
導航基礎樣式
Bootstrap框架中制作導航條主要通過“.nav”樣式。默認的“.nav”樣式不提供默認的導航樣式,必須附加另外一個樣式才會有效,比如“nav-tabs”、“nav-pills”之類。比如一個tab導航條的例子,他的實現方法就是為ul標簽加入.nav和nav-tabs兩個類樣式。
<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行/
.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、導航(標簽形tab導航)
標簽形導航,也稱為選項卡導航。特別是在很多內容分塊顯示的時,使用這種選項卡來分組十分適合。
標簽形導航是通過“nav-tabs”樣式來實現。在制作標簽形導航時需要在原導航“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>
運行的效果如下所示:
實現原理非常的簡單,將菜單項(li)按塊顯示,並且讓他們在同一水平上排列,然後定義非高亮菜單的樣式和鼠標懸浮效果。代碼如下:
/源碼請查閱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; }
其實上例的效果和我們平時看到的選項卡效果並不一致。一般情況之下,選項卡教會有一個當前選中項。其實在Bootstrap框架也相應提供了。假設我們想讓“Home”項為當前選中項,只需要在其標簽上添加類名“class="active"”即可:
<ul class="nav nav-tabs"> <li class="active"><a href="##">Home</a></li> … </ul>
運行效果如下:
對應樣式代碼如下:
/源碼請查閱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; }
除了當前項之外,有的選項卡還帶有禁用狀態,實現這樣的效果,只需要在標簽項上添加“class=”disabled””即可:
<ul class="nav nav-tabs"> <li class="active"><a href="##">Home</a></li> … <li class="disabled"><a href="##">Responsive</a></li> </ul>
運行效果如下:
實現這個效果的樣式,在默認樣式“.nav”中就帶有:
/源碼請查看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; }
注意:我們看到的選項卡效果,點擊菜單項就可以切換內容,如果要實現這樣的效果需要配合js插件,這部分將在後面的博客中會介紹。
3、導航(膠囊形(pills)導航)
膠囊形(pills)導航聽起來有點別扭,因為其外形看起來有點像膠囊形狀。但其更像我們平時看到的大眾形導航。當前項高亮顯示,並帶有圓角效果。其實現方法和“nav-tabs”類似,同樣的結構,只需要把類名“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>
實現效果樣式代碼:
/源碼請查閱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、導航(垂直堆疊的導航)
在實際運用當中,除了水平導航之外,還有垂直導航,就類似前面介紹的垂直排列按鈕一樣。制作垂直堆疊導航只需要在“nav-pills”的基礎上添加一個“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>
運行效果如下:
垂直堆疊導航與膠囊形導航相比,主要是讓導航項不浮動,讓其垂直排列,然後給相鄰導航項留有一定的間距:
/源碼請查閱bootstrap.css文件第3578行~第3584行/
.nav-stacked > li { float: none; } .nav-stacked > li + li { margin-top: 2px; margin-left: 0; }
大家是否還記得,在下拉菜單一節中,下拉菜單組與組之間有一個分隔線。其實在垂直堆疊導航也具有這樣的效果,只需要添加在導航項之間添加“<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>
運行效果如下:
實現樣式:
/源碼請查閱bootstrap.css文件第3485行~3490行/
.nav .nav-divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; }
或許你會問,如果我在”nav-tabs”上添加“nav-stacked”是不是也能實現垂直的標簽選項導航呢?答案是:在bootstrap V2.x版本可以,但在Bootstrap V3.x版本將這個效果取消了,可能作者覺得垂直選擇項並不太常見,也不美觀吧。
4、自適應導航(使用)
自適應導航指的是導航占據容器全部寬度,而且菜單項可以像表格的單元格一樣自適應寬度。自適應導航和前面使用“btn-group-justified”制作的自適應按鈕組是一樣的。只不過在制作自適應導航時更換了另一個類名“nav-justified”。當然他需要和“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>
運行效果如下:
自適應導航(實現原理)
實現原理並不難,列表(<ul>)上設置寬度為“100%”,然後每個菜單項(<li>)設置了“display:table-cell”,讓列表項以模擬表格單元格的形式顯示:
/源碼請查閱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; } }
這裡有一個媒體查詢條件:“@media (min-width:768px){…}”表示自適應導航僅在浏覽器視窗寬度大於768px才能按上圖風格顯示。當你的浏覽器視窗寬度小於768px的時候,將會按下圖的風格展示:
從上圖效果可以得知,“nav-tabs”和“nav-justified”配合在一起使用,也就是自適應選項卡導航,浏覽器視窗寬度小於768px時,在樣式上做了另外的處理。
/源碼請查閱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、導航加下拉菜單(二級導航)
前面介紹的都是使用Bootstrap框架制作一級導航,但很多時候,在Web頁面中是離不開二級導航的效果。那麼在Bootstrap框架中制作二級導航就更容易了。只需要將li當作父容器,使用類名“dropdown”,同時在li中嵌套另一個列表ul,使用前面介紹下拉菜單的方法就可以:
<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="##">關於我們</a></li> </ul>
運行效果如下:
通過浏覽器調試工具,不難發現,點擊有二級導航的菜單項,會自動添加“open”類名,再次點擊就會刪除添加的“open”類名:
簡單點來說,就是依靠這個類名來控制二級導航顯示與否,並且設置了背景色和邊框:
/源碼查看bootstrap.css文件第3479行~3484行/
.nav .open > a, .nav .open >a:hover, .nav .open >a:focus { background-color: #eee; border-color: #428bca; }
大家回憶一下,在制作下拉菜單時,可以用分隔線,那麼在二級導航中是否可以呢?我們一起來看看:
不用再說太多,只需要添加“<li class=”nav-divider”></li>”這樣的一個空標簽就可以了。
運行效果如下:
/源碼請查看bootstrap.css文件第3485行~第3490行/
.nav .nav-divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; }
6、面包屑式導航
面包屑(Breadcrumb)一般用於導航,主要是起的作用是告訴用戶現在所處頁面的位置(當前位置)。在Bootstrap框架中面包屑也是一個獨立模塊組件:
使用方法:
使用方式就很簡單,為ol加入breadcrumb類:
<ol class="breadcrumb"> <li><a href="#">首頁</a></li> <li><a href="#">我的書</a></li> <li class="active">《圖解CSS3》</li> </ol>
想想看,當前菜單項是不需要鏈接的,所以也就不用a標簽了。
實現原理:
看來不錯吧!作者是使用li+li:before實現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; }
如果大家還想深入學習,可以點擊這裡進行學習,再為大家附兩個精彩的專題:Bootstrap學習教程 Bootstrap實戰教程
以上就是本文的全部內容,希望對大家的學習有所幫助。