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日

相关文章

  • 一款纯css3实现的颜色渐变按钮的代码教程

    我来给您详细讲解一款纯CSS3实现的颜色渐变按钮代码教程的完整攻略。 1. 制作思路 首先,我们需要明确制作思路。这款按钮将运用CSS3渐变的特性,实现颜色渐变。在渐变的过程中,我们也需要注意每个元素的位置,并对其进行调整。 2. 实现步骤 以下是具体的实现步骤: 2.1 HTML结构 首先创建按钮的HTML结构,可以采用以下代码: <button c…

    css 2023年6月9日
    00
  • 实例讲解CSS3中的box-flex弹性盒属性布局

    下面是关于“实例讲解CSS3中的box-flex弹性盒属性布局”的完整攻略: CSS3中的box-flex弹性盒属性布局 1. 弹性盒模型简介 弹性盒模型指的是一种新的布局模式,它可以使元素在一个容器内以弹性的方式排列和对齐。这种布局方式不同于传统的基于盒子模型的布局方式,在处理一些复杂的布局时表现更加优异。 2. 弹性盒模型的基本概念 在弹性盒模型中,有三…

    css 2023年6月10日
    00
  • 利用CSS制作3D动画

    制作3D动画是CSS中比较复杂的一个领域,需要借助一些特定属性和技巧。下面我将介绍如何用CSS实现3D动画的完整攻略: 步骤一:设置元素为3D 要创建3D动画,首先应该将元素设置为3D。这可以通过设置transform-style: preserve-3d;来实现。这个属性将自动应用于所有子元素,将它们放置在3D空间中。 步骤二:设置动画效果 CSS的3D动…

    css 2023年6月9日
    00
  • Flask SQLAlchemy(操作数据库)使用方法详解

    Flask SQLAlchemy是一个Python库,提供ORM(Object-Relational Mapping)功能,用于在Flask应用程序中访问和操作关系数据库。在本篇文章中,我们将详细介绍如何利用Flask SQLAlchemy进行数据库操作,并提供实际的代码示例。 安装Flask SQLAlchemy 要使用Flask SQLAlchemy,首…

    Flask 2023年3月13日
    00
  • JavaScript flash复制库类 Zero Clipboard

    我们来分享一下“JavaScript flash复制库类 Zero Clipboard”的完整攻略。 什么是 Zero Clipboard Zero Clipboard 是一款 JavaScript flash复制库,它可以让你在网页中通过点击按钮或者其他事件实现复制功能。使用 Zero Clipboard 可以提高用户在网页中复制文本或链接的效率,同时也提…

    css 2023年6月10日
    00
  • 转载:On having layout

    转载:On having layout详细攻略 什么是On having layout? On having layout是一篇介绍如何给网页添加布局的文章。它主要介绍了CSS的盒模型及其相关属性,如何实现常见的布局方式,如列式布局、栅格布局等。 如何开始On having layout? 要开始On having layout,你应该首先了解HTML和CS…

    css 2023年6月9日
    00
  • H5页面适配iPhoneX(就是那么简单)

    下面是“H5页面适配iPhoneX(就是那么简单)”的完整攻略。 一、了解iPhoneX全面屏设计 作为iPhone最新一代产品,iPhoneX全面屏的设计对于H5页面的适配来说是一个很大的挑战。iPhoneX所采用的全面屏设计,最大的特点就是顶部存在“刘海”,底部没有Home键,因此在适配时需要考虑到这些特殊的设计要素。 二、viewport和safe a…

    css 2023年6月10日
    00
  • JQuery实现用户名无刷新验证的小例子

    关于“JQuery实现用户名无刷新验证的小例子”的完整攻略,我将分以下几个部分进行详细讲解: 1. 前置知识 在实现该小例子之前,需要具备以下知识: HTML/CSS基本结构 JQuery基础知识 AJAX异步请求知识 如果对以上知识不熟悉,建议先学习相关基础知识再进行此项目的实现。 2. 编写HTML/CSS代码 首先,需要编写基础的HTML/CSS代码,…

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