我需要在小设备上的模态/全屏面板中显示某些内容,由按钮触发。在大型设备上,相同的内容总是显示出来,然后触发器被隐藏起来。
您如何处理这一问题以实现可访问性?
当前,我有此设置
<button type="button" aria-expanded="false" aria-controls="filter-panel">Filter</button>
<div class="o-panel" id="filter-panel">Form</div>
最初,o-panel
通过CSS隐藏在小型设备上(在以小型设备为目标的媒体查询中)。当触发器命中时,我将aria-expanded
设置为true,并向面板本身添加一个active
类,它通过CSS显示全屏o-panel
。在大型设备上,我隐藏该按钮,并始终通过CSS(在针对大型设备的媒体查询中)内联显示o-panel
中的内容,在HTML中找到这些内容。
这对可访问性有意义吗?我的面板上没有role=“dialog”
,因为在大型设备上,它只是内容,而不是对话框。我的按钮藏在这些大设备上是不是有问题?
我真的被困在我该做的事上了。如果我将role=“dialog”
添加到我的o-panel中,我是否应该为大型设备删除该属性,因为它实际上不是模态?
或者,如果触发器被命中,我应该在一个具有role=“dialog”
的div中移动复制/移动我的O-panel
中的内容吗?我只是不想要两份相同内容的副本。
在大型设备上,您需要做几件事。
首先确保按钮是显示:无
,而不是可见性:隐藏
或其他任何东西,否则它仍将显示在可访问性树中。
模式应该出现在
之外。
这样,当模式处于活动状态时,您就可以将aria-hidden=“true”
添加到
元素中,以阻止用户在屏幕阅读器上在模式之外导航。(屏幕阅读器用户使用标题、链接等来导航页面,这样您就不能截取选项卡键。)
现在我来自移动第一的哲学,所以我会说你的标记应该是移动第一。这意味着将模式放在
之外,正如前面讨论的那样。
这显然会在桌面上造成一个巨大的问题。您现在将内容放在了不该放在的地方。
正因为如此,你只有两个选择。
使用JavaScript在预定义的占位符
因此,您保留您的mobile first设计,然后使用JavaScript找到您的modal的innerHTML
并将其移动到您的Holder内的主体中。然后删除模态本身以确保。
当你在它的时候,我也会删除按钮,以防有人将屏幕调整为移动视图,我们不想要一个按钮没有任何地方。
或者,不要删除第二个内容,这样人们就可以调整浏览器的大小,只需要增加一些DOM节点(因此,只要您的模态内容不超过100个DOM元素,我就会说这样做。)
如果您决定保留模态,请确保也是display:none
,原因与按钮相同,我们不希望人们意外地访问它。
重复内容。
我知道,我知道,重复的内容只是,呃。
但有时如果是最好的,你就不得不忍受它。
通过从一开始就将内容复制到一个div中,您确实会得到一些好处。
优点
缺点
这将仍然是我的偏好,保持简单!这要强得多
客户端提示是解决这一问题的一种方法,将响应式设计转变为移动端与桌面端和响应式设计的混合体。
当client hints有足够的市场份额时,您可以简单地使用头来决定从初始请求发送哪个版本的页面。
如果你愿意让25%的用户在桌面上看到你的信息的移动版本,你可以在今天实现这个功能,这取决于信息的重要性。
还有一些其他的事情要考虑,你没有提到,所以我想我补充一下,以供参考。
我已经提到过,当模式处于活动状态时,将aria-hidden
添加到模式之外的所有元素。
为了将来证明您的应用程序在模式之外的项上使用inert
。支持不是很好(没有存在!),但每一点帮助,它很有可能得到实现!
如果你想,你可以把它填满,但我不认为它已经移出了草案的规格,所以我们只是使用它的原样。
还要将aria-modal=“true”
添加到您的模式中。
如果你想要更多的信息,我在这个答案中更详细地介绍了这些要点。
问题内容: 我注意到人们在1:1的比较中涵盖了某些显示属性的细节,但是在说明差异时还没有涉及很多。可能有人解释各种inline-之间的差异 的东西 显示标签? 对w3schools之类的地方进行更详细的定义会产生奇迹。 问题答案: 对于任何具有块和内联变体的显示类型,唯一的区别是,该显示类型具有以内联方式放置的框(即,[以内联格式设置的上下文),而另一种具有格式化为块级框的框,这取决于大多数情况。
我知道以前有人问过这个问题,但那篇文章中的解决方案对我不起作用。 我刚刚开始学习Android编程,当时正在做一个模型。它可以在Android Studio中正确显示,但不能在我的设备上显示。图像和背景色显示正确,但没有文本显示。我试过改变字体和字体颜色。需要改变什么? 我有另一个使用RelativeLayout的示例,它显示正确,但这个ConstraintLayout不正确。 第一个图像来自AS
问题内容: 我想了解当CSS是CSS元素的DOM子元素(因此block元素是inline元素的子元素)时会发生什么情况。 CSS 2.1规范的“ 匿名块框”部分描述了这种情况:该示例包括以下规则… …以及随附的文字说… BODY元素包含一个匿名文本块(C1),然后是一个块级元素,然后是另一个匿名文本块(C2)。结果框将是围绕BODY的匿名阻止框,其中包含C1周围的匿名阻止框,P阻止框和C2周围包含
在面板上翻页显示16个图片和信息,如何设置div内的模块靠左显示,模块内容按行显示,设置了float没有效果 中间部分里面的图片,文字显示在图片下方 第二页图片靠左显示
null 在我的path变量中,我添加了*C:\androidsdkinstallation\android-sdk\platform-tools\;C:\androidsdkinstallation\android-sdk\tools\;C:\java32bitinstallation\;C:\java32bitinstallation\bin* 另外,在阅读了net中的某个地方之后,我添加了J
我已经面对这个问题很长一段时间了。运行“adb设备”向我展示了一个额外的虚拟设备,尽管它被命名为模拟器-5554。仅供参考,我也没有任何模拟器在运行。 亚行设备 连接的设备列表:< br> xxxxxxx设备(实际设备)< br >仿真器-5554设备(虚拟设备显示为设备)。 我该如何收拾残局?