HTML 验证:为什么将交互式元素放入交互式元素中无效? [英] HTML Validation: Why is it not valid to put an interactive element inside an interactive element?

查看:49
本文介绍了HTML 验证:为什么将交互式元素放入交互式元素中无效?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

免责声明:我知道它不是有效的 HTML.我想了解为什么不允许这样做?

W3C 建议像 buttona 这样的交互元素不能包含另一个交互元素.

我可以找到很多提到这条规则和一些变通办法的资源,还有一些与这如何影响可访问性和屏幕阅读器相关的资源,但几乎所有这些资源都谈到这是一项要求,但没有解释为什么.

在上面的示例中,我通过在按钮内使用可点击的 div 来实现这一点,但这不是语义 (?) 和功能明智的,它是另一个内部的交互元素.我试图理解,即使我使用这种解决方法,嵌套交互元素是否从根本上是错误的?这是一种糟糕的设计/可用性做法吗?

解决方案

答案其实原则上很简单.当你点击另一个交互元素内的交互元素时,你应该触发哪个功能?

在您的示例中,如果我单击辅助 CTA,它应该触发辅助 CTA 的功能还是应该触发卡片的功能?

下面的小提琴应该说明问题,Tab 进入第一个按钮并按 enter,然后 Tab 进入 CTA 并按 Enter.

显然你可以解决这个问题,但我认为它证明了这一点.

$('.card').on('click', function(){console.log("卡片");});$('.cta').on('click', function(){console.log("cta");});

.cta {填充:4px;背景:#00a9a9;白颜色;宽度:80px;保证金:自动;边距顶部:8px;底边距:8px;}.卡片 {宽度:200px;显示:弹性;弹性方向:列;对齐内容:居中;文本对齐:居中;}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><button type="button" class="card">卡片本身是主要的 CTA.<br/><br/>一些重要的内容要通读.一些重要的内容要通读.一些重要的内容要通读.<div class="cta" tabindex="0">辅助 CTA

</button>

此原则随后延续到屏幕阅读器和其他 增强和替代通信 (AAC) 设备.

在描述子元素时是否应该考虑父元素?如果您在

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆