Bootstrap源码解读下拉菜单(4)


Posted in Javascript onDecember 23, 2016

源码解读Bootstrap下拉菜单

基本用法

在使用Bootstrap框架的下拉菜单时,必须调用Bootstrap框架提供的bootstrap.js文件。因为Bootstrap的组件交互效果都是依赖于jQuery库写的插件,所以在使用bootstrap.min.js之前一定要先加载jquery.min.js才会生效果。
使用方法如下:
1. 使用一个名为“dropdown”的容器包裹了整个下拉菜单元素:<div class="dropdown"></div>
2. 使用一个<button>按钮做为父菜单,并且定义类名“dropdown-toggle”和自定义“data-toggle”属性,且值必须和最外容器类名一致:data-toggle=”dropdown”
3. 下拉菜单项使用一个ul列表,并且定义一个类名为“dropdown-menu”:<ul class="dropdown-menu">

完整如下:

<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框架中的下拉菜单组件,其下拉菜单项默认是隐藏的,因为“dropdown-menu”默认样式设置了“display:none”。实现源码如下:

.dropdown-menu {
 position: absolute;
 top: 100%;
 left: 0;
 z-index: 1000;
 display: none;
 float: left;
 min-width: 160px;
 padding: 5px 0;
 margin: 2px 0 0;
 font-size: 14px;
 text-align: left;
 list-style: none;
 background-color: #fff;
 -webkit-background-clip: padding-box;
   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”又会被移除。实现源码如下:

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

下拉分隔线

下拉菜单还提供了下拉分隔线,假设下拉菜单有两个组,那么组与组之间可以通过添加一个空的<li>,并且给这个<li>添加类名“divider”来实现添加下拉分隔线的功能。
例如: <li role="presentation" class="divider"></li>
实现源码如下:

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

菜单标题

组与组之间可以添加一个<li>,并添加类名“dropdown-header”可以给每个组添加一个头部(标题)。
例如:<li role="presentation" class="dropdown-header">第一部分菜单头部</li>
实现源码:

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

对齐方式

下拉菜单默认是左对齐,如果你想让下拉菜单相对于父容器右对齐时,可以在“dropdown-menu”上添加一个“pull-right”或者“dropdown-menu-right”类名,
例如:<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dropdownMenu1">
实现源码:

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

不过这样的话,下拉列表会跑到页面的最右边去,我们显然不希望这样,所以一定要为.dropdown添加float:left的css样式:

.dropdown{
 float: left;
}

另外,还有个类名“dropdown-menu-left”,其实就是下拉菜单与父容器左边对齐的默认效果,

实现源码:

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

菜单项状态

下拉菜单项的默认的状态有悬浮状态(:hover)和焦点状态(:focus),实现源码如下:

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

另外还有当前状态(.active)和禁用状态(.disabled)。这两种状态使用方法只需要在对应的菜单项<li>上添加对应的类名“active”或“disabled”。

实现源码如下:

.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基础教程 专题中,欢迎点击学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 一些用法小结
Sep 11 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
jquery日历控件实现方法分享
Mar 07 Javascript
js中的for如何实现foreach中的遍历
May 31 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
表单验证插件Validation应用的实例讲解
Oct 10 Javascript
基于jQuery实现滚动刷新效果
Jan 09 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
Feb 15 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
Jul 12 Javascript
jquery dataview数据视图插件使用方法
Dec 23 #Javascript
基于vue的下拉刷新指令和滚动刷新指令
Dec 23 #Javascript
Bootstrap源码解读按钮(5)
Dec 23 #Javascript
基于bootstrap的选择框插件icheck
Dec 23 #Javascript
基于bootstrap的文件上传控件bootstrap fileinput
Dec 23 #Javascript
Bootstrap CSS使用方法
Dec 23 #Javascript
Bootstrap源码解读导航(6)
Dec 23 #Javascript
You might like
PHP获取网站域名和地址的代码
2008/08/17 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
Python中的filter()函数的用法
2015/04/27 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
python WindowsError的错误代码详解
2017/07/23 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
人力资源专业推荐信
2013/11/29 职场文书
电焊工岗位职责
2014/03/06 职场文书
合作协议书怎么写
2014/04/18 职场文书
工作岗位说明书模板
2014/05/09 职场文书
派出所所长先进事迹
2014/05/19 职场文书
自我管理的活动方案
2014/08/25 职场文书
简历自我评价优缺点
2015/03/11 职场文书