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

yizhihongxing

下面是针对“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+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)

    下面是“CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)”的完整攻略。 简介 在网页制作中,经常会涉及到图文混排的情况,我们希望能够让文本自适应图片的宽度,使得排版更加美观。那么本文将会详细讲解如何实现这个功能。 步骤 第1步:HTML结构 在HTML中,首先我们需要将图片包裹在一个div内: <div class=&quot…

    css 2023年6月10日
    00
  • JavaScript for循环

    JavaScript 中的 for 循环是一种常用的迭代结构,用于按照指定条件多次执行某些操作。其语法如下: for (initialization; condition; increment/decrement) { // 执行操作 } 其中,initialization 是循环的初始条件,通常是声明一个计数器变量;condition 是循环的终止条件,在…

    Web开发基础 2023年3月30日
    00
  • 解析CSS 提取图片主题色功能(小技巧)

    当我们设计一个网站,图片的使用是非常重要的。有时候,我们需要从一个图片中提取其主题颜色,来使用在网页的其他元素上,使整个页面更加协调美观。今天我将会介绍一个小技巧,可以通过解析CSS来提取图片的主题颜色。 步骤1:使用CSS提取图片 首先,我们需要通过CSS来提取图片的颜色信息。具体而言,我们需要使用CSS的background-image属性将图片应用到一…

    css 2023年6月9日
    00
  • 值得收藏的CSS命名规范(规则)常用的CSS命名规则

    下面是关于“值得收藏的CSS命名规范(规则)常用的CSS命名规则”的详细讲解,包含以下内容: 什么是CSS命名规范? CSS命名规范是指在编写CSS代码时,根据一定的规则和标准对CSS样式名称进行命名的方式。通过遵循CSS命名规范,我们可以更好地组织和管理我们的代码,从而提高代码的可读性和可维护性。 常用的CSS命名规则 1. BEM命名法 BEM是一种广泛…

    css 2023年6月9日
    00
  • linux vim 配置文件(高亮+自动缩进+行号+折叠+优化)

    下面就来详细讲解一下如何配置 Linux Vim 编辑器的配置文件。这里我们将会配置高亮、自动缩进、行号、折叠和优化。 1. 创建配置文件 首先,我们需要在你的 home 目录下创建名为 .vimrc 的文件,该文件将用于配置 Vim 编辑器。 cd ~ touch .vimrc 2. 设置行号和高亮 在 .vimrc 中添加以下内容来启用行号和代码高亮功能…

    css 2023年6月9日
    00
  • BootStrap 弹出层代码

    Bootstrap 弹出层组件是Web开发中常用的交互式组件,它可以用于在网站独立显示一些信息,例如登录窗口、菜单列表等。Bootstrap 提供了多种弹出层组件,其中包括 Modals、Tooltips 和 Popovers 等。 本文将详细讲解如何使用 Bootstrap 弹出层组件,让你能够灵活使用弹出层组件。 引入Bootstrap 在使用 Boot…

    css 2023年6月10日
    00
  • 用CSS实现图片的3D凹凸感(凸出镜框外或凹陷镜框里)

    下面我将详细讲解如何用 CSS 实现图片的 3D 凹凸感。 准备图片 首先我们需要准备一张需要进行 3D 处理的图片。在该图片上可以尽可能的增加一些明亮和阴暗的区域,以便更好地突出凸出和凹陷的效果。 CSS 实现 3D 凹凸感 接下来,我们可以使用 CSS 来实现 3D 凹凸感。下面是一些示例说明: 使用 box-shadow 实现凸出 可以使用 box-s…

    css 2023年6月10日
    00
  • 一行css代码解决图片统一大小后的拉伸问题(object-fit)

    下面就是关于“一行css代码解决图片统一大小后的拉伸问题(object-fit)”的完整攻略。 什么是object-fit 在处理图片布局的过程中,当要将不同尺寸的图片展示在同一个容器中时,会因为图片的不同宽高比例,而出现拉伸或压缩的情况,导致显示效果不够美观。而object-fit属性可以帮助我们解决这个问题,它可以通过自动调整图片的大小,让之适应他们的容…

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