之前发表过一篇文章叫Bootstrap Modal弹窗代码,其实那个只是一个弹出层代码而已,并不是仿造Bootstrap的,Bootstrap modal是给外层添加固定fixed,然后内容使用自适应靠上居中方式。今天分享的这篇文章正是这种方式。
html结构
考虑到内容区域需要居中对齐,所以至少要有一个div来定位和显示背景,再用一个div居中内容,内容区域想分成header、body和footer。
<div class="rs-dialog" id="myModal1"><div class="rs-dialog-box"><a class="close" href="#">×</a><div class="rs-dialog-header"><h3>标题</h3></div><div class="rs-dialog-body"><p>内容</p></div><div class="rs-dialog-footer"><input type="button" class="close" value="Close" style="float:right"></div></div></div>
添加样式
透明背景用background和opacity来实现,也可以选择rgba,只是IE8及以下浏览器不支持。为了让一个position为fixed的div铺满整个窗口,可以将其top、right、left、bottom属性全部设为0。
当内容区域过长时,模拟浏览器纵向滚动条,方法是将body(或HTML)的overflow属性设为hidden,禁止浏览器真正的滚动条出现,然后给弹窗最外层的div设置overflow-y:auto,用这个div的滚动条模拟浏览器滚动条。
弹窗打开关闭时滚动效果用css3 transition来实现。
.dialog-open{overflow-y:hidden !important;}.rs-overlay{background:#000;opacity:.5;filter: alpha(opacity=50);position: fixed;z-index: 1000;top:0;bottom:0;left:0;right:0;display: none;}.rs-dialog{display: none;opacity: 0;overflow: hidden;position: fixed;top:0;bottom:0;left:0;right:0;z-index: 1040;-webkit-overflow-scrolling: touch;outline: 0;/*background: rgba(0,0,0,.5);*/-webkit-transition: opacity .15s linear;-o-transition: opacity .15s linear;transition: opacity .15s linear;}.dialog-open .rs-dialog{overflow-x:hidden;overflow-y:auto;}.rs-dialog.in{opacity: 1;}.rs-dialog .rs-dialog-box {-webkit-transform: translate(0, -25%);-ms-transform: translate(0, -25%);-o-transform: translate(0, -25%);transform: translate(0, -25%);-webkit-transition: -webkit-transform 0.3s ease-out;-o-transition: -o-transform 0.3s ease-out;transition: transform 0.3s ease-out;}.rs-dialog.in .rs-dialog-box {-webkit-transform: translate(0, 0);-ms-transform: translate(0, 0);-o-transform: translate(0, 0);transform: translate(0, 0);}.rs-dialog .rs-dialog-box{position: relative;margin:30px auto;width: 600px;background-color: #ffffff;border-radius:10px;border: 1px solid #999999;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);}.logged-in .rs-dialog .rs-dialog-box{margin-top:60px;}.rs-dialog-box a.close{position: absolute;top: -12px;right: -12px;width: 25px;height: 25px;padding: 0;line-height: 25px;font-size:20px;font-family:Arial,sans-serif;font-weight:bold;text-decoration:none;text-align:center;text-shadow: 0 1px 0 #ffffff;color: #fff;background-color:#8b8b8b;border:2px solid #fff;border-radius: 25px;box-shadow:0 0 3px 1px #999;outline: none;}.rs-dialog-box a.close:hover{background-color:#444;}.rs-dialog-header{padding: 20px;border-bottom: 1px solid #e5e5e5;}.rs-dialog-header h3{font-size: 18px;}.rs-dialog-body{padding: 20px;line-height: 1.4}.rs-dialog-body p{margin-bottom:10px;}.rs-dialog-footer{padding: 20px;border-top:1px solid #e5e5e5;overflow: hidden;}@media (max-width: 767px) {.rs-dialog .rs-dialog-box {width: auto;margin: 30px 20px;}}
新闻热点
疑难解答
图片精选