亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

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

作者:Adrian Roselli

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

    阅读完需:约 5 分钟

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

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

 

00:00 / 00:00
    1.0x
    • 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:3432048

    评论

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

    如何按照固定比例缩放模型

    3D建模设计

    3D模型 等比缩放

    如何给模型换色

    3D建模设计

    3D模型 颜色 材质

    浅析“代码可视化” | 京东云技术团队

    京东科技开发者

    架构 字节码 企业号10月PK榜 代码可视化

    Elasticsearch Relevance Engine---为AI变革提供高级搜索能力[ES向量搜索、常用配置参数、聚合功能等详解]

    汀丶人工智能

    ES 向量检索 搜索系统 语义搜索

    想让你的代码简洁,试试这个SimpleDateFormat类高深用法

    华为云开发者联盟

    Java 后端 开发 华为云 华为云开发者联盟

    HarmonyOS音频开发指导:使用AVPlayer开发音频播放功能

    HarmonyOS开发者

    HarmonyOS

    高性能计算与多模态处理的探索之旅:英伟达GH200性能优化与GPT-4V的算力加速未来

    蓝海大脑GPU

    万字长文:拆解银行数智运营之困!

    京东科技开发者

    人工智能 数字化转型 金融 企业号10月PK榜

    对话在行人|九州通:携手用友打造招聘共享中心实现招聘数智化

    用友BIP

    2023全球商业创新大会 对话在行人

    如何合并模型对象

    3D建模设计

    模型 3D

    不会写代码同学的福音——AI 代码生成器 Amazon CodeWhisperer(通过注释写代码)

    亚马逊云科技 (Amazon Web Services)

    人工智能 CodeWhisperer Amazon Lambda 云上探索实验室

    选择香港服务器发展线上业务的未来趋势:技术与市场的变化

    一只扑棱蛾子

    香港服务器

    深入理解 Netty FastThreadLocal

    vivo互联网技术

    性能优化 Netty ThreadLocal 内存泄漏 FastThreadLocal

    研发日常踩坑-Mysql分页数据重复 | 京东云技术团队

    京东科技开发者

    MySQL 数据库 分页 企业号10月PK榜

    即刻报名,企业服务与新经济论坛亮点提前揭秘!

    SelectDB

    数据库 大数据 数据仓库 实时数仓 apache doris

    如何修改模型粗糙度增强模型表面粗糙度

    3D建模设计

    3D模型 粗糙度

    产品需求交付质量保证的“七重门” | 京东云技术团队

    京东科技开发者

    测试 交付质量 企业号10月PK榜

    和鲸ModelWhale与中科可控X系列异构加速服务器完成适配认证,搭载海光芯片,构筑AI算力底座

    ModelWhale

    gpu 服务器 信创 算力 数据科学

    峰会倒计时 3 天!互联网与文娱论坛演讲亮点预告!

    SelectDB

    数据库 大数据 数据仓库 实时数仓 apache doris

    瑞技伙伴 | ZPE 带外管理方案,稳固您的IT世界

    Bytebridge

    数据中心 带外管理方案 ZPE

    cpu温度监测推荐 Turbo Boost Switcher Pro激活最新版

    胖墩儿不胖y

    Mac软件 温度监测工具

    管控变更对提升质量的重要性

    老张

    质量保障 配置管理

    OpenHarmony持久化存储UI状态:PersistentStorage

    OpenHarmony开发者

    OpenHarmony

    云计算进入 AI 原生时代

    Baidu AICLOUD

    大模型 RDMA AI 原生云

    Mac电脑高效音频录制 Piezo 最新 for mac

    mac大玩家j

    Mac软件 音频录制软件 录音软件

    腾讯云入选2023 Gartner分布式混合基础设施魔力象限

    Geek_2d6073

    C4D 2024插件:Arnold for mac(C4D S2024阿诺德渲染器) v4.6.6.1完美激活版

    mac

    苹果mac Windows软件 Arnold for Cinema 4D C4D R24插件

    梦幻西游手游详细图文架设教程

    echeverra

    梦幻西游

    即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换

    JackJiang

    网络编程 即时通讯 IM

    正确选择数据库安全运维平台的几个原则-行云管家

    行云管家

    数据库 数据安全 数据库安全 安全运维

    哪家堡垒机支持国密算法?有哪些功能?

    行云管家

    运维 堡垒机 安全运维 国密浏览器 国密算法

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