跳过在Chrome中无效的链接

时间:2011-06-08 14:29:22

标签: html css google-chrome cross-browser accessibility

首先,我看了this previous question,但遗憾的是它似乎没有提供任何解决方案(除了JS,我担心这不是一个非首发)

我的页面顶部有一些跳过链接...

<ul>
<li class="skip-link"><a href="#mainContent" accesskey="S"><span>Skip to main content</span></a></li>
<li class="skip-link"><a href="#main-navigation" accesskey="N"><span>Skip to main navigation</span></a></li>
</ul>

进一步下来......

<div id="mainContent"></div>

这是一个纯粹的空div,可以作为一个锚点。

链接激活后,一切似乎都能正常工作;视觉上页面向下跳转,焦点转移到#mainContent之后的第一个链接。

然而在Chrome(v 12.0.742.91)中,虽然页面在视觉上向下移动,但焦点却没有,这意味着在激活accesskey之后,再次跳转只会跳回到页面顶部并返回到访问权限链接。

我遇到了与IE a known quirk相同的问题,并通过为目标元素设置特定宽度来修复问题。但是,这似乎不适用于Chrome。我还尝试在#mainContent div中添加一个tab-able元素,在#mainContent div中放置任何类型的内容,以及各种浮动/宽度/高度变化,似乎没有什么可以修复它。

有没有人与Chrome有任何类似的问题或知道修复?

先谢谢人们

西蒙

4 个答案:

答案 0 :(得分:8)

你可以做的最好的事情,直到有人找到一个技巧/黑客主宰this issue并成功this one。 你的SO研究员可能也会这样做,因为他们关心

显然,它最终是fixed

答案 1 :(得分:4)

我知道这是一个老问题,但我终于在搜索了几个小时后偶然发现了它。我仍然没有找到一个非js解决方案,虽然问题在Chrome中被标记为已修复,但它仍然表现出相同的行为。由于缺少其他任何东西,我使用了jQuery。我使用了一个不引人注目的事件监听器,而不是内联脚本。

HTML:

<div id="skiptocontent"> 
    <a href="#mainContent" id="skipper">Skip to Main Content</a>
</div>

<div id="mainContent"></div>

jQuery:

$(document).ready(function () {
    $("#skipper").click(function () {
        $('#mainContent').attr('tabIndex', -1).focus();
    });
});

除非从键盘获得焦点,否则我也会隐藏链接。这样只有键盘用户和屏幕阅读器才会知道链接在那里。使用CSS3,如果用户快速通过它,您可以确保它变得短暂可见。

CSS:

#skiptocontent a {
    position: absolute;
    top:-40px;
    left:0px;
    background:transparent;
    -webkit-transition: top 1s ease-out, background 1s linear;
    transition: top 1s ease-out, background 1s linear;
    z-index: 100
}
#skiptocontent a:focus {
    position:absolute;
    left:0px;
    top:0px;
    background:#F1B82D;
    -webkit-transition: top .1s ease-in, background .5s linear;
    transition: top .1s ease-in, background .5s linear
}

对于演示,您可以查看fiddle。如果有人有办法使用javascript,我很乐意听到它。如果它需要js,我不认为解决方案是真正可访问的。

答案 2 :(得分:1)

我也遇到过这个问题,我找到修复它的唯一方法是使用JavaScript(和jQuery)。

所以在链接上我使用了onClick $('#mainContent').attr('tabIndex',-1).focus();

  

“将tab的索引值-1添加到div中会生成该div   以编程方式可聚焦,允许它在焦点时获得焦点   使用.focus()方法。“ - Via:http://webstandardssherpa.com/reviews/overlays-and-lightboxes-keys-to-success/

看小提琴: http://jsfiddle.net/PEDaS/1/

答案 3 :(得分:0)

获取上面的片段并尝试将它们概括为目标任何潜在的跳过链接。

jQuery('[href^="#"][href!="#"]').click(function() {
  jQuery(jQuery(this).attr('href')).attr('tabIndex', -1).focus();
});