Redian新闻
>
简单聊聊配合 dialog 使用 popover 的问题

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

公众号新闻

作者 | Adrian Roselli
译者 | 核子可乐
策划 | 丁晓昀
首先澄清一点,这里要讨论的不是 popover 和 dialog 谁好谁错,也不是要站队支持哪一方。我想聊的是如何通过模式混合和模式匹配帮助用户解决潜在问题。

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


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

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

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

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

来点技术

我曾在之前的文章中讨论过用实现对话框的好处,这种方式通过了可访问性测试而且效果良好。其中还用到了 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(https://xie.infoq.cn/article/93d377915aeacc90d7d385857 )

Dialog 对应的 Context 必须是 Activity 吗?(https://xie.infoq.cn/article/c3236c70d845787fec15bd616 )

面向函数编程:关于函数式组件、dialog 的 api 化 (https://xie.infoq.cn/article/f56c437e77112c59caa201c3c )

Flutter 让你的 Dialog 脱胎换骨吧!(https://xie.infoq.cn/article/9bfad1aa9ce793ffe032ebbac )

点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!

今日好文推荐

GitHub Copilot:做出一个划时代的产品,只需要 6 个人

苹果Vision Pro商标撞车华为;Vue作者入驻爱发电赞助平台,称国内赞助非常少;14岁天才少年入职SpaceX|Q资讯

深度:为什么中国数据库领域没有出现像Snowflake这样的巨头?

十七年来奇葩大崩溃!为不让OpenAI和谷歌白拿数据,Reddit 收取巨额API 费用还诽谤开发者,社区爆发大规模抗议

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
叔叔的问题,阿姨的问题,还是谁的问题Young Chinese Love Everything About Sweden. Except Living There.若蓝小诗:炸裂Cell Discovery | 严欢课题组发表关于MERS-CoV相关病毒的宿主范围与跨种传播机制的最新研究成果请教:一个关于辞职和sign a contract with a new employer 的问题。关于XHS 的问题LGBTQ彩虹一族&单身贵族&丁克家庭应该如何买保险——Love Is Love无惧不同,骄傲真我每日原则:为了分清楚哪些是人手不足的问题,哪些是能力不够的问题Majority of Parents Stressed Over Children’s Education: Survey聊聊水牙线/电动冲牙器,以及选购时首先要思考的问题买 t bills 的问题罗翔毕业致辞刷屏:如果世界接受不了我们的理想,不是我们的问题,是世界的问题Xiamen hosts global development symposium崽卖爷田不心疼,官花血税有快感!Brokerage Apps Allowing Overseas Trading Pulled From App Stores《Never Have I Ever》:个人经历与亚裔身份,本质化的亚洲是否存在Hiring | Biotechnology Company Business Development ManagerAmid Recovery Push, Street Vendors Make a Comeback Across China还分不清bin log 、redo log 跟 undo log?【𝐂𝐚𝐥𝐧𝐢𝐊𝐞𝐚𝐧双皮奶无痕内裤】49元三条!巨巨巨好穿 !!简直就是辣妹顶配,食品级冰箱收纳盒【一日团】Child Sex Abuse in Rural China Is Still Being Overlooked, Report体验丨大家给评评理:这是香港国泰航空的问题,还是我的问题!Young Chinese Obsess Over MBTI, the American Personality TestGame Overpriced: Honor of Kings’ Fashion Line Leaves Fans Fuming春天的最后浪漫· 爱断情伤Postdoctoral Fellow Positions, University of Alberta#英语学习#Reserve, Preserve和Conserve有什么区别?看看你能答对这道题吗?简单聊聊赚不到钱的逻辑聊聊孩子在美国读书的问题Jiangsu City Punishes Property Developers For Selling Cheaply𝐂𝐚𝐥𝐧𝐢𝐊𝐞𝐚𝐧双皮奶内衣裤,软弹有度,上身0束缚~不平凡的人生问几个关于去加州Disneyland 和universal studio 的问题Controversy Over China’s Captive Breeding Rumbles On《Never I Have Ever》:个人经历与亚裔身份,本质化的亚洲是否存在“姐弟恋”英语怎么说?可不是“”sister-brother love"!53岁王菲与助理现身机场,小肚隆起疑似怀孕,谢霆锋或将再次当爹俞敏洪:中国孩子的问题,基本上都是家长的问题Bordering on Recovery: Life on China’s Russian Frontier
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。