虽然每次项目都是主要写后端,但是有时候前端的样式太丑了,也有点看不下去。弹出框是项目中用的比较多的,比如删除,修改或者添加什么的,都需要一个弹出框。
所以这里简单记录一下,应该如何实现。实现效果如下图:
html结构
这里我把弹出框的盒子拆分为上下结构的三块,第一块放弹出框标题和x,第二块放主体内容,第三块为底部放确定和取消按钮。
代码如下:
<div class="modal" id="del-modal">
<div class="head">
<span class="title">删除框</span>
<span class="ico" onclick="toclose()">x</span>
</div>
<hr>
<div class="content">
删除不可恢复,是否确定删除?
</div>
<div class="foot">
<button class="normal-bnt" >删除</button>
<button class="cancel-bnt" onclick="toclose()">取消</button>
</div>
</div>
表示背景层的div元素随便放在哪里都可以,我们主要设置它的css就可以
<!-- 背景层 -->
<div class="overlay" id="overlay"></div>
css样式
背景层的css样式:主要要让它的position属性为fixed。表示元素相对于浏览器窗口进行定位,而不是相对于包含它的父元素。当浏览器窗口滚动时,使用position: fixed;
的元素会保持在相对于窗口固定的位置,不会随着页面滚动而移动。
然后把它铺满整个窗口,并设置背景颜色为灰色透明,就可以有一个透明背景层的效果。要实现铺满则需要让它的高度和宽度都和整个窗口一样高。
.overlay {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1000;
}
而弹出框的样式,也是需要这种固定的位置,显示在窗口的正中间,不会随页面滚动而滚动。
.modal {
display: none;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
background-color: white;
z-index: 1001;
}
position: fixed; left: 50%;top: 50%;这三项设置可以让弹出框的起始位置变成在距离窗口左边50%和距上50%的位置,但想让弹出框居中,还需要考虑弹出框自己的长和宽,加上transform: translate(-50%,-50%);就可以让弹出框本身像左移动自己宽度一半的距离,像上移动自己高度一半的距离。实现完全居中。
z-index
属性:用于设置元素的堆叠顺序(z轴顺序)。可以理解为元素在z轴上的位置,决定了元素在其他元素之上还是之下。我们把弹出框的的z-index设置得比背景层大,就能让弹出框显示在背景层之上。
以上叙述的均为重要的css实现,其他元素的css样式可以根据自己的需求自定义。
js
show方法显示弹出框和背景层,给某个按钮绑定点击事件触发show方法,show方法会给弹出框和背景层加一个class为show的属性。(注意,这里引入了jquery.min.js才可以这样获取元素)
function show() {
$("#del-modal").addClass("show");
$("#overlay").addClass("show");
}
给x和取消按钮绑定点击事件,点击后移除弹出框和背景层为show的class.
function toclose() {
$("#del-modal").removeClass("show");
$("#overlay").removeClass("show");
}
整体代码
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<link rel="stylesheet" href="弹出框.css">
<body>
<div style="left: 10%; top: 10%; position:fixed">
<button onclick="show()">点我弹出删除框</button>
</div>
<div class="modal" id="del-modal">
<div class="head">
<span class="title">删除框</span>
<span class="ico" onclick="toclose()">x</span>
</div>
<hr>
<div class="content">
删除不可恢复,是否确定删除?
</div>
<div class="foot">
<button class="normal-bnt" >删除</button>
<button class="cancel-bnt" onclick="toclose()">取消</button>
</div>
</div>
<!-- 背景层 -->
<div class="overlay" id="overlay"></div>
</body>
</html>
<script src="../jquery.min.js"></script>
<script>
function show() {
$("#del-modal").addClass("show");
$("#overlay").addClass("show");
}
function toclose() {
$("#del-modal").removeClass("show");
$("#overlay").removeClass("show");
}
</script>
css代码:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 设置整体页面高度 */
html, body {
height: 100%;
}
.modal {
display: none;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
background-color: white;
z-index: 1001;
}
.head {
padding:10px;
height: 40px;
width: 250px;
}
.title {
font-size: 16px;
}
.ico {
position: absolute;
right: 15px;
}
.ico:hover {
color: #767575;
cursor: pointer;
}
.content {
text-align: center;
margin: 10px;
font-size: 14px;
height: 40px;
line-height: 40px;
}
.foot {
text-align: right;
padding-right: 15px;
margin: 5px 0;
}
.foot button {
display: inline-block;
height: 30px;
width: 60px;
cursor: pointer;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
}
.normal-bnt {
background-color:rgb(64,158,255) ;
color: white;
}
.overlay {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1000;
}
.show {
display: block;
}