需求提要

我们如果想写一个效果类似弹出框的组件,首先简单分析一下弹出框的几个特性:弹出框肯定位于当前页面的最顶端,并且在弹出框关闭之前,其他控件都无法点击、focus等。

为了更好突出弹出框的效果,除了弹出框以外的部分,我们可以加上一个幕布(英文为backdrop)效果,让背景的元素模糊、半透明、变暗等等,让用户的注意力能够完全集中在弹出框之中。

弹出前:

弹出后:

需求分析把弹出框设定到当前页面的最顶端很简单,我们很快就能想到用Z-index去实现,把Z-index设定到一个足够大的值(取决于你的项目中Z-index数值的基本设计),确保它最大即可。

要让别的元素无法点击,这个我们在弹出框元素上做文章,好像无法非常简便地实现。要实现这个特征,我们需要和需求提要2一起思考。

既然我们不仅要让别的元素无法点击,还要让弹出框的背景有幕布效果,那我们可以除了弹出框以外,再加一个元素,让这个元素的长、宽和视窗大小一致(即盖住整个屏幕)并且确保它的Z-index也足够大,但是又刚好比弹出框的Z-index小一点。这样我们就得到了两个元素——一个是我们的弹出框,另一个是我们的幕布区域(整个屏幕除了弹出框的区域),这样在做样式设计的时候也比较简单明了。

代码实现

思路清晰之后,剩下的就是简单的代码实现了,所有效果都很简单,只要根据我们上面分析的设计来写就OK了。

HTML

close

show

JSvar button = document.getElementsByTagName("button")[0];

button.addEventListener("click", function() {

// show the modal

var ele = document.getElementsByClassName("modal")[0];

ele.style.visibility = `visible`;

ele.style.opacity = `1`;

// show backdrop effect

var backdrop = document.getElementsByClassName("backdrop")[0];

backdrop.style.opacity=`1`;

backdrop.style.visibility=`visible`;

})

var close = document.getElementById('close').addEventListener("click", function(event) {

// close modal

event.target.parentNode.style.visibility=`hidden`;

event.target.parentNode.style.opacity = `0`;

// close backdrop effect

var backdrop = document.getElementsByClassName("backdrop")[0];

backdrop.style.opacity=`0`;

backdrop.style.visibility=`hidden`;

})

我们的幕布效果最重要的是在CSS里面的设定,大家可以稍微仔细看一下。

CSSbody {

background-color: #f4ebc1;

}

main {

height: 100vh;

display: flex;

justify-content: center;

align-items: center;

}

.backdrop{

width:100%;

height:100%;

visibility: hidden;

opacity: 0;

position:fixed;

top:0;

right:0;

bottom:0;

left:0;

background: rgba(8, 7, 7, 0.6);

z-index: 100;

transition: all .2s ease;

backdrop-filter: saturate(180%) blur(1px);

}

.backcontent{

position: absolute;

top: 70vh;

width: 80px;

height: 30px;

background: white;

text-align: center;

line-height: 28px;

border: 1px solid black;

box-shadow: 0 0 3px #0070D2;

border-radius: 30px;

opacity:.85;

outline: none;

}

.modal {

position: absolute;

left: 50xw;

top: 30vh;

width: 300px;

height: 150px;

visibility: hidden;

opacity: 0;

background-color: white;

border-radius: 5px;

border: 1px solid black;

transition: all .2s ease;

display: flex;

justify-content: center;

align-items: flex-end;

z-index: 9001;

}

#close {

width: 80px;

height: 30px;

background: white;

text-align: center;

line-height: 28px;

border: 1px solid black;

box-shadow: 0 0 3px #0070D2;

border-radius: 30px;

opacity:.85;

outline: none;

margin-bottom: 1rem;

}

苹果官网导航栏效果

苹果官网的导航栏的半透明效果,主要是由下面这行样式实现的。backdrop-filter: saturate(180%) blur(1px);

例图:注意导航栏的半透明、模糊效果

backdrop-filter主要是控制被元素覆盖住的元素的效果,注意,要看到这个样式带来的效果,覆盖的元素必须有一定的半透明度(这样才能看到下面一层的效果)。

供参考:

html仿苹果桌面导航js css,CSS简单实现弹出框、输入框等的背景幕布,模仿苹果官网导航块的半透明效果。...相关推荐

  1. html 原生弹出框,html、css和js原生写一个模态弹出框,顺便解决父元素半透明子元素不透明效果...

    模态框: html部分: 弹出框 hhhhh 取消 确认 css部分: #box{ width: 80px; height: 40px; background: #fd7430; border:non ...

  2. 纯js封装一个多功能弹出框

    不借助其它的css代码和图片资源,可直接调用. 原创内容,请勿转载. 注意,不要直接复制文章里的封装代码,因为编辑器的原因,无论怎么编辑,它还是给修改了代码.文末提供了封装代码的下载地址(无需积分) ...

  3. html、css和js原生写一个模态弹出框,顺便解决父元素半透明子元素不透明效果...

    模态框: html部分: <!-- 按钮 --><button id="box" onclick="pop_box()">弹出框< ...

  4. [Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面

    引言 查看项目代码的时候,发现项目中用到JqueryUi的弹出框,可拖拽,可设置模式对话框,就想着使用它弄一个登录页面. 弹出框 在Jquery Ui官网可定制下载弹出框,下载和弹出框下载相关的js文 ...

  5. easyui js解析字符串_EasyUI Dialog弹出框+JS执行字符串

    虽然写得不是很全面,但这是项目中经常用到的 Dialog弹出框 Div标签 Dialog内容 iconCls:图标 closed:默认关闭 modal:模态框 JS代码 function openDi ...

  6. js仿苹果风格弹出框alert插件

    下载地址 js仿苹果风格弹出框alert插件,多种调用方式. dd:

  7. 阴阳师官网导航栏 html+css

    阴阳师官网导航栏 通过css html实现阴阳师官网的顶部导航栏 具体样式 下拉列表 下拉列表的实现 下面一起看看代码 <div class="header">< ...

  8. js弹出框,点击切换事件,jQuery改变一部分css样式

    文章目录 js,声明变量注意点 js弹出框 js.flag=0的使用 js,隐藏样式 jquery改变css样式 js,声明变量注意点 <script>// 声明多个变量 var age= ...

  9. 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)

    利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)   作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...

最新文章

  1. SLAM十四讲笔记1
  2. 【Javascript基础】
  3. cropper初始化_jQuery.cropper中文API详解
  4. 方法类型,模块与Stream流
  5. python路线选择试题_python例题练习
  6. 在控制台中操作MYSQL数据库步骤以及一些小问题
  7. XX系统性能测试报告模板
  8. 把栏杆拍遍--辛弃疾
  9. 如何清除谷歌浏览器中的counterflix广告病毒
  10. 电路基础里的等效电路
  11. 企业的商业模式和盈利模式概述,业务流程再造
  12. 使用qemu模拟X86处理器加载linux kernel+busybox文件系统并调试
  13. 阿里云Apsara Clouder基础技能认证:阿里巴巴编码规范题库(最新题库大全)
  14. 中国卫生材料及医药用品行业发展前景与投资战略规划分析报告2022-2028年
  15. python3 姓名随机生成脚本--random.randrange()用法
  16. rust拆除拆除指令_Rust 输出到命令行
  17. 电脑公司 雨林.番茄.深度.龙帝国.系统之家.系统光盘收录大全
  18. Squid服务器应用(Squid传统代理、Squid透明代理、ACL访问控制、Squid日志分析、Squid反向代理)
  19. 单片机MCS-51系列指令快速记忆法
  20. 考完研的人究竟有多无聊,家用路由器也能给折腾成Web服务器

热门文章

  1. 拿到jar文件,如何快速运行
  2. 关于windows上开启远程桌面连接不上的问题解决
  3. 暗备用的运行状态_何为热备用、冷备用、明备用和暗备用
  4. ts必备基础知识总结
  5. html文档中用于表示页面标题的标记对是,汽车发动机拆装与检修实训超星尔雅答案...
  6. Codeforces Round #669 (Div. 2)B. Big Vova
  7. 互联网券商驶入快车道
  8. Android 9.0 闪退 (部分手机闪退)兼容
  9. ASA防火墙之MPF配置监控流量
  10. 纯CSS3 制作交通信号灯红绿灯动画效果