CSS实现带遮罩层可关闭的弹窗效果

下面是针对“CSS实现带遮罩层可关闭的弹窗效果”的完整攻略:

1. HTML 结构

弹窗需要在 HTML 中先定义结构,可以使用一个 div 元素包裹弹窗内容。如下:

<div id="popup">
  <h2>这是弹窗标题</h2>
  <p>这是弹窗内容</p>
  <button id="closeBtn">关闭</button>
</div>

2. CSS 样式

定义弹窗的 CSS 样式,包括弹窗的位置布局、大小、样式等。可以通过绝对定位 position: absolute 让弹窗始终位于屏幕中央,如下:

#popup {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 300px;
  height: 200px;
  background-color: #fff;
  z-index: 999;
}

其中,z-index 属性的值最好设为一个比较大的值,这样弹窗不会被其他元素挡住。

接下来,需要定义一个遮罩层,可以使用一个 div 元素充满整个屏幕,并给其设置一个半透明的颜色,如下:

#popup-mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 998;
}

其中,position: fixed 让遮罩层始终充满整个屏幕,并且相对于视口固定,不会随着滚动而变化。

3. JavaScript 交互

最后,我们需要实现弹窗的交互效果。可以通过以下几步来完成:

  1. 绑定一个点击事件,当触发这个事件时弹出弹窗。

  2. 显示遮罩层和弹窗,在显示时,为遮罩层添加一个摸黑淡入的效果,可以通过 transition 进行实现。

  3. 绑定关闭按钮的点击事件和遮罩层的点击事件,当触发这些事件时,隐藏弹窗和遮罩层,在隐藏时,为遮罩层添加一个摸黑淡出的效果,同样可以通过 transition 进行实现。

下面是示例代码:

// 获取相关 DOM 元素
var popup = document.getElementById('popup');
var popupMask = document.getElementById('popup-mask');
var closeBtn = document.getElementById('closeBtn');

// 绑定显示弹窗事件
document.getElementById('showPopup').addEventListener('click', function() {
  popup.classList.add('is-active');
  popupMask.classList.add('is-active');
});

// 绑定关闭弹窗事件
closeBtn.addEventListener('click', onClose);
popupMask.addEventListener('click', onClose);

function onClose() {
  popup.classList.remove('is-active');
  popupMask.classList.remove('is-active');
}

同时,需要在 CSS 中添加 transition 属性,来让显示和隐藏遮罩层时有一个动态的效果。如下所示:

#popup-mask {
  /* ... */
  opacity: 0;
  transition: opacity 0.3s ease;
}

#popup-mask.is-active {
  opacity: 1;
}

#popup {
  /* ... */
  opacity: 0;
  transition: opacity 0.3s ease, transform 0.3s ease;
  transform: translate(-50%, -60%);
}

#popup.is-active {
  opacity: 1;
  transform: translate(-50%, -50%);
}

这样,就能够实现一个带遮罩层可关闭的弹窗效果了。

再举两个完整的示例:

示例一

HTML:

<button id="showPopup">点击显示弹窗</button>

<div id="popup-mask"></div>
<div id="popup">
  <h3>这是一个弹窗</h3>
  <p>这是弹窗的内容</p>
  <button id="closeBtn">关闭</button>
</div>

CSS:

#popup {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 300px;
  height: 200px;
  background-color: #fff;
  z-index: 999;
  opacity: 0;
  transition: opacity 0.3s ease, transform 0.3s ease;
  transform: translate(-50%, -60%);
}

#popup.is-active {
  opacity: 1;
  transform: translate(-50%, -50%);
}

#popup-mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 998;
  opacity: 0;
  transition: opacity 0.3s ease;
}

#popup-mask.is-active {
  opacity: 1;
}

JavaScript:

var popup = document.getElementById('popup');
var popupMask = document.getElementById('popup-mask');
var closeBtn = document.getElementById('closeBtn');

document.getElementById('showPopup').addEventListener('click', function() {
  popup.classList.add('is-active');
  popupMask.classList.add('is-active');
});

closeBtn.addEventListener('click', onClosePopup);
popupMask.addEventListener('click', onClosePopup);

function onClosePopup() {
  popup.classList.remove('is-active');
  popupMask.classList.remove('is-active');
}

示例二

HTML:

<button id="showPopup">点击显示弹窗</button>

<div id="popup-mask"></div>
<div id="popup">
  <h3>这是一个弹窗</h3>
  <p>这是弹窗的内容</p>
  <button id="closeBtn">关闭</button>
</div>

CSS:

#popup {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 300px;
  height: 200px;
  background-color: #fff;
  z-index: 999;
  opacity: 0;
  transition: opacity 0.3s ease, transform 0.3s ease;
  transform: translate(-50%, -60%);
  border-radius: 5px;
  box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.3);
}

#popup.is-active {
  opacity: 1;
  transform: translate(-50%, -50%);
}

#popup-mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 998;
  opacity: 0;
  transition: opacity 0.3s ease;
}

#popup-mask.is-active {
  opacity: 1;
}

JavaScript:

var popup = document.getElementById('popup');
var popupMask = document.getElementById('popup-mask');
var closeBtn = document.getElementById('closeBtn');

document.getElementById('showPopup').addEventListener('click', function() {
  popup.classList.add('is-active');
  popupMask.classList.add('is-active');
});

closeBtn.addEventListener('click', onClosePopup);
popupMask.addEventListener('click', onClosePopup);

function onClosePopup() {
  popup.classList.remove('is-active');
  popupMask.classList.remove('is-active');
}

在第二个示例中,我添加了圆角和阴影,使得弹窗看起来更加美观。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CSS实现带遮罩层可关闭的弹窗效果 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS内边距设置方法详解

    CSS内边距(padding)指的是元素边框与内容之间的距离。内边距可以通过padding-top、padding-right、padding-bottom、padding-left四个属性分别设置四个方向的值。也可以使用padding属性,在一个声明中同时设置四个方向的值。 例如: .box { padding: 20px; } 上述代码将.box元素的上…

    Web开发基础 2023年3月20日
    00
  • 点击地图div上的按钮实现对地图数据的入库操作

    针对这个问题,我会提供一份完整攻略,解释如何通过点击地图div上的按钮来实现对地图数据的入库操作。 步骤1:创建地图 首先,需要创建一个地图。可以使用开源的JS库,如Leaflet,OpenLayers等。在这里,我们以Leaflet为例。使用以下代码创建一个地图: <div id="map"></div> &lt…

    css 2023年6月10日
    00
  • html5如何及时更新缓存文件(js、css或图片)

    HTML5通过使用缓存清单(Cache Manifest)功能,可以实现对于JavaScript、CSS、图片等静态资源的缓存更新。下面是步骤: 创建缓存清单文件 通过在HTML文档头部添加manifest属性引用缓存清单文件。缓存清单文件是一个文本文件,以“.appcache”扩展名结尾,其中包含需要缓存的资源以及清单信息。请注意,缓存清单文件必须在Web…

    css 2023年6月9日
    00
  • css教程:css和document

    CSS(层叠样式表)是一种用于描述网页样式的语言,可以用于控制网页的布局、颜色、字体等方面。在网页中,CSS 与文档对象模型(DOM)密切相关,可以通过 DOM 操作来修改网页的样式。以下是关于 CSS 和 DOM 的完整攻略。 CSS 和 DOM 在网页中,CSS 和 DOM 是密切相关的。DOM 是一种用于表示网页结构的树形结构,可以通过 JavaScr…

    css 2023年5月18日
    00
  • css 滤镜效果主要对HTML标记设置滤镜效果

    CSS滤镜是一种CSS属性,它允许你在内容上覆盖一层透明的、可用的效果。 这些效果通常用于图像,但还可以应用于其他元素。 准备 首先,我们需要在HTML中准备一些元素,然后在CSS中添加滤镜。 <div class="container"> <img src="example.jpg" alt=&qu…

    css 2023年6月9日
    00
  • 浅谈JS获取元素的N种方法及其动静态讨论

    文章标题:浅谈JS获取元素的N种方法及其动静态讨论 概述 获取元素是前端开发中最常用的操作之一,也是JS语言的一项基本技能。本文将介绍JS获取元素的N种方法及其动、静态讨论。 静态获取元素 1. getElementById 使用document.getElementById(id)方法可以通过id直接获取元素。 <div id="myDiv…

    css 2023年6月10日
    00
  • 分享那些Web设计大神们常用的响应式框架(小结)

    分享那些Web设计大神们常用的响应式框架(小结) 在Web设计领域,响应式设计已经成为一种必备的能力。而响应式框架的出现,使得响应式设计的实现更加便捷和高效。在这篇文章中,我们将介绍一些Web设计大神常用的响应式框架。 一、Bootstrap Bootstrap是目前为止最流行的响应式框架之一,它完全开源且免费。由Twitter开发,具有Sass插件、基础的…

    css 2023年6月11日
    00
  • 使用CSS实现黑白格背景效果

    要使用CSS实现黑白格背景效果,可以使用CSS的重复背景图片和线性渐变两种方式。 1. 重复背景图片 使用重复背景图片的方法是,首先准备一个黑白格图片,然后将其设置为背景图片并进行重复。具体代码如下: body { background-image: url("black-white-grid.png"); background-repe…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部