Bootstrap每天必学之导航组件


Posted in Javascript onApril 25, 2016

在bootstrap框架中将导航独立出来成为一个导航组件,根据不同的版本,可以找到相应的源码:

LESS:  navs.less

SASS:  _navs.scss 

标签形导航,也称选项卡导航

标签形导航是通过.nav-tabs样式来实现的,在制作标签形导航时需要在原导航类名为.nav的容器上追加类名.nav-tabs

<ul class="nav nav-tabs">
  <li><a href="#">导航标题1</a></li>
  <li><a href="#">导航标题2</a></li>
  <li><a href="#">导航标题3</a></li>
  <li><a href="#">导航标题4</a></li>
  <li><a href="#">导航标题5</a></li>
 </ul>

原理:

将菜单项li按块显示,并让它们排列在同一水平上,然后定义非高亮菜单的样式和鼠标悬浮效果

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

一般情况下,选项卡都会有个当前选中项,只需要在其(li)标签上添加类名.active即可

<ul class="nav nav-tabs">
  <li class="active"><a href="#">导航标题1</a></li>
  <li><a href="#">导航标题2</a></li>
  <li><a href="#">导航标题3</a></li>
  <li><a href="#">导航标题4</a></li>
  <li><a href="#">导航标题5</a></li>
</ul>
.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;
}

除了当前选项外,有的选项卡还带有禁用状态,实现这样的效果,只需在标签项上添加类名disabled

.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插件

胶囊形(pills)导航

当前高亮显示,并带圆角效果,其实现方法和选项卡导航类似,同样的结构,只需将类名.nav-tabs换成类名.nav-pills

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

垂直堆叠的导航

除了水平导航,还有垂直导航,制作垂直堆叠的导航只需在.nav-pills的基础上追加类名.nav-stacked

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

.nav-stacked > li {
 float: none;
}
.nav-stacked > li + li {
 margin-top: 2px;
 margin-left: 0;
}

<ul class="nav nav-pills nav-stacked">
  <li><a href="#">导航标题0</a></li>
  <li class="active"><a href="#">导航标题1</a></li>
  <li><a href="#">导航标题2</a></li>
  <li><a href="#">导航标题3</a></li>
  <li><a href="#">导航标题4</a></li>
  <li class="disabled"><a href="#">导航标题5</a></li>
</ul>

垂直堆叠导航像下拉菜单组与组间有一分割线一样,导航项之间也有分割线这样的效果,只需在导航项之间添加<li class=”divider”></li>

<ul class="nav nav-pills nav-stacked">
  <li ><a href="#">导航标题0</a></li>
  <li class="active"><a href="#">导航标题1</a></li>
  <li><a href="#">导航标题2</a></li>
  <li class="nav-divider"></li>
  <li><a href="#">导航标题3</a></li>
  <li><a href="#">导航标题4</a></li>
  <li class="disabled"><a href="#">导航标题5</a></li>
 </ul>
.nav .nav-divider {
height: 1px;
margin: 9px 0;
overflow: hidden;
background-color: #e5e5e5;
}

自适应导航

自适应导航指的是导航占据容器全部宽度,而且菜单项可以像表格的单元格一样自适应宽度,自适应导航和之前提到的.btn-group-justified制作的自适应按钮组件一样,不过在制作自适应导航时类名.nav-justified需和.nav-tabs或.nav-pills配合一起使用

原理:

列表ul上设置宽度为100%,然后每个菜单项li设置了display:table-cell,让列表模拟表格单元格的形式显示;

.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时,在样式上做了另外的处理

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

导航加下拉菜单(二级导航)

制做二级导航只需将li当做父容器,使用类名.dropdown,同时在li中嵌套另一个ul列表

<ul class="nav nav-tabs">
  <li><a href="#">导航菜单1</a></li>
  <li><a href="#">导航菜单2</a></li>
  <li><a href="#">导航菜单3</a></li>
  <li><a href="#">导航菜单4</a></li>
  <li class="dropdown">
   <a class="dropdown-toggle"data-toggle="dropdown">
    导航菜单5
    <span class="caret"></span>
   </a>
   <ul class="dropdown-menu">
    <li><a href="#">下拉菜单1</a></li>
    <li><a href="#">下拉菜单2</a></li>
    <li><a href="#">下拉菜单3</a></li>
    <li><a href="#">下拉菜单4</a></li>
   </ul>
  </li>
  <li><a href="#">导航菜单6</a></li>
 </ul>

面包屑式导航

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

LESS: breadcrumbs.less

SASS:_breadcrumbs.scss

<ol class="breadcrumb">
  <li><a href="#">首页</a></li>
  <li><a href="#">我的书</a></li>
  <li class="active">图解css</li>
 </ol>
.breadcrumb {
padding: 8px 15px;
margin-bottom: 20px;
list-style: none;
background-color: #f5f5f5;
border-radius: 4px;
}

.breadcrumb> li {
display: inline-block;
}

.breadcrumb> li + li:before {
padding: 0 5px;
color: #ccc;
content: "/\00a0";
}

.breadcrumb> .active {
color: #999;
}

上面使用li+li:before实现li与li之间的分隔符,这种方案在低版本ie不支持

如果大家还想深入学习,可以点击这里进行学习,再为大家附两个精彩的专题:Bootstrap学习教程 Bootstrap实战教程

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

Javascript 相关文章推荐
jQuery Ajax之load()方法
Oct 12 Javascript
javascript hasFocus使用实例
Jun 29 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
JavaScript中数组对象的那些自带方法介绍
Mar 12 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
Nov 22 Javascript
快速使用Bootstrap搭建传送带
May 06 Javascript
深入理解Angular中的依赖注入
Jun 26 Javascript
《javascript少儿编程》location术语总结
May 27 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
详解@angular/cli 改变默认启动端口两种方式
Nov 29 Javascript
Angular6使用forRoot() 注册单一实例服务问题
Aug 27 Javascript
node.js中path路径模块的使用方法实例分析
Feb 13 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 #Javascript
javascript断点调试心得分享
Apr 23 #Javascript
基于 Node.js 实现前后端分离
Apr 23 #Javascript
javascript学习指南之回调问题
Apr 23 #Javascript
探寻JavaScript中this指针指向
Apr 23 #Javascript
javascript中this指向详解
Apr 23 #Javascript
JavaScript实现Base64编码转换
Apr 23 #Javascript
You might like
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
python range()函数取反序遍历sequence的方法
2018/06/25 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
python之array赋值技巧分享
2019/11/28 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
python多线程和多进程关系详解
2020/12/14 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
费用会计岗位职责
2014/01/01 职场文书
国培教师自我鉴定
2014/02/12 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
实训报告范文大全
2014/11/04 职场文书
市场督导岗位职责
2015/04/10 职场文书
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL