Bootstrap每天必学之下拉菜单


Posted in Javascript onNovember 25, 2015

一、下拉菜单(基本用法)

小伙伴们注意,在Bootstrap框架中的下拉菜单组件是一个独立的组件,根据不同的版本,它对应的文件:

☑ LESS版本:对应的源码文件为 dropdowns.less

☑ Sass版本:对应的源码文件为 _dropdowns.sass

☑ 编译后的Bootstrap版本:查看bootstrap.css文件第3004行~第3130行

在使用Bootstrap框架的下拉菜单时,必须调用Bootstrap框架提供的bootstrap.js文件。当然,如果你使用的是未编译版本,在js文件夹下你能找到一个名为“dropdown.js”的文件。你也可以调用这个js文件。不过在我们的教程中,我们统一调用压缩好的“bootstrap.min.js”文件:

<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>

特别声明:因为Bootstrap的组件交互效果都是依赖于jQuery库写的插件,所以在使用bootstrap.min.js之前一定要先加载jquery.min.js才会生效果。

我们先来看官网上一个简单的示例:

<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
下拉菜单
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li>
 …
 <li role="presentation" class="divider"></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li>
</ul>
</div>

使用方法:

在使用Bootstrap框架中的下拉菜单组件时,其结构运用的正确与否非常的重要,如果结构和类名未使用正确,直接影响组件是否能正常运用。我们来简单的看看:

1、使用一个名为“dropdown”的容器包裹了整个下拉菜单元素,示例中为:

2、使用了一个<button>按钮做为父菜单,并且定义类名“dropdown-toggle”和自定义“data-toggle”属性,且值必须和最外容器类名一致,此示例为:

data-toggle="dropdown"

3、下拉菜单项使用一个ul列表,并且定义一个类名为“dropdown-menu”,此示例为:

<ul class="dropdown-menu">

示例

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>下拉菜单</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
</head>
<body>

<div class="dropdown">
 <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
 选择你喜欢的水果
 <span class="caret"></span>
 </button>
 <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">苹果</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">香蕉</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">梨</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">桃</a></li>
 </ul>
</div> 
 <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
 <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> 
</body>
</html>

Bootstrap每天必学之下拉菜单

二、下拉菜单(原理分析)

Bootstrap框架中的下拉菜单组件,其下拉菜单项默认是隐藏的,如下所示:

Bootstrap每天必学之下拉菜单

因为“dropdown-menu”默认样式设置了“display:none”,其详细源码请查看bootstrap.css文件第3010行~第3029行:

.dropdown-menu {
 position: absolute;/*设置绝对定位,相对于父元素div.dropdown*/
 top: 100%;/*让下拉菜单项在父菜单项底部,如果父元素不设置相对定位,该元素相对于body元素*/
 left: 0;
 z-index: 1000;/*让下拉菜单项不被其他元素遮盖住*/

 display: none;/*默认隐藏下拉菜单项*/

 float: left;
 min-width: 160px;
 padding: 5px 0;
 margin: 2px 0 0;
 font-size: 14px;
 list-style: none;
 background-color: #fff;
 background-clip: padding-box;
 border: 1px solid #ccc;
 border: 1px solid rgba(0, 0, 0, .15);
 border-radius: 4px;
 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
 box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
}

当用户点击父菜单项时,下拉菜单将会被显示出来,当用户再次点击时,下拉菜单将继续隐藏。

原理分析:

现在我们来分析一下实现原理,非常简单,通过js技术手段,给父容器“div.dropdown”添加或移除类名“open”来控制下拉菜单显示或隐藏。也就是说,默认情况,“div.dropdown”没有类名“open”,当用户第一次点击时,“div.dropdown”会添加类名“open”;当用户再次点击时,“div.dropdown”容器中的类名“open”又会被移除。我们可以通过浏览器的firebug查看整个过程:

默认情况:

Bootstrap每天必学之下拉菜单

用户第一次点击:

Bootstrap每天必学之下拉菜单

用户再次点击:

Bootstrap每天必学之下拉菜单

在bootstrap.css文件第3076行~第3078行,我们可以很容易发现:

.open > .dropdown-menu {
 display: block;
}

三、下拉菜单(下拉分隔线)

在Bootstrap框架中的下拉菜单还提供了下拉分隔线,假设下拉菜单有两个组,那么组与组之间可以通过添加一个空的<li>,并且给这个<li>添加类名“divider”来实现添加下拉分隔线的功能。对应的样式代码:

/源码bootstrap.css文件第3034行~第3039行/

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

示例:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>下拉分隔线</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="style.css">
</head>

<body>
 <div class="dropdown">
 <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
 食物
 <span class="caret"></span>
 </button>
 <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">

 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">芹菜</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">萝卜</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">茄子</a></li>
 <li role="presentation" class ="divider"></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">米饭</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">馒头</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">面条</a></li>
 </ul>
</div> 
 <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
 <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> 
</body>
</html>

效果如下:

Bootstrap每天必学之下拉菜单

四、下拉菜单(菜单标题)

上一小节讲解通过添加“divider”可以将下拉菜单分组,为了让这个分组更明显,还可以给每个组添加一个头部(标题)。如下:

<li role="presentation" class="dropdown-header">第一部分菜单头部</li>

对应的样式如下:

/查看bootstrap.css文件第3090行~第3096行/

.dropdown-header {
 display: block;
 padding: 3px 20px;
 font-size: 12px;
 line-height: 1.42857143;
 color: #999;
}

示例

<div class="dropdown">
 <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
 食物
 <span class="caret"></span>
 </button>
 <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
 <li role="presentation" class="dropdown-header">蔬菜</li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">芹菜</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">萝卜</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">茄子</a></li>
 <li role="presentation" class="divider"></li>
 <li role="presentation" class="dropdown-header">主食</li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">米饭</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">馒头</a></li>
 <li role="presentation"><a role="menuitem" tabindex="-1" href="#">面条</a></li>
 </ul>
</div>

运行效果如下:

Bootstrap每天必学之下拉菜单

五、下拉菜单(对齐方式)

实现右对齐方法:

Bootstrap框架中下拉菜单默认是左对齐,如果你想让下拉菜单相对于父容器右对齐时,可以在“dropdown-menu”上添加一个“pull-right”或者“dropdown-menu-right”类名,如下所示:

<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dropdownMenu1">

上面代码中的“pull-right”类可以用“dropdown-menu-right”代替,两个类的作用是一样的,可从下面的源代码中看出。

实现原理:

对应的样式如下:

/源码请查看bootstrap.css文件第3030行~第3033行和3082行~第3085行/

.dropdown-menu.pull-right {
 right: 0;
 left: auto;
}
.dropdown-menu-right {
 right: 0;
 left: auto;
}

同时一定要为.dropdown添加float:leftcss样式。

.dropdown{
 float: left;
}

运行效果如下所示:

Bootstrap每天必学之下拉菜单

下拉菜单与父容器左边对齐:

与此同时,还有一个类名刚好与“dropdown-menu-right”相反的类名“dropdown-menu-left”,其效果就是让下拉菜单与父容器左边对齐,其实就是默认效果。

/请查看bootstrap.css文件第3086行~第3089行/

.dropdown-menu-left {
 right: auto;
 left: 0;
}

六、下拉菜单(菜单项状态)

下拉菜单项的默认的状态(不用设置)有悬浮状态(:hover)和焦点状态(:focus):

/查看bootstrap.css文件第3049行~第3054行/

.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
 color: #262626;
 text-decoration: none;
 background-color: #f5f5f5;
}

下拉菜单项除了上面两种状态,还有当前状态(.active)和禁用状态(.disabled)。这两种状态使用方法只需要在对应的菜单项上添加对应的类名:

<div class="dropdown">
 <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
 下拉菜单
 <span class="caret"></span>
 </button>
 <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
 <li role="presentation" class="active"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li>
 ….
 <li role="presentation" class="disabled"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li>
 </ul>
</div>

运行效果如下:

Bootstrap每天必学之下拉菜单对应的样式代码也非常简单:

/请查看bootstrap.css文件第3055行~第3075行/

.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
 color: #fff;
 text-decoration: none;
 background-color: #428bca;
 outline: 0;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
 color: #999;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
 text-decoration: none;
 cursor: not-allowed;
 background-color: transparent;
 background-image: none;
 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}

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

本文系列教程整理到:Bootstrap基础教程 专题中,欢迎点击学习。

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

Javascript 相关文章推荐
js Date自定义函数 延迟脚本执行
Mar 10 Javascript
JavaScript 面向对象的之私有成员和公开成员
May 04 Javascript
JavaScript—window对象使用示例
Dec 09 Javascript
javascript中$(function() {});写与不写有哪些区别
Aug 10 Javascript
easyui Droppable组件实现放置特效
Aug 19 Javascript
使用jQuery监听DOM元素大小变化
Feb 24 Javascript
jquery拼接ajax 的json和字符串拼接的方法
Mar 11 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
Apr 17 Javascript
Angular 4环境准备与Angular cli创建项目详解
May 27 Javascript
详解angular笔记路由之angular-router
Sep 12 Javascript
vue 粒子特效的示例代码
Sep 19 Javascript
js实现手表表盘时钟与圆周运动
Sep 18 Javascript
使用Javascript写的2048小游戏
Nov 25 #Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
Nov 25 #Javascript
Bootstrap每天必学之栅格系统(布局)
Nov 25 #Javascript
jQuery实现宽屏图片轮播实例教程
Nov 24 #Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 #Javascript
jquery中checkbox使用方法简单实例演示
Nov 24 #Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 #Javascript
You might like
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
基于JQuery的密码强度验证代码
2010/03/01 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
2020/08/27 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
python简单实现获取当前时间
2016/08/27 Python
python简单操作excle的方法
2018/09/12 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
python如何制作英文字典
2019/06/25 Python
解决Mac下使用python的坑
2019/08/13 Python
django之自定义软删除Model的方法
2019/08/14 Python
基于python3的socket聊天编程
2020/02/17 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
在服务器上安装python3.8.2环境的教程详解
2020/04/26 Python
学习之星事迹材料
2014/05/17 职场文书
党员公开承诺书内容
2014/05/20 职场文书
晚会开幕词范文
2016/03/04 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电