CSS与JavaScript实现半透明遮罩层及Select控件处理方案

作者:微光

时间:2026-10-30

浏览:337

本文详细讲解如何使用CSS绝对定位与JavaScript结合实现全屏半透明遮罩效果。重点解决遮罩层无法覆盖Select控件的难题,提供隐藏Select或使用Iframe两种处理方案,并附带完整的HTML、CSS及JS实现代码,适用于需要禁用背景操作的弹窗场景。

文章目录

CSS结合JavaScript的遮罩层实现原理

CSS结合JavaScript的实现思路如下:首先创建一个覆盖全屏的div元素,通过绝对定位使其脱离文档流,从而不影响页面其他元素的布局。将该div设置为半透明状态,透明度数值可根据实际需求调整。接着创建用于显示登录或弹窗内容的login元素,同样采用绝对定位,并设置其z-index属性值大于遮罩div,确保弹窗内容不被半透明背景遮挡。默认情况下,这两个div的display属性均设为none。当用户点击触发按钮时,通过JavaScript动态修改它们的display属性,即可显示或隐藏遮罩层。


<!DOCTYPE html> 

<html> 

<head> 

<meta charset=" utf-8"> 

<meta name="author" content="https://www.jb51.net/" /> 

<title>CSS如何实现弹出一个全屏灰黑色透明遮罩效果-本站</title> 

<style type="text/css"> 

* 

{ 

 margin:0px; 

 padding:0px; 

} 

.zhezhao 

{ 

 width:100%; 

 height:100%; 

 background-color:#000; 

 filter:alpha(opacity=50); 

 -moz-opacity:0.5; 

 opacity:0.5; 

 position:absolute; 

 left:0px; 

 top:0px; 

 display:none; 

 z-index:1000; 

} 

.login 

{ 

 width:280px; 

 height:180px; 

 position:absolute; 

 top:200px; 

 left:50%; 

 background-color:#000; 

 margin-left:-140px; 

 display:none; 

 z-index:1500; 

} 

.content 

{ 

 margin-top:50px; 

 color:red; 

 line-height:200px; 

 height:200px; 

 text-align:center; 

} 

</style> 

<script type="text/javascript"> 

window.onload=function() 

{ 

 var zhezhao=document.getElementById("zhezhao"); 

 var login=document.getElementById("login"); 

 var bt=document.getElementById("bt"); 

 var btclose=document.getElementById("btclose"); 

 bt.onclick=function() 

 { 

 zhezhao.style.display="block"; 

 login.style.display="block"; 

 } 

 btclose.onclick=function() 

 { 

 zhezhao.style.display="none"; 

 login.style.display="none"; 

 } 

} 

</script> 

</head> 

<body> 

 <div class="zhezhao" id="zhezhao"></div> 

 <div class="login" id="login"><button id="btclose">点击关闭</button></div> 

 <div class="content">本站欢迎您,<button id="bt">点击弹出遮罩</button></div> 

</body> 

</html>

上述方案实现了基础的遮罩功能:点击触发按钮后,页面弹出指定窗口;点击关闭按钮时,遮罩层及弹窗随之消失。

纯JavaScript方案与Select控件处理难点

纯JavaScript实现方案旨在达到以下效果:当弹出窗口显示时,窗口背后的页面区域变暗,且用户无法对背景页面进行任何操作。

实现过程中的难点在于:标准的div层无法覆盖浏览器原生的select控件。为此需要采取特殊处理,主要有两种方法:一是在弹出窗口下方添加一层iframe来覆盖select控件;二是在弹窗显示时,先将页面上的select控件隐藏。本文选择第二种方法进行处理。

核心实现原理为:在页面主体内容与弹出窗口之间插入一个半透明的覆盖层,该层将页面内容完全覆盖,从而实现视觉上的变暗及交互阻断效果。

具体实现代码见下方示例。


<script language="javascript"> 
function Open() 
{ 
 //隐藏select控件 
 DispalySelect(0); 
 //显示遮罩层 
 document.getElementById("divPageMask").style.display="block"; 
 //处理遮罩层 
 resizeMask(); 
 window.onResize = resizeMask; 
 //显示弹出窗口 
 document.getElementById("divOpenWin").style.display="block"; 
} 
function Close() 
{ 
 //显示select控件 
 DispalySelect(1); 
 //处理遮罩层 
 divPageMask.style.width = "0px"; 
 divPageMask.style.height = "0px"; 
 divOpenWin.style.display = "none"; 
 window.onResize = null; 
 
 document.getElementById("divOpenWin").style.display="none"; 
} 
//页面遮罩 
function resizeMask() 
{ 
 divPageMask.style.width = document.body.scrollWidth; 
 divPageMask.style.height = document.body.scrollHeight; 
 divOpenWin.style.left = ((document.body.offsetWidth - divOpenWin.offsetWidth) / 2); 
 divOpenWin.style.top = ((document.body.offsetHeight - divOpenWin.offsetHeight) / 2); 
} 
function DispalySelect(val) 
{ //显示和隐藏select控件 
 var dispalyType; 
 var arrdispalyType=["hidden","visible"]; 
 var arrObjSelect=document.getElementsByTagName("select"); 
 for (i=0;i<arrObjSelect.length;i++) 
 { 
 arrObjSelect[i].style.visibility=arrdispalyType[val]; 
 } 
} 
</script> 
 
<style type="text/css"> 
.body,td{font-size:12px} 
#divPageMask{background-color:white; filter:alpha(opacity=50);left:0px;position:absolute;top:0px;} 
#divOpenWin{background-color:#EEEEEE;position: absolute;left:0px;top:0px;display: none;z-index:50; width:300px;height:150px} 
</style> 
 
<div id="divPageMask"></div> 
<div id="divOpenWin"><center><a href="javascript:Close();">关闭</a></center></div> 
<label></label> 
<center> 
 <table border="0" cellpadding="0" cellspacing="0" width="650"> 
 <tbody> 
 <tr> 
 <td colspan="2" align="center" height="90"><p><img src="http://www.sopull.com/Images/Index/logo.gif" height="60" width="250"></p> 
 <p>&nbsp;</p> 
 <p>&nbsp;</p></td> 
 </tr> 
 <tr> 
 <td height="10" style="color:#666666;font-size:13px">&nbsp;</td> 
 </tr> 
 </tbody> 
 </table> 
 <table bgcolor="#e1e1e1" border="0" cellpadding="0" cellspacing="1" height="85" width="650"> 
 <tbody> 
 <tr> 
 <td align="center" bgcolor="#f9f9f9"><table height=50 cellspacing=0 cellpadding=0 width=600 style="margin-top:20px"> 
 <FORM name="f" action="http://www.sopull.com/ShopList.asp"> 
 <tbody> 
 <tr> 
 <td class="searchbar_word">关键字:</td> 
 <td width="241"><input type="text" name="k" size=30 /></td> 
 <td align=middle width=101 class="searchbar_word">所在地:</td> 
 <td align=middle width=97 id="cn"><script language="javascript" src="http://www.sopull.com/Inc/Js/ListCity.asp?CityName=北京市"></script></td> 
 <td align=middle width=95><input name="s" type=submit value=" 搜 铺 "></td> 
 </tr> 
 </form> 
 <tr> 
 <td width="64" height="30">&nbsp;</td> 
 <td colspan="4" valign="middle" class="search_text">例如:餐厅;电器;超市 
 </table></td> 
 </tr> 
 </tbody> 
 </table> 
</center> 
<p align="center">&nbsp;</p> 
<p align="center"><a href="javascript:Open();">打开遮罩</a></p> 
<p align="center">&nbsp;</p> 
<table width="650" border="0" align="center" cellpadding="0" cellspacing="0"> 
 <tbody> 
 <!-- <tr> 
 <td align="center" background="Images/Index/line_2.gif" width="580"><img src="Images/Index/line_2.gif" height="9" width="9"></td> 
 </tr>--> 
 <tr> 
 <td class="link" align="center" height="30"><a href="#" target=_blank><font color="#FF6600">免费提交店铺</font></a>&nbsp;|&nbsp; <a class="toplink" href="#">店铺推广</a>&nbsp;|&nbsp; <a class="toplink" href="#">关于搜铺</a>&nbsp;|&nbsp; <a class=b href="#" target=_blank>业务合作</a> &nbsp;|&nbsp; <a class="toplink" onClick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.sopull.com');return false;" href="http://www.sopull.com/#">设为首页</a>&nbsp;|&nbsp; <a class="toplink" onClick="javascript:window.external.addFavorite('http://www.sopull.com/','搜铺网-中国最大店铺搜索引擎')" href="http://www.sopull.com/#">加入收藏</a> </td> 
 </tr> 
 <tr> 
 <td align="center" height="30">&copy;2007 搜铺网 &nbsp;&nbsp;&nbsp;&nbsp;粤ICP备07006767号</td> 
 </tr> 
 </tbody> 
</table> 


实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章