<!-- 弹窗背景半透明蒙层 -->
<div class="box_bg">
<!-- 弹窗主体 -->
<div class="box">
<h3>这是一个弹窗</h3>
<!-- 弹窗内有个输入框 -->
<input type="text">
<p><i>点击弹窗外的背景蒙层可关闭弹窗</i></p>
<p><i>因为阻止了事件冒泡,所以点击弹窗里的内容不会关闭弹窗</i></p>
</div>
</div>
<button class="btn">
显示弹窗
</button>
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> ... </head>
<body>
</body>
CSS
格式化
* {
box-sizing: border-box;
}
body {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
/* 半透明蒙层 */
.box_bg {
position: fixed;
width: 100%;
height: 100vh;
padding: 15px;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0,0,0,0.5);
}
.box_bg .box {
background: #fff;
padding: 0 15px;
border-radius: 6px;
}
.btn {
display: block;
margin: auto;
font-size: 2em;
}
JS
格式化
const box_bg = document.querySelector('.box_bg');
// 点击半透明蒙层,关闭弹窗
box_bg.addEventListener(
'click',
() => {
box_bg.style.display = "none";
}
)
// 点击「显示弹窗」按钮
document.querySelector('.btn').addEventListener(
'click',
() => {
box_bg.style.display = "flex";//
}
)
// 点击弹窗内部,阻止事件冒泡,避免触发父级关闭弹窗
//【当你注释掉这里,点击弹窗里内部,会关闭弹窗】
document.querySelector('.box_bg .box').addEventListener(
'click',
(event) => {
event.stopPropagation() //阻止事件冒泡
}
)