最近,为我的不可知论图书馆构建强大的对话框(模态)组件,使我走上了一条迷人的道路。我最初的计划是创建一个完全独立的组件,利用新的组成部分<dialog></dialog>
可访问性收益的要素。但是,经过彻底的研究,我选择了Kitty Giraudel的A11y-Dialog库,为Vue 3,Svelte和Angular创建适配器(AEXT适配器已经存在)。这个决定源于对本地人的仔细考虑<dialog></dialog>
元素的局限性。
本地人<dialog></dialog>
元素:批判性评估
而本地人<dialog></dialog>
元素表现出希望并正在积极改善,当前的几个缺点影响了我的决定:
- 背景点击处理:默认行为在单击外部时不会关闭对话框。
-
alertdialog
角色不兼容:至关重要的alertdialog
ARIA角色,对于需要用户互动的警报和防止背景/ESC关闭的警报至关重要,无法正常运行。 -
::backdrop
伪元素限制:此样式元素仅在dialog.showModal()
以编程方式使用时可用。 - 样式不一致之处:默认样式依赖浏览器,需要JavaScript干预,破坏了“纯HTML”优势。
亚当·阿盖尔(Adam Argyle)与本地建筑有关的出色帖子<dialog></dialog>
提供有价值的解决方法,但是为了我的需求,复杂性超过了好处。
定义对话框组件的可访问性要求
我的不可知论对话框组件需要满足这些关键可访问性标准:
- 背景/ESC闭合:通过单击背景或ESC键按下关闭。
- 焦点陷阱:防止在组件之外进行选项卡。
- 双向表:向前支撑(TAB)和向后(Shift Tab)Tabbing。
- 焦点恢复:闭合时将重点返回到先前活跃的元素。
- 正确的ARIA属性:正确应用ARIA属性和切换。
- 门户(特定于框架):在JavaScript Frameworks中对门户的支持。
-
alertdialog
角色支持:正确处理警报方案。 - 身体滚动预防:可选地防止潜在的身体滚动。
-
避免本地
<dialog></dialog>
陷阱:解决本地元素的局限性。 -
自定义样式和
prefers-reduced-motion
:允许自定义样式和尊重用户偏好。
斯科特·奥哈拉(Scott O'Hara)和凯蒂(Kitty)的文章提供了更深层次的潜入对话创建的信息。这些要求清楚地强调了仅依靠本地的局限性<dialog></dialog>
元素。
审核A11Y-DIALOG以供可访问性
在集成A11Y-Dialog之前,我进行了彻底的可访问性审核:
- 手动验证:跨浏览器的测试功能。
- 自动化工具:利用灯塔,IBM平等可访问性检查器,Deque的AX和Wave。
- 屏幕读取器测试:使用下巴,NVDA和配音。
- 用户测试:(理想情况下,与真实用户进行测试)。
Deque Systems的研究表明,自动化工具仅捕获约57%的可访问性问题,这强调了手动测试和用户反馈的重要性。我使用一个简单的本地HTML页面进行了测试,以将组件与测试框架复杂性隔离开来。
审计证实了A11y-Dialog的稳健性和遵守我的可访问性要求。
特定于框架的对话框组件注意事项
许多框架提供自己的对话组件。虽然我没有亲自审核所有这些,但这里有一些资源和观察:
- Angular: Deque的2020年审核突出显示了材料和NGX-Bootstrap作为强大的竞争者。
- 反应: Reakit,Chakra-UI,材料,覆盖范围/对话框和 @React-Aria/Dialog值得探索。
- VUE: Vuetensils,Vuetify和Primevue(带有著名的重点修复问题)是选项。
- Svelte: Svelte-Headlessui,Svelterial的材料端口和Svelte-A11y-Dialog(对于自定义组件创建特别有用)。
- Bootstrap:需要手动步骤以符合可访问性。
我的不可思议的库使用A11y-Dialog适配器来兼容。
建筑自定义设计系统:权衡努力
为设计系统创建自定义对话框组件需要大量的努力,并仔细考虑可访问性的细微差别。虽然可行,但错误的风险很高,并且利用如A11y-Dialog这样的现有,经过良好测试的解决方案通常被证明更有效和可靠。斯科特·奥哈拉(Scott O'Hara)使用A11y-Dialog(以确保稳定的跨浏览器体验)的强大插件的建议是令人信服的。
结论
我选择利用A11y-Dialog,再加上Vue 3,Svelte和Angular适配器的创建,优先考虑可访问性和效率。在构建自定义组件的同时,可能会出现错误的潜力和A11y-Dialog的现有质量,使其成为了优越的选择。这次旅程强调了彻底可访问性审核的重要性以及利用维护良好的图书馆的价值。 A11y-Dialog的适应性扩展了其功能以创建抽屉组件,进一步巩固了其在我的库中的价值。
以上是对话框组件:Go Gate HTML还是自己滚动?的详细内容。更多信息请关注PHP中文网其他相关文章!

文章讨论了CSS FlexBox,这是一种布局方法,用于有效地对齐和分布响应设计中的空间。它说明了FlexBox用法,将其与CSS网格进行了比较,并详细浏览了浏览器支持。

本文讨论了使用CSS创建响应网站的技术,包括视口元标签,灵活的网格,流体媒体,媒体查询和相对单元。它还涵盖了使用CSS网格和Flexbox一起使用,并推荐CSS框架

本文讨论了CSS盒装属性,该属性控制了元素维度的计算方式。它解释了诸如Content-Box,Border-Box和Padding-Box之类的值,以及它们对布局设计和形式对齐的影响。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具