写点什么

简单聊聊配合 dialog 使用 popover 的问题

作者:Adrian Roselli

  • 2023-06-14
    北京
  • 本文字数:1441 字

    阅读完需:约 5 分钟

简单聊聊配合dialog使用popover的问题

首先澄清一点,这里要讨论的不是 popover 和 dialog 谁好谁错,也不是要站队支持哪一方。我想聊的是如何通过模式混合和模式匹配帮助用户解决潜在问题。

 

00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00

     

    台本:视频演示的是弹窗跳出来,挡住了带 ARIA dialog 角色的<div>模态对话框。焦点切换和手动关闭都没法解决这个遮挡问题。但是,原生 HTML <dialog>元素能够正常位于弹窗更前方。演示中的对话框是一段超时警告,提示用户按下按钮,否则会在一份复杂表单的第 14 步(共 72 步)中被注销。

     

    这个演示页面,模拟的是我们怎么争分夺秒地填写一份复杂的多步骤表单。当用户点击切换提示来获取关于当前字段的更多信息时,系统会弹出一个对话框,提示用户除非点击按钮、否则将会被注销。但这个延时按钮被切换提示给挡住了。用户按下 Esc 想关闭切换提示,但关掉的却是对话框。也就是说,用户没法正常延长注销时间,只能眼睁睁看着自己已经填完的内容全部作废,然后气得骂娘。

     

    但使用〈dialog〉元素实现的对话框就不会遇到这个问题。

     

    所以我强烈建议大家,除非确认所有模态对话框都已经被转换成了原生 HTML <dialog>、或者经过了严格的布局位置测试,否则别轻易在项目中引入 popover。有些朋友可能轻蔑地笑了——别嚣张,您只是目前还没用上,再过一、两年可就说不准了。

     

    这个示例来自 Chrome Canary 115,并不属于最终版本,所以情况仍有改善的可能。

     

    来点技术

     

    我曾在之前的文章中讨论过用<div role="dialog">实现对话框的好处,这种方式通过了可访问性测试而且效果良好。其中还用到了 inert polyfill,我不确定 inert 会不会影响这次的演示,感兴趣的朋友可以亲自试试。

     

    Scott O’Hara 也在今年 1 月的帖子(https://www.scottohara.me/blog/2023/01/26/use-the-dialog-element.html)中,整理了一份关于在对话框中合理使用原生 HTML <dialog>元素的指导。

     

    5 月 23 日,Google Chrome 开发者博客发布了 popover API 的介绍帖子。其中解释了手动关闭弹窗和自动关闭弹窗的区别,二者在演示视频里都有体现。后者是在弹窗容器失去焦点时关闭,而前者则要求用户手动触发。

     

    在视频中,popover 关闭方法并不会影响它与<div role="dialog">的交互。但是将<dialog> 与手动关闭的 popover 一同使用时,弹窗容器会被放置在模态后面且不会遮挡我们正确查看模态内容。当弹窗被设置为自动(浅色,默认)关闭时,则<dialog> 一出现弹窗就会消失。

     

    下图所示为实际效果。我没有费力气修改切换提示,实在太麻烦了。总之截至本文撰稿时,这些情况仅适用于 Chrome Canary。欢迎大家自己上手体验,但我可以保证,切换提示就是不愿出现在我们希望它们出现的位置上。



    回顾

     

    说点题外话,如果大家只打算用 popover 实现视觉或者行为效果,而无需考虑语义、结构、DOM 顺序、内容乃至附加的元素流,那要不要 popover 其实影响不大。

     

    考虑到目前 <dialog>的支持效果仍然比 popover 更好,所以在新项目中继续用 <dialog>应该也没啥问题。但如果您的新项目需要用到稳健性较差的框架/库,那么根据 Scott 的指导意见,最好别选 <dialog>。

     

    对于现有项目,其中或多或少可能存在与非-<dialog>代码相关的技术债务。那么在用<dialog>替换现有对话框之前,建议大家先别急着把任何 popover 功能列进开发日程,否则情况就是视频演示那个样子。

     

    原文链接:


    https://adrianroselli.com/2023/05/brief-note-on-popovers-with-dialogs.html


    相关阅读:


    Vue3 使用 Teleport 封装 一个 Dialog

    Dialog 对应的 Context 必须是 Activity 吗?

    面向函数编程:关于函数式组件、dialog 的 api 化

    Flutter 让你的 Dialog 脱胎换骨吧!

    2023-06-14 14:34116264

    评论

    发布
    暂无评论
    发现更多内容

    与火山引擎合作深化,观测云携一站式监控解决方案登陆万有商城

    观测云

    火山引擎

    TinyPro Vue 1.1.0 正式发布:增加细粒度权限、页签模式、多级菜单,支持Vite/Rspack/Farm等构建工具

    OpenTiny社区

    开源 前端 组件库 OpenTiny TinyVue

    打造去中心化交易平台:公链交易所开发全解析

    区块链软件开发推广运营

    交易所开发 dapp开发 链游开发 公链开发 代币开发

    OKR工作法软件大盘点,7款优秀工具助力目标管理

    易成研发中心

    赛博威数字营销一体化高效运维,更高效、更全面、更稳定、更创新

    赛博威科技

    运维 数字营销 赛博威

    小程序SDK在跨端app开发是否有优势?

    FinFish

    跨端应用开发 小程序容器技术 跨端技术 跨端app开发 小程序SDK

    什么工具可以解决团队协作障碍?

    秃头小帅oi

    Java日志手机号脱敏工具类

    EquatorCoco

    Java 工具

    如何选择团队网盘?企业常用的8款工具盘点

    易成研发中心

    明基 RD280U显示器——程序员之选

    Yan-英杰

    程序员

    怎么把域名解析到IP地址上?怎么去设置域名解析?

    国科云

    Java面试无分布式微服务经验,该如何弥补?

    了不起的程序猿

    分布式 微服务 后端 架构师 java面试

    中国恩菲:有色金属行业如何使用 IoTDB?|用户零距离第一期

    Apache IoTDB

    ETL工具观察:ETLCloud与MDM是什么关系?

    RestCloud

    系统集成 ETL 数据集成 MDM

    手撕单例的 5 种写法!

    王磊

    Web自动化测试中的元素定位与显式等待

    测试人

    软件测试

    Spring Cloud+Nacos+KMS 动态配置最佳实践

    阿里巴巴云原生

    阿里云 云原生

    赛博威携手百度智能云,开启数字营销新未来

    赛博威科技

    人工智能 AI 百度智能云 数字营销 赛博威

    SOL项目开发代币Dapp的基本要求

    区块链软件开发推广运营

    交易所开发 dapp开发 链游开发 公链开发 交易所开发代币开发

    云服务器的故障率比物理服务器更低吗?

    Ogcloud

    云主机 云服务器 香港云服务器 美国云服务器 云服务器租用

    官方提供平台,导师倾情陪练,助力学生玩转开源|Greptime 参与「开源之夏」的第二年正式收官!

    Greptime 格睿科技

    数据库 开源 活动 开源之夏

    一线GPMI,牵动智能大屏;一触星闪,点亮万家欢声

    脑极体

    AI

    企业如何构建自己的 AI 编码能力

    cloud studio AI应用

    编码 #人工智能 腾讯云AI代码助手 #AI #大语言模型

    签约案例|GreptimeDB 为数据驱动的汽车应用带来安全高效的车云一体解决方案

    Greptime 格睿科技

    数据库 车联网 汽车 车云一体

    掌握API开发:分步实操技巧

    幂简集成

    API 入门指南

    CDN的作用以及哪些企业适合使用CDN?

    Ogcloud

    CDN 网络加速 CDN加速 CDN技术 CDN网络加速

    深入编码规则:构建灵活且可扩展的编号生成器

    inBuilder低代码平台

    低代码

    NFTScan | 11.25~12.01 NFT 市场热点汇总

    NFT Research

    NFT\ NFTScan

    Hume AI 语音控制功能:创建个性化语音;李飞飞空间智能首个模型:单图生成 3D 交互场景丨 RTE 开发者日报

    声网

    让每笔营销费用发挥更大价值,为生意持续增长创造可预见的未来!

    赛博威科技

    数字营销 营销费用管理 赛博威

    简单聊聊配合dialog使用popover的问题_大前端_InfoQ精选文章