当前位置:首页 > 科技  > 软件

借助CSS has实现打开弹窗时自动锁定滚动

来源: 责编: 时间:2024-04-15 18:14:01 248观看
导读分享一个 CSS 小技巧在平时开发中,经常会遇到这样一种问题:当打开一个弹窗时,后面的页面是可以滚动的,演示如下图片那么,该如何锁定页面的滚动呢?一、传统的实现方式传统的方式其实也不复杂,就是在打开弹窗时阻止滚动就行了,

J5D28资讯网——每日最新资讯28at.com

分享一个 CSS 小技巧

在平时开发中,经常会遇到这样一种问题:当打开一个弹窗时,后面的页面是可以滚动的,演示如下J5D28资讯网——每日最新资讯28at.com

图片图片J5D28资讯网——每日最新资讯28at.com

那么,该如何锁定页面的滚动呢?J5D28资讯网——每日最新资讯28at.com

一、传统的实现方式

传统的方式其实也不复杂,就是在打开弹窗时阻止滚动就行了,通常是改变overflow属性J5D28资讯网——每日最新资讯28at.com

const openModal = () => {  document.body.style.overflow = 'hidden'}const closeModal = () => {  document.body.style.overflow = 'auto'}

如果是在现代框架里,比如vue,可以用监听弹窗状态来实现J5D28资讯网——每日最新资讯28at.com

watch(  () => show.value,  (val) => {    if (val) {      document.body.style.overflow = 'hidden'    } else {      document.body.style.overflow = 'auto'    }  },)

这样就能锁定滚动了J5D28资讯网——每日最新资讯28at.com

图片图片J5D28资讯网——每日最新资讯28at.com

二、传统方式的局限

虽然上面的实现看似完美,其实还有潜在问题的。比如有多个弹窗,弹窗覆盖的情况下,这个时候锁定就会出问题了。J5D28资讯网——每日最新资讯28at.com

图片图片J5D28资讯网——每日最新资讯28at.com

因为在关闭第二个弹窗的时候,页面已经解除锁定了,所以在第一个弹窗还在的时候,页面已经可以滚动了J5D28资讯网——每日最新资讯28at.com

如果想要优化这个问题,还需要做进一步的判断J5D28资讯网——每日最新资讯28at.com

三、借助 CSS has 实现

现在有了CSS :has伪类,一切就好办了,无需过多的判断,直接一个选择器搞定J5D28资讯网——每日最新资讯28at.com

body:has(dialog[open]){  overflow: hidden}

这行选择器表示,只要有属性为open的弹窗,body就自动锁定,无论有多少层弹窗J5D28资讯网——每日最新资讯28at.com

图片图片J5D28资讯网——每日最新资讯28at.com

是不是非常简单?J5D28资讯网——每日最新资讯28at.com

完整代码可以查看:CSS has lock scroll (juejin.cn)[1]J5D28资讯网——每日最新资讯28at.com

四、has已经全兼容了

提一下兼容性,目前现代浏览器都支持了,如下J5D28资讯网——每日最新资讯28at.com

图片图片J5D28资讯网——每日最新资讯28at.com

[1]CSS has lock scroll (juejin.cn): https://code.juejin.cn/pen/7357637625827573800J5D28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-83625-0.html借助CSS has实现打开弹窗时自动锁定滚动

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 轻松打造Windows服务:将.NET Core项目转化为无缝运行的后台服务

下一篇: Go 如何缓解来自软件依赖的恶意攻击?

标签:
  • 热门焦点
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的“新电商三兄弟”成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    日前OPPO官方宣布,全新的OPPO K11将于7月25日正式发布,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼IMX890主摄,堪称是2000档位影像表
  • 世界人工智能大会国际日开幕式活动在世博展览馆开启

    30日上午,世界人工智能大会国际日开幕式活动在世博展览馆开启,聚集国际城市代表、重量级院士专家、国际创新企业代表,共同打造人工智能交流平台。上海市副市
Top