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 相关文章推荐
javascript奇异的arguments分析
Oct 20 Javascript
js加强的经典分页实例
Mar 15 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
JavaScript实现添加、查找、删除元素
Jul 02 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
JavaScript利用fetch实现异步请求的方法实例
Jul 26 Javascript
微信小程序授权获取用户详细信息openid的实例详解
Sep 20 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
Jul 10 jQuery
Nautil 中使用双向数据绑定的实现
Oct 02 Javascript
jquery插件实现轮播图效果
Oct 19 jQuery
微信小程序弹窗禁止页面滚动的实现代码
Dec 30 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
php 分库分表hash算法
2009/11/12 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
jquery异步循环获取功能实现代码
2010/09/19 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
xml转json的js代码
2012/08/28 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
jquery ui对话框实例代码
2013/05/10 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
浅析vue深复制
2018/01/29 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
videocapture库制作python视频高速传输程序
2013/12/23 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
python 常用的基础函数
2018/07/10 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
招聘单位介绍信
2014/01/14 职场文书
经费申请报告
2015/05/15 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js