Bootstrap每天必學(xué)之導(dǎo)航
1、導(dǎo)航(基礎(chǔ)樣式)
導(dǎo)航對于一位前端人員來說并不陌生??梢哉f導(dǎo)航是一個網(wǎng)站重要的元素組件之一,可以便于用戶查找網(wǎng)站所提供的各項(xiàng)功能服務(wù)。導(dǎo)航的制作方法也是千奇百怪,五花八門。在這一節(jié)中將向大家介紹如何使用Bootstrap框架制作各式各樣的導(dǎo)航。
在Bootstrap框架將導(dǎo)航獨(dú)立出來成為一個導(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)航條的例子,他的實(shí)現(xiàn)方法就是為ul標(biāo)簽加入.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、導(dǎo)航(標(biāo)簽形tab導(dǎo)航)
標(biāo)簽形導(dǎo)航,也稱為選項(xiàng)卡導(dǎo)航。特別是在很多內(nèi)容分塊顯示的時,使用這種選項(xiàng)卡來分組十分適合。
標(biāo)簽形導(dǎo)航是通過“nav-tabs”樣式來實(shí)現(xiàn)。在制作標(biāo)簽形導(dǎo)航時需要在原導(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)原理非常的簡單,將菜單項(xiàng)(li)按塊顯示,并且讓他們在同一水平上排列,然后定義非高亮菜單的樣式和鼠標(biāo)懸浮效果。代碼如下:
/源碼請查閱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í)上例的效果和我們平時看到的選項(xiàng)卡效果并不一致。一般情況之下,選項(xiàng)卡教會有一個當(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)行效果如下:
對應(yī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)這個效果的樣式,在默認(rèn)樣式“.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; }
注意:我們看到的選項(xiàng)卡效果,點(diǎn)擊菜單項(xiàng)就可以切換內(nèi)容,如果要實(shí)現(xiàn)這樣的效果需要配合js插件,這部分將在后面的博客中會介紹。
3、導(dǎo)航(膠囊形(pills)導(dǎo)航)
膠囊形(pills)導(dǎo)航聽起來有點(diǎn)別扭,因?yàn)槠渫庑慰雌饋碛悬c(diǎn)像膠囊形狀。但其更像我們平時看到的大眾形導(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)效果樣式代碼:
/源碼請查閱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ǔ)上添加一個“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ǎo)航項(xiàng)留有一定的間距:
/源碼請查閱bootstrap.css文件第3578行~第3584行/
.nav-stacked > li { float: none; } .nav-stacked > li + li { margin-top: 2px; margin-left: 0; }
大家是否還記得,在下拉菜單一節(jié)中,下拉菜單組與組之間有一個分隔線。其實(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)樣式:
/源碼請查閱bootstrap.css文件第3485行~3490行/
.nav .nav-divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; }
或許你會問,如果我在”nav-tabs”上添加“nav-stacked”是不是也能實(shí)現(xiàn)垂直的標(biāo)簽選項(xiàng)導(dǎo)航呢?答案是:在bootstrap V2.x版本可以,但在Bootstrap V3.x版本將這個效果取消了,可能作者覺得垂直選擇項(xiàng)并不太常見,也不美觀吧。
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)按鈕組是一樣的。只不過在制作自適應(yīng)導(dǎo)航時更換了另一個類名“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%”,然后每個菜單項(xiàng)(<li>)設(shè)置了“display:table-cell”,讓列表項(xià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; } }
這里有一個媒體查詢條件:“@media (min-width:768px){…}”表示自適應(yīng)導(dǎo)航僅在瀏覽器視窗寬度大于768px才能按上圖風(fēng)格顯示。當(dāng)你的瀏覽器視窗寬度小于768px的時候,將會按下圖的風(fēng)格展示:
從上圖效果可以得知,“nav-tabs”和“nav-justified”配合在一起使用,也就是自適應(yīng)選項(xiàng)卡導(dǎo)航,瀏覽器視窗寬度小于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、導(dǎo)航加下拉菜單(二級導(dǎo)航)
前面介紹的都是使用Bootstrap框架制作一級導(dǎo)航,但很多時候,在Web頁面中是離不開二級導(dǎo)航的效果。那么在Bootstrap框架中制作二級導(dǎo)航就更容易了。只需要將li當(dāng)作父容器,使用類名“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="##">關(guān)于我們</a></li> </ul>
運(yùn)行效果如下:
通過瀏覽器調(diào)試工具,不難發(fā)現(xiàn),點(diǎn)擊有二級導(dǎo)航的菜單項(xiàng),會自動添加“open”類名,再次點(diǎn)擊就會刪除添加的“open”類名:
簡單點(diǎn)來說,就是依靠這個類名來控制二級導(dǎo)航顯示與否,并且設(shè)置了背景色和邊框:
/源碼查看bootstrap.css文件第3479行~3484行/
.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)簽就可以了。
運(yùn)行效果如下:
/源碼請查看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)在所處頁面的位置(當(dāng)前位置)。在Bootstrap框架中面包屑也是一個獨(dú)立模塊組件:
- LESS版本:對應(yīng)源文件breadcrumbs.less
- Sass版本:對應(yīng)源文件_breadcrumbs.scss
- 編譯出來的版本:源碼對應(yīng)bootstrap.css文件第4112行~第4129行
使用方法:
使用方式就很簡單,為ol加入breadcrumb類:
<ol class="breadcrumb"> <li><a href="#">首頁</a></li> <li><a href="#">我的書</a></li> <li class="active">《圖解CSS3》</li> </ol>
想想看,當(dāng)前菜單項(xiàng)是不需要鏈接的,所以也就不用a標(biāo)簽了。
實(shí)現(xiàn)原理:
看來不錯吧!作者是使用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í),再為大家附兩個精彩的專題:Bootstrap學(xué)習(xí)教程 Bootstrap實(shí)戰(zhàn)教程
以上就是本文的全部內(nèi)容,希望對大家的學(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多級導(dǎo)航欄(級聯(lián)導(dǎo)航)的實(shí)現(xiàn)代碼
- Bootstrap每天必學(xué)之響應(yīng)式導(dǎo)航、輪播圖
- Bootstrap導(dǎo)航中表單簡單實(shí)現(xiàn)代碼
相關(guān)文章
基于JavaScript編寫一個圖片轉(zhuǎn)PDF轉(zhuǎn)換器
本文為大家介紹了一個簡單的 JavaScript 項(xiàng)目,可以將圖片轉(zhuǎn)換為 PDF 文件。你可以從本地選擇任何一張圖片,只需點(diǎn)擊一下即可將其轉(zhuǎn)換為 PDF 文件,感興趣的可以動手嘗試一下2022-07-07js實(shí)現(xiàn)連個數(shù)字相加而不是拼接的方法
這篇文章主要介紹了js如何實(shí)現(xiàn)連個數(shù)字相加而不是拼接,需要的朋友可以參考下2014-02-02JavaScript通過RegExp使用正則表達(dá)式過程詳解
正則表達(dá)式用于定義一些字符串的規(guī)則。計(jì)算機(jī)可以根據(jù)正則表達(dá)式,來檢查一個字符串是否符合指定的規(guī)則,或者將字符串中符合規(guī)則的內(nèi)容提取出來。RegExp的意思是 Regular expression。使用typeof檢查正則對象,會返回object2023-03-03分離與繼承的思想實(shí)現(xiàn)圖片上傳后的預(yù)覽功能:ImageUploadView
本文要介紹的是網(wǎng)頁中常見的圖片上傳后直接在頁面生成小圖預(yù)覽的實(shí)現(xiàn)思路,考慮到該功能有一定的適用性,于是把相關(guān)的邏輯封裝成了一個ImageUploadView組件,實(shí)際使用效果可查看下一段的git效果圖2016-04-04url參數(shù)中有+、空格、=、%、&、#等特殊符號的問題解決
url參數(shù)中有+、空格、=、%、&、#等特殊符號的問題解決,需要的朋友可以參考一下2013-05-05關(guān)于js獲取radio和select的屬性并控制的代碼
對于聯(lián)動菜單大家都不會陌生了,但是這還是我第一次寫聯(lián)動的了。原理很簡單,但是自己寫起來就感覺還是有點(diǎn)難度的了2011-05-05