2024 Web 新特性 - 使用 Popover API 创建弹窗

Popover API 为开发者提供了一种声明式的方式来创建各种类型的弹窗。目前已在所有三大浏览器引擎中可用,并正式成为 Baseline 2024 的一部分。

一直以来,我们在实现弹出式菜单、提示框或信息卡片时,往往依赖于各种JavaScript库或者自定义CSS样式来完成。虽然这些方法有效,但它们通常伴随着代码冗余、兼容性问题。Popover API正是为了简化这一过程而生,它为Web开发者提供了一套标准化的方法来创建和控制弹出窗口,确保了跨浏览器的一致性和易用性。

Popover API 弹窗的一些特点如下:

  1. 弹窗将出现在页面的最顶层,无需您调整z-index。
  2. 点击弹窗区域外部将关闭弹出窗口并返回焦点。
  3. 打开弹窗后,下一个制表符停止位置将位于弹窗内部。
  4. 按下esc键或双击切换将关闭弹窗并返回焦点。
  5. 将弹窗元素与弹窗触发器进行语义上的连接。

使用 Popover API 创建一个最基础的弹窗非常简单,只需要一个button 按钮用于触发弹窗,和一个弹窗 div 元素。

  • 首先,给弹窗 div 元素添加 popover 属性,并给它设置一个唯一 id 。
  • 然后,在给按钮的添加popovertarget属性,值设置为弹窗的id

代码如下:

<button popovertarget="my-popover">打开弹窗</button><div id="my-popover" popover><p>我是一个包含一些信息的弹窗。 按下 <kbd>Esc</kbd> 键或点击弹窗外部将我关闭<p>
</div>

此时一个最简单的点击按钮显示弹窗功能就实现了。

演示效果如下:

通过 popover 属性制作弹窗,基础版 - 在线演示​
 

其中属性 popover 如果不赋值,则等同于 popover="auto"auto值表示启用点击弹窗外部则自动关闭弹窗。如果设置popover="manual",则点击弹窗外部不会再自动关闭弹窗,此时你将需要自定义关闭按钮来触发弹窗的关闭。

例如:

<button popovertarget="my-popover" class="trigger-btn">打开弹窗</button><div id="my-popover" popover=manual><p>我是一个包含一些信息的弹窗。按下❌按钮即可将我关闭<p><button class="close-btn" popovertarget="my-popover" popovertargetaction="hide"><span aria-hidden="true">❌</span></button>
</div>

演示效果如下:

通过 popover 属性制作弹窗,自定义关闭按钮 - 在线演示​
 

此时,你会看到点击弹窗外部不会再自动关闭弹窗,点击自定义的关闭按钮才会关闭弹窗。

 

有关 popover 弹出窗口的 MDN 文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/721325.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 16.8升级nodejs

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - $node --version v16.20.2

lodash已死?radash库方法介绍及源码解析 —— 判断方法篇

目前为止,radash库的所有方法我们已经分享完毕。如果你想尝试使用,又或者想了解下源码,阿瓜的文章都值得一读,相信你总能有所收获。后续我们回整理一份使用说明进行发布。前言 大家好,我是阿瓜。一个励志分享更多技术的前端瓜 ~ 我们已经分享了 radash 库中数组、对象等相…

PyCharm的安装

PyCharm的安装 PyCharm是一款由JetBrains公司开发的强大的Python集成开发环境(IDE),它提供了代码分析、图形化调试器、集成单元测试、版本控制等功能,极大地提高了Python开发者的工作效率。以下是PyCharm社区版的详细安装步骤。 一、下载PyCharm安装包 首先,我们需要访问P…

allure安装配置使用 简单版

环境安装 一、安装配置JDK 先检查是否安装JDK,cmd中查看java版本:java -version若未安装,以下面的步骤安装: 1、Oracle官网下载JDK:https://www.oracle.com/java/technologies/downloads/,请下载安装JDK8及以上版本 2、安装JDK 3、JDK配置环境变量:win10系统右击“我的电…

dubbo~全局异常拦截器的使用与设计缺陷

异常拦截器ExceptionMapper 在JAX-RS(Java API for RESTful Web Services)中,ExceptionMapper接口用于将Java异常映射到HTTP响应。通过实现ExceptionMapper接口,你可以自定义如何处理特定类型的异常,并生成相应的HTTP响应。 优先级和选择 当有多个ExceptionMapper可用于处…

RPC--远程过程调用协议

简单介绍一下RPC什么是RPC? RPC的全称是:Remote Procedure Call,远程过程调用。它的作用就是允许一台机器上的程序去调用另一台机器上的程序,而不会意识到这个过程是远程的,也就是程序员不需要知道网络通信中的任何细节。 为什么要使用RPC?提高开发效率:程序员不需要再关…

echarts 曲线中显示最大值进行标签样式的设置和修改

曲线中最大值最小值需要完善一些相关的信息 let color = [ #ee6666, #73c0de, #3ba272, #fc8452, #9a60b4, #ea7ccc] let xData =[00:00, 04:00, 08:00, 12:00, 16:00, 20:00, 24:00] //item 是循环的后台返回的数据,用来构造有几条曲线 //关键代码还是markPoint中的内容 data…

终于搞懂了!原来vue3中template使用ref无需.value是因为这个

前言 众所周知,vue3的template中使用ref变量无需使用.value。还可以在事件处理器中进行赋值操作时,无需使用.value就可以直接修改ref变量的值,比如:<button @click="msg = Hello Vue3">change msg</button>。你猜vue是在编译时就已经在代码中生成了.…

用 Python 撸一个 Web 服务器-第2章:Hello World

从一个 Hello World 程序说起 要编写 Web 服务器,需要用到一个 Python 内置库 socket。Socket 是一个比较抽象的概念,中文叫套接字,它代表一个网络连接。两台计算机之间要进行通讯,大概分为三个步骤:建立连接,传输数据,关闭连接。而 socket 库为我们提供了这个能力。 按…

go pool

来自: sync.Pool 原理 sync.Pool 核心对象有三个New:函数,负责对象初始化 Get:获取 Pool 中的对象,如果 Pool 中对象不存在则会调用 New Put:将对象放入 Pool 中New func Pool 的结构很简单,就 5 个字段 type Pool struct { ... New func() interface{} }字段 New 是…

CSP历年复赛题-P2119 [NOIP2016 普及组] 魔法阵

原题链接:https://www.luogu.com.cn/problem/P2119 题意解读:在一组数里找出所有的Xa,Xb,Xc,Xd的组合,使得满足Xa<Xb<Xc<Xd, Xb-Xa=2(Xd-Xc), Xb-Xa<(Xc-Xb)/3,并统计出每个数作为A,B,C,D出现的次数。 解题思路: 1、枚举(O(n^4)) 首先想到的是通过4重循环枚…

应用解析 | 面向智能网联汽车的产教融合解决方案

经纬恒润融合二十多年的行业经验,将实际的工程应用、项目需求引入到产教融合中,打破院校与企业之间的界限,做到所学即所用,毕业即就业。 背景介绍随着科技的飞速发展,智能网联汽车已成为汽车产业的新宠,引领着未来出行的潮流。然而,行业的高速发展也带来了对高素质技术技…