Bootstrap源码解读模态弹出框(11)


Posted in Javascript onDecember 28, 2016

模态弹出框依赖于Bootstrap提供的js文件,可以单独引入modal.js,也可以直接引入bootstrap.js。

模态弹出框的结构

Bootstrap框架中的模态弹出框,使用了“modal”、“modal-dialog”和“modal-content”样式。
“modal-content”中是弹出窗真正的内容,主要包括三个部分:
弹出框头部,使用“modal-header”,主要包括标题和关闭按钮
弹出框主体,使用“modal-body”,弹出框的主要内容
弹出框脚部,使用“modal-footer”,主要放置操作按钮
例如:

<div class="modal show">
 <div class="modal-dialog">
  <div class="modal-content">
   <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span
      class="sr-only">Close</span></button>
    <h4 class="modal-title">模态弹出窗标题</h4>
   </div>
   <div class="modal-body">
    <p>模态弹出窗主体</p>
   </div>
   <div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
    <button type="button" class="btn btn-primary">确定</button>
   </div>
  </div>
 </div>
</div>

模态弹出窗样式的关键是modal-content。modal-content主要设置了弹出窗的边框、边距、背景色和阴影,实现源码如下:

.modal-content {
 position: relative;
 background-color: #fff;
 -webkit-background-clip: padding-box;
   background-clip: padding-box;
 border: 1px solid #999;
 border: 1px solid rgba(0, 0, 0, .2);
 border-radius: 6px;
 outline: 0;
 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
   box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
}

modal-content中有modal-header、modal-body和modal-footer,主要是控制一些间距的样式。modal-footer一般是用来放置按钮,所以底部还对包含的按钮做了一定的样式处理。实现源码如下:

.modal-header {
 min-height: 16.42857143px;
 padding: 15px;
 border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
 margin-top: -2px;
}
.modal-title {
 margin: 0;
 line-height: 1.42857143;
}
.modal-body {
 position: relative;
 padding: 15px;
}
.modal-footer {
 padding: 15px;
 text-align: right;
 border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
 margin-bottom: 0;
 margin-left: 5px;
}
.modal-footer .btn-group .btn + .btn {
 margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
 margin-left: 0;
}

模态弹出框的实现原理

模态弹出窗是固定在浏览器中的
实现源码如下:

.modal {
 position: fixed;
 top: 0;
 right: 0;
 bottom: 0;
 left: 0;
 z-index: 1040;
 display: none;
 overflow: hidden;
 -webkit-overflow-scrolling: touch;
 outline: 0;
}

在全屏状态下,模态弹出窗宽度是自适应的,而且modal-dialog水平居中。实现源码如下:

.modal-dialog {
 position: relative;
 width: auto;
 margin: 10px;
}

当浏览器视窗大于768px时,模态弹出窗的宽度为600px。实现源码如下:

@media (min-width: 768px) {
 .modal-dialog {
 width: 600px;
 margin: 30px auto;
 }
 .modal-content {
 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
   box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
 }
 .modal-sm {
 width: 300px;
 }
}

模态弹出窗底部有一个透明的黑色蒙层效果,实现源码如下:

.modal-backdrop {
 position: fixed;
 top: 0;
 right: 0;
 bottom: 0;
 left: 0;
 background-color: #000;
}

它有一个过渡动画,从fade到in,把opacity值从0变成了0.5。实现源码如下:

.modal-backdrop.fade {
 filter: alpha(opacity=0);
 opacity: 0;
}
.modal-backdrop.in {
 filter: alpha(opacity=50);
 opacity: .5;
}

声明式触发模态弹出窗

使用button触发

需要使用两个属性:data-toggle和data-target。data-toggle必须设置为modal;data-target一般情况设置为模态弹出窗的ID值。例如:

<button type="button" data-toggle="modal" data-target="#mymodal" class="btn btn-primary">触发模态弹出窗</button>
<div class="modal" id="mymodal">
 <div class="modal-dialog">
  <div class="modal-content">
   <!-- 模态弹出窗内容 -->
  </div>
 </div>
</div>

使用a标签触发

链接元素自带的href属性可以替代data-target属性,例如:

<a data-toggle="modal" href="#mymodal" class="btn btn-primary" >触发模态弹出窗</a>
<div class="modal" id="mymodal" >
 <div class="modal-dialog" >
  <div class="modal-content" >
   <!-- 模态弹出窗内容 -->
  </div>
 </div>
</div>

为弹出框增加过度动画效果

给“.modal”增加类名“fade”即可。
实现源码如下:

.modal.fade .modal-dialog {
 -webkit-transition: -webkit-transform .3s ease-out;
  -o-transition:  -o-transform .3s ease-out;
   transition:   transform .3s ease-out;
 -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
   transform: translate(0, -25%);
}
.modal.in .modal-dialog {
 -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
   transform: translate(0, 0);
}

JavaScript代码式触发模态弹出框

例如:

<button type="button" class="btn btn-primary" id="mybtn">触发模态弹出窗</button>
<div class="modal" id="mymodal">
 <div class="modal-dialog">
  <div class="modal-content">
   <!-- 模态弹出窗内容 -->
  </div>
 </div>
</div>

然后添加Javascript代码:

$(function(){
 $("#mybtn").click(function(){
  $("#mymodal").modal();
 });
});

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

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

Javascript 相关文章推荐
jquery.cvtooltip.js 基于jquery的气泡提示插件
Nov 19 Javascript
javascript设计模式 封装和信息隐藏(上)
Jul 24 Javascript
Jquery实现视频播放页面的关灯开灯效果
May 27 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
Jun 24 Javascript
js实现格式化金额,字符,时间的方法
Feb 26 Javascript
javascript常用经典算法实例详解
Nov 25 Javascript
JavaScript核心语法总结(推荐)
Jun 02 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
JS实现留言板功能
Jun 17 Javascript
Vue将props值实时传递 并可修改的操作
Aug 09 Javascript
openlayers4实现点动态扩散
Aug 17 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
Dec 28 #Javascript
JS简单实现移动端日历功能示例
Dec 28 #Javascript
如何学JavaScript?前辈的经验之谈
Dec 28 #Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 #Javascript
javascript实现简单的ajax封装示例
Dec 28 #Javascript
前端面试知识点锦集(JavaScript篇)
Dec 28 #Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 #Javascript
You might like
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php格式化json函数示例代码
2016/05/12 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
jquery实现加载等待效果示例
2013/09/25 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
python2.6.6如何升级到python2.7.14
2018/04/08 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
教师读书活动总结
2014/05/07 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
安全生产月标语
2014/10/07 职场文书
作风转变年心得体会
2014/10/22 职场文书
法定代表人证明书
2014/11/28 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python