bootstrap模态弹出框
模态弹出框(Modals)
这一小节我们先来讲解一个“模态弹出框”,插件的源文件:modal.js。
右侧代码编辑器(30行)就是单独引入bootstrap中发布出的“modal.js”文件。
样式代码:
☑LESS版本:modals.less
☑Sass版本:_modals.scss
☑编译后的Bootstrap:对应bootstrap.css文件第5375行~第5496行
在Bootstrap框架中把模态弹出框统一称为Modal。这种弹出框效果在大多数Web网站的交互中都可见。比如点击一个按钮弹出一个框,弹出的框可能是一段文件描述,也可能带有按钮操作,也有可能弹出的是一张图片。如下图所示:
mii
模态弹出框--结构分析
Bootstrap框架中的模态弹出框,分别运用了“modal”、“modal-dialog”和“modal-content”样式,而弹出窗真正的内容都放置在“modal-content”中,其主要又包括三个部分:
☑弹出框头部,一般使用“modal-header”表示,主要包括标题和关闭按钮
☑弹出框主体,一般使用“modal-body”表示,弹出框的主要内容
☑弹出框脚部,一般使用“modal-footer”表示,主要放置操作按钮
模态弹出窗的结构如下:
×Close
模态弹出窗标题
模态弹出窗主体内容
关闭
保存
弹出窗的主体样式实现:
但是对于一个模态弹出窗而言,modal-content才是样式的关键。其主要设置了弹出窗的边框、边距、背景色和阴影等样式。
/*bootstrap.css文件第5412行~第5423行*/
.modal-content{
position:relative;
background-color:#fff;
-webkit-background-clip:padding-box;
background-clip:padding-box;
border:1pxsolid#999;
border:1pxsolidrgba(0,0,0,.2);
border-radius:6px;
outline:0;
-webkit-box-shadow:03px9pxrgba(0,0,0,.5);
box-shadow:03px9pxrgba(0,0,0,.5);
}
除此之外,modal-content中的modal-header、modal-body和modal-footer三个部分样式设置:
/*bootstrap.css文件第5441行~第5461行*/
.modal-header{
min-height:16.42857143px;
padding:15px;
border-bottom:1pxsolid#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:1pxsolid#e5e5e5;
}
这三个部分主要控制一些间距的样式。而modal-footer都是用来放置按钮,所以底部还对包含的按钮做了一定的样式处理。
/*bootstrap.css文件第5462行~第5471行*/
.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;
}
模态弹出框--实现原理解析(一)
实现原理解析:
bootstrap中的“模态弹出框”有以下几个特点:
1、模态弹出窗是固定在浏览器中的。
2、单击右侧全屏按钮,在全屏状态下,模态弹出窗宽度是自适应的,而且modal-dialog水平居中。
3、当浏览器视窗大于768px时,模态弹出窗的宽度为600px。
固定在浏览器(源代码)实现:
/*bootstrap.css文件第5379行~第5389行*/
.modal{
position:fixed;
top:0;
right:0;
bottom:0;
left:0;
z-index:1050;
display:none;
overflow:hidden;
-webkit-overflow-scrolling:touch;
outline:0;
}
水平居中(源代码)实现:
/*bootstrap.css文件第5407行~第5411行*/
.modal-dialog{
position:relative;
width:auto;
margin:10px;
}
当浏览器视窗大于768px时,模态弹出窗的宽度为600px(源代码)实现:
/*bootstrap.css文件第5479行~第5491行*/
@media(min-width:768px){
.modal-dialog{
width:600px;
margin:30pxauto;
}
.modal-content{
-webkit-box-shadow:05px15pxrgba(0,0,0,.5);
box-shadow:05px15pxrgba(0,0,0,.5);
}
.modal-sm{
width:300px;
}
}
模态弹出框--实现原理解析(二)
蒙板样式实现:
大家或许注意到了,在做模态弹出窗时,底部常常会有一个透明的黑色蒙层效果:
在Bootstrap框架中为模态弹出窗也添加了一个这样的蒙层样式“modal-backdrop”,只不过他默认情况下是全屏黑色的:
/*bootstrap.css文件第5424行~第5432行*/
.modal-backdrop{
position:fixed;
top:0;
right:0;
bottom:0;
left:0;
z-index:1040;
background-color:#000;
}
同样,给其添加了一个过渡动画,从fade到in,把opacity值从0变成了0.5。上图展示的就是in状态下的效果:
/*bootstrap.css文件第5433行~第5440行*/
.modal-backdrop.fade{
filter:alpha(opacity=0);
opacity:0;
}
.modal-backdrop.in{
filter:alpha(opacity=50);
opacity:.5;
}
两种尺寸选择:
除此之外,Bootstrap框架还为模态弹出窗提供了不同尺寸,一个是大尺寸样式“modal-lg”,另一个是小尺寸样式“modal-sm”。其结构上稍做调整:
...
...
对于这两种尺寸的模态弹出窗,Bootstrap在媒体查询中做过处理:代码同上见bootstrap.css
模态弹出框--触发模态弹出窗2种方法
众所周知,模态弹出窗在页面加载完成时,是被隐藏在页面中的,只有通过一定的动作(事件)才能触发模态弹出窗的显示。在Bootstrap框架中实现方法有2种,接下来分别来介绍这2种触发模态弹出窗的使用方法。
声明式触发方法:
方法一:模态弹出窗声明,只需要自定义两个必要的属性:data-toggle和data-target(bootstrap中声明式触发方法一般依赖于这些自定义的data-xxx属性。比如data-toggle=""或者data-dismiss="")。例如:
点击我会弹出模态弹出窗
注意以下事项:
1、data-toggle必须设置为modal(toggle中文翻译过来就是触发器);
2、data-target可以设置为CSS的选择符,也可以设置为模态弹出窗的ID值,一般情况设置为模态弹出窗的ID值,因为ID值是唯一的值。
方法二:触发模态弹出窗也可以是一个链接元素,那么可以使用链接元素自带的href属性替代data-target属性,如:
点击我会弹出模态弹出窗
不过建议还是使用统一使用data-target的方式来触发。
模态弹出框--为弹出框增加过度动画效果
为模态弹出框增加过度动画效果:
可通过给“.modal”增加类名“fade”为模态弹出框增加一个过渡动画效果。
小的模态弹出窗
×Close
模态弹出窗标题
模态弹出窗主体内容
关闭
保存
源代码实现:
/*bootstrap.css文件第5390行~第5402行*/
.modal.fade.modal-dialog{
-webkit-transition:-webkit-transform.3sease-out;
-o-transition:-o-transform.3sease-out;
transition:transform.3sease-out;
-webkit-transform:translate3d(0,-25%,0);
-o-transform:translate3d(0,-25%,0);
transform:translate3d(0,-25%,0);
}
.modal.in.modal-dialog{
-webkit-transform:translate3d(0,0,0);
-o-transform:translate3d(0,0,0);
transform:translate3d(0,0,0);
}
模态弹出框--模态弹出窗的使用(data-参数说明)
除了通过data-toggle和data-target来控制模态弹出窗之外,Bootstrap框架针对模态弹出框还提供了其他自定义data-属性,来控制模态弹出窗。比如说:是否有灰色背景modal-backdrop,是否可以按ESC键关闭模态弹出窗。有关于Modal弹出窗自定义属性相关说明如下所示:
ssssm
avaScript触发方法
除了使用自定义属性触发模态弹出框之外,还可以通过JavaScript方法来触发模态弹出窗。通过给一个元素一个事件,来触发。比如说给一个按钮一个单击事件,然后触发模态弹出窗。如下面的一个简单示例:
点击我
×Close
模态弹出窗标题
模态弹出窗主体内容
关闭
保存
JavaScript触发的弹出窗代码:
$(function(){
$(".btn").click(function(){
$("#mymodal").modal();
});
});
比如你不想让用户按ESC键关闭模态弹出窗,你就可以这样做:
$(function(){
$(".btn").click(function(){
$("#mymodal").modal({
keyboard:false
});
});
});
事件调用方法也非常简单:
$('#myModal').on('hidden.bs.modal',function(e){
//处理代码...
})