小编Ian*_* Y.的帖子

在已标记的输入元素上使用"aria-labelledby"的目的是什么?

许多ARIA演示网站使用以下代码:

<label for="name" id="label-name">Your Name</label>
<input id="name" aria-labelledby="label-name" type="text">
Run Code Online (Sandbox Code Playgroud)


aria-labelledby在这种情况下使用属性的目的是什么?该input元素已被label使用for属性的元素标记,不是吗?

html label accessibility wai-aria

78
推荐指数
1
解决办法
7万
查看次数

是否应始终在页脚元素上添加role ="contentinfo"?

在ARIA演示网站上,role="contentinfo"通常会添加footer元素.

但是,现代网页设计中的页脚可以具有创造性,因此它们还可以包含诸如辅助导航链接,社交网站链接或甚至新闻简报形式之类的内容.

以下面的页脚代码为例.如果role="contentinfo"要在添加footerp元素?

<footer>
    <nav>
        <ul>
            ........
            ........
            ........
            ........
            ........
        </ul>
    </nav>
    <form>
        ........
        ........
        ........
    </form>
    <p>© 2012 Website.com. All rights reserved.</p>
</footer>
Run Code Online (Sandbox Code Playgroud)


编辑:我通过使用W3C ARIA邮件列表问了这个问题,W3C HTML工作组成员Steve Faulkner回复道.以下是他的建议:

我还会考虑浏览器如何将页脚元素映射到辅助功能API.
在Firefox中,页脚被映射到ARIA role = contentinfo
在Webkit/safari/chrome中,页脚被映射到ARIA role = group,如果它包含在section或article元素中,否则它被映射到role = contentinfo
在IE中它没有被映射

所以这样做:
<div role ="contentinfo">
    一些内容
    <footer>一些内容</ footer>
</ div>

将导致在已经将页脚映射到contentinfo的浏览器中宣布嵌套的contentinfo地标.

因此我建议将role = contentinfo添加到主页脚,而不要过多担心您认为可能不适合页脚的内容.


所以建议的方法是增加role="contentinfo"主要footer.

html footer wai-aria

32
推荐指数
2
解决办法
2万
查看次数

检查浏览器是否内置HTML5表单验证?

如何检查浏览器是否具有内置的HTML5表单验证功能?通过这样做,我们不需要在可以自己验证表单的浏览器上应用jQuery表单验证功能.

[解决]根据ThinkingStiff的回答,这是一种方式:

if (typeof document.createElement("input").checkValidity == "function") {
    alert("Your browser has built-in form validation!");
}
Run Code Online (Sandbox Code Playgroud)

validation html5

22
推荐指数
4
解决办法
1万
查看次数

DOM Mutation Observers比DOM Mutation事件慢吗?

以下代码利用DOM Mutation Event DOMNodeInserted来检测body元素的存在并将其innerHTML包装到包装器中.

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script>
        function DOMmanipulation() {
            if (document.body) {
                document.removeEventListener('DOMNodeInserted', DOMmanipulation);
                // DOM manipulation start
                document.body.innerHTML = '<div class="wrapper">' + document.body.innerHTML + '</div>';
                // DOM manipulation end
            }
        }
        document.addEventListener('DOMNodeInserted', DOMmanipulation);
    </script>
</head>
<body>
    <p>Lorem ipsum dolor sit amet.</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

尽管包装成功,但是有一个错误表明找不到节点.这个问题的答案解释说,这是因为当jQuery被加载时,它div在主体中添加了一个元素来进行一些测试,但它无法删除该div元素,因为该元素已被包装到包装器中,因此它不是一个孩子身体的元素了.

上面的实验告诉我们DOMNodeInserted事件比jQuery的测试更快,因为jQuery的test element(div)在被jQuery删除之前就被包装了.




现在,下面的代码可以实现相同的操作,并且它使用新引入的DOM Mutation Observers.截至此时(2012-07-11),它仅适用于Chrome 18及更高版本.

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script> …
Run Code Online (Sandbox Code Playgroud)

javascript performance events observers mutation-events

9
推荐指数
2
解决办法
4551
查看次数

使用role ="list"和role ="listitem"的原因是什么?

使用以下代码有什么好处吗?

<ul role="list">
    <li role="listitem"></li>
    <li role="listitem"></li>
    <li role="listitem"></li>
</ul>
Run Code Online (Sandbox Code Playgroud)


以下代码与辅助技术具有相同的含义吗?

<ul>
    <li></li>
    <li></li>
    <li></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

html list wai-aria

7
推荐指数
2
解决办法
2万
查看次数

是否可以让Chrome返回CSS“ content”属性的原始值?

考虑以下JavaScript,CSS和HTML代码:

console.log(getComputedStyle(document.querySelector('p'), '::after').getPropertyValue('content'));
Run Code Online (Sandbox Code Playgroud)
p::after {
    content: "Hello" attr(data-after);
}
Run Code Online (Sandbox Code Playgroud)
<p data-after=" World"></p>
Run Code Online (Sandbox Code Playgroud)

Firefox和IE11都返回CSS:中定义的原始值"Hello" attr(data-after),这就是我所需要的。

但是Chrome返回"Hello World",解析后的值。

当我使用Chrome DevTools检查元素时,可以在“样式”面板中看到它显示以下信息:

p::after {
    content: "Hello" attr(data-after);
}
Run Code Online (Sandbox Code Playgroud)

因此,看起来Chrome仍然有能力知道原始值。

是否有任何JavaScript解决方案可以使Chrome返回Firefox和IE11这样的CSS定义的原始值?只要可以在JavaScript中使用,即使Chrome独有的方法也很好。


情况说明

在回答成员关于原因的问题时,情况如下:

我正在尝试speak: never在伪元素上为CSS创建一个“ polyfill” 。目前,任何浏览器均不支持该speak属性

屏幕阅读器可以读取CSS伪元素,目前无法从屏幕阅读器中轻松隐藏它们。解决该问题的常用方法是使用HTML代码(例如)<span aria-hidden="true">...</span>代替方便的CSS伪元素和speak: never,而我认为这种方法既不方便又令人失望。

因此,此polyfill主要与Web可访问性有关。

这种polyfill的工作方式将要求CSS开发人员编写一些额外的CSS代码作为指标,例如attr(speak-never)

p::after {
    content: "please make me inaudible" attr(speak-never);
    }
Run Code Online (Sandbox Code Playgroud)

然后在JavaScript中,polyfill循环浏览页面上的每个元素,并检查其伪元素::before::afterCSS content属性的值是否包含attr(speak-never)。如果找到指示字符串,则填充工具固定伪元素(通过添加自定义元素<before aria-hidden="true">...</before><after aria-hidden="true">...</after>编程)。

现在的问题是Chrome无法attr(speak-never)以JavaScript 返回上述内容。尽管polyfill也可以通过要求CSS开发人员添加其他指标(例如 …

javascript css google-chrome pseudo-element

7
推荐指数
1
解决办法
96
查看次数

如何知道DIV中的所有元素是否已满载?

有一个div通过Ajax加载的元素(图像,iframe等).这些元素完全加载后,我需要执行一个函数div.

如何确定所有元素div是否已完全加载?

我使用jQuery作为库.

jquery load

6
推荐指数
1
解决办法
1万
查看次数

多个咏叹调角色"导航"和"互补"?

在文档中,有多个<nav><aside>元件.我应该加上role="navigation"所有<nav>s和role="complementary"所有<aside>s吗?

换句话说,文档中有多个<nav role="navigation">...</nav>s和多个<aside role="complementary">...</aside>s 是更有益还是更冗余?

role wai-aria

5
推荐指数
1
解决办法
6783
查看次数

将 &lt;article&gt; 放在 &lt;li&gt; 中是一个好习惯吗?

通常在博客的首页上,有几篇最近的博客文章,每篇博客文章都是一个<article>. 通常博客评论也使用<article>s标记。

我的问题是:将这些<article>s 放入<li>s是一个好习惯吗?我曾经这样做的话,因为我自己的解释那些<article>小号一起在一定的方式呈现/数量。因此,当涉及到列表元素一定量/数量,<ul>并且<ol>是最好的选择。

但是,也许我需要重新考虑我的解释,因为将<article>s 放入<li>s 似乎是对<li>. 而且我还想考虑可访问性。我不确定这样做是否会导致对辅助技术的混淆。

html article accessibility html-lists semantics

5
推荐指数
1
解决办法
2795
查看次数

如何正确指出面包屑内的方向?

我们经常看到人们在他们的面包屑的HTML代码[1]中使用"大于"字符(&gt;)来表示他们的面包屑中的方向.这显然是不正确的,因为"大于"字符是用于数学用途的,并且实际上没有任何方向意义.

那么有一个专门用于定向使用的unicode角色吗?

搜索了一些箭头形状的字符,例如这个:→,但其中许多也是用于数学用途的.而其他一些人的定义是"非间距合并标记",我猜这也没有定向意义.



  1. 如果通过CSS生成的内容或背景图像添加"大于"字符,则可以.

html breadcrumbs semantics

5
推荐指数
2
解决办法
5588
查看次数