Bootstrap每天必学之导航


Posted in Javascript onNovember 26, 2015

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每天必学之导航

/源码请查阅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>

运行的效果如下所示:

Bootstrap每天必学之导航

实现原理非常的简单,将菜单项(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每天必学之导航

对应样式代码如下:

/源码请查阅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>

运行效果如下:

Bootstrap每天必学之导航

实现这个效果的样式,在默认样式“.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每天必学之导航

垂直堆叠导航与胶囊形导航相比,主要是让导航项不浮动,让其垂直排列,然后给相邻导航项留有一定的间距:

/源码请查阅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每天必学之导航

实现样式:

/源码请查阅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>

运行效果如下:

Bootstrap每天必学之导航

自适应导航(实现原理)

实现原理并不难,列表(<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的时候,将会按下图的风格展示:

Bootstrap每天必学之导航

从上图效果可以得知,“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>

运行效果如下:

Bootstrap每天必学之导航

通过浏览器调试工具,不难发现,点击有二级导航的菜单项,会自动添加“open”类名,再次点击就会删除添加的“open”类名:

Bootstrap每天必学之导航

简单点来说,就是依靠这个类名来控制二级导航显示与否,并且设置了背景色和边框:

/源码查看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每天必学之导航

/源码请查看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标签了。

Bootstrap每天必学之导航

实现原理:

看来不错吧!作者是使用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实战教程

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

Javascript 相关文章推荐
基于jquery的jqDnR拖拽溢出的修改
Feb 12 Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
Dec 12 Javascript
javascript特殊日历控件分享
Mar 07 Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 Javascript
利用JS如何计算字符串所占字节数示例代码
Sep 13 Javascript
vue 指定组件缓存实例详解
Apr 01 Javascript
angular.js实现列表orderby排序的方法
Oct 02 Javascript
Seajs源码详解分析
Apr 02 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 Javascript
浅谈javascript错误处理
Aug 11 Javascript
解决layer.open后laydate失效的问题
Sep 06 Javascript
js过滤HTML标签完整实例
Nov 26 #Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 #Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
Nov 26 #Javascript
Bootstrap每天必学之按钮
Nov 26 #Javascript
学习JavaScript设计模式(多态)
Nov 25 #Javascript
创建自己的jquery表格插件
Nov 25 #Javascript
一不小心就做错的JS闭包面试题
Nov 25 #Javascript
You might like
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
php简单中奖算法(实例)
2017/08/15 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
html下载本地
2006/06/19 Javascript
用ADODB.Stream转换
2007/01/22 Javascript
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
Python操作MySQL简单实现方法
2015/01/26 Python
python决策树之C4.5算法详解
2017/12/20 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
python 实现的车牌识别项目
2021/01/25 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
运动会通讯稿500字
2014/02/20 职场文书
七夕活动策划方案
2014/08/16 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
Python装饰器详细介绍
2022/03/25 Python
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python