【发布时间】:2022-07-24 05:42:42
【问题描述】:
我们有一些可用于用户输入的自定义组件(CustomSelect、SegmentedControl、CustomCheckbox 等)。
在某些情况下,它们在内部使用语义 html 标记,如 radiogroup 或 select,但在某些情况下,标记完全使用 div 和 span 元素编写,并且使用 aria 属性提供可访问性。对于这样的实现,有没有办法将 label 元素与它们相关联,使它们的行为类似于原生表单输入 wrt 标签行为,或者更好的是,有没有办法让它们像原生表单输入一样对待?
想到的事情:
- 使用视觉隐藏的 html 表单元素,它以某种方式包装自定义,并以某种方式隐藏其语义。
- 字段集和图例在某些情况下可能有意义
- 使用 javascript 模仿标签功能
是否有任何现有的模式?
【问题讨论】:
-
您能解释一下为什么 aria-label、aria-labelledby 和 aria- describeby 不适合您的需求吗?谢谢。
-
因为它们不适合视觉用户。鼠标用户无法点击它们来关注自定义输入(或触发自定义输入的默认行为)
-
当您不使用语义 HTML 时,您总是需要 javascript。所以只需使用语义 HTML,这就是它存在的原因。
-
当然,我们在任何有意义的地方都使用语义 html,但单独的 html 并不能提供所有不同的输入类型或复杂的小部件。以 menubutton 模式为例。 HTML 没有符合此要求的本机菜单实现。 w3c.github.io/aria-practices/examples/menu-button/… 。在某些情况下,您绝对可以使用一些语义元素来解决这些限制,但这并不总是足够的
标签: javascript html reactjs forms accessibility