当使用POPOVER API时,我想打开一个<div role="button">的POP OVER,但这似乎不起作用.以下是一段try 这样做的代码片段.

<div role="button" popovertarget="mypopover" style="border: 1px solid black; cursor: pointer;">Broken toggle</div>
<button popovertarget="mypopover">Happy toggle</button>

<div id="mypopover" popover>Popover content</div>

它似乎只有在调用元素为<button>的情况下才起作用.

有人知道调用元素是否可以是<button>以外的其他元素吗?

推荐答案

Select 在HTML中使用哪个标记不仅仅是一个语义问题.许多元素也有内置的行为,这也是在JavaScript中的元素上公开的.虽然可以通过像role这样的属性来控制元素的语义,但这并不会改变它们的实际行为.

在Popover API的情况下,有一个限制,即只有<button><input>个元素能够具有popovertarget属性.MDN's page on the Popover API个人记录了这一点.

像往常一样,可以使用无效的标记编写HTML,但浏览器会忽略这些标记.类似于如果您try 将href属性添加到<p>标记上,它将不会变成链接.

在使用role来更改元素的语义时,您应该非常仔细和谨慎地考虑,而不是从一开始就只使用适当的元素.在这个使用<div>的示例中,您应该使用<button>,但您失go 了几个内置到按钮中的功能,例如能够接收键盘焦点,以及将某些按键视为"单击"事件.对于使用键盘而不是鼠标等指针设备的人来说,这些是非常重要的辅助功能,例如,因为他们可能是盲人或有运动障碍.

可以通过提供元素tabindex="0"和添加事件侦听器来处理这些键盘事件等方法来复制这些事件,但只使用<button>要容易得多.如果问题仅仅是样式的问题,根据我的经验,当人们避免使用<button>元素来处理真正应该使用的元素时,通常就是这种情况,最好通过css来解决这个问题.

如果您也是如此,那么您可能有兴趣了解一下unsetcss属性,它现在是supported by all modern browsers,可以更容易地对按钮应用"从头开始"的样式.

Html相关问答推荐

关于角内按钮范围的混乱

Vue.js复选框对齐问题:在表格单元格中居中复选框

D3.js—分组条形图—更新输入数据时出错

由于列中的图像,它们不会随FlexBox中的窗口大小进行调整

<;img>;和具有负边距的元素的堆叠顺序

为什么XPath返回的元素比我预期的要多?

如何在图像中垂直和水平居中显示文本?

让多对图像在各自的div中叠加

如何创建嵌套的动态表单元素

如何将文本环绕心形(而不仅仅是圆形)?

悬停表格单元格文本时,使元素的字体大小更大,同时保持表格单元格的高度不变

如何从通过 find-each 方法(在 Rails 应用程序中)生成的列表创建下拉菜单?

Web 组件 #shadow-root css 泄漏到文档

在React中如何处理HTML本地日期输入?

视频添加到 Html 与 Github 不同步

pandas `to_html()` - 如何只使特定的行有边框

如何在Bootstrap卡片底部添加波浪形状

使用 sprite 的问题,字符 sprite 中的额外边距

我应该如何使这个带有标签的隐藏复选框可访问

禁用的 Select 标签没有在 chrome 上的 css 中指定的 colored颜色