首頁  >  文章  >  web前端  >  Bootstrap每天必學之導航_javascript技巧

Bootstrap每天必學之導航_javascript技巧

WBOY
WBOY原創
2016-05-16 15:29:37855瀏覽

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;
}

大家是否还记得,在下拉菜单一节中,下拉菜单组与组之间有一个分隔线。其实在垂直堆叠导航也具有这样的效果,只需要添加在导航项之间添加“fb75b957dfbba076c236b53c0f93301fbed06894275b65c1ab86501b08a632eb”即可:

<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>

运行效果如下:

自适应导航(实现原理)

实现原理并不难,列表(ff6d136ddc5fdfeffaf53ff6ee95f185)上设置宽度为“100%”,然后每个菜单项(25edfb22a4f469ecb59f1190150159c6)设置了“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;
}

大家回忆一下,在制作下拉菜单时,可以用分隔线,那么在二级导航中是否可以呢?我们一起来看看:

不用再说太多,只需要添加“fb75b957dfbba076c236b53c0f93301fbed06894275b65c1ab86501b08a632eb”这样的一个空标签就可以了。

运行效果如下:

/源码请查看bootstrap.css文件第3485行~第3490行/

.nav .nav-divider {
 height: 1px;
 margin: 9px 0;
 overflow: hidden;
 background-color: #e5e5e5;
}

6、面包屑式导航

面包屑(Breadcrumb)一般用于导航,主要是起的作用是告诉用户现在所处页面的位置(当前位置)。在Bootstrap框架中面包屑也是一个独立模块组件:

  • LESS版本:对应源文件breadcrumbs.less
  • Sass版本:对应源文件_breadcrumbs.scss
  • 编译出来的版本:源码对应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>

想想看,当前菜单项是不需要链接的,所以也就不用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;
}

 以上就是本文的全部内容,希望对大家的学习有所帮助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn