假设您要显示一个预告片,邀请您在新页面上查看更深入的文章。您可以使用卡组件(image
+ title
+ short intro
)来实现这一目标,然后可以使用两种解决方案:
这两种解决方案是可行的,因为永远(HTML5 Doctor article by Bruce Lawson)和不应对屏幕阅读器用户造成太多问题。 Heydon Pickering还在他的“包容性设计模式”一书中提到了块级链接,并建议在块级链接中不要有太长的文本内容。
在我正在进行的项目中,我收到了一位屏幕阅读器用户的报告,说明了一些细微之处。对于他来说,导航跨越一组块级别的戏弄是非常困难的,因为一切都是一个链接,因此不清楚什么是底层行动。此外,屏幕阅读器不断重复您在链接中。
当我使用VoiceOver进行测试时,会读取块级链接的全部内容,而不会显示是否正在读取标题,图像或段落。你必须心甘情愿地进入链接内部以便更好地理解。也许链接到标题的aria-labelledby
可能很有用。
我想出了一个似乎有点脏的解决方案但是应该适用于所有情况,并且在整个预告片上都有position: absolute
的链接。这个实现实际上是两个解决方案的完美组合,用于一个不错的块级链接预告片。
绝对链接位于块上方,使预告片的行为与块级链接完全相同。对于屏幕阅读器用户,也可以将链接添加到图像+标题,并且绝对链接包含仅针对屏幕阅读器的正确的号召性用语文本,其将在其余的预告片内容之后读取。
此实现的另一个好处是可以在预告片中包含其他链接,并在链接上使用更高的z-index定位它们。例如,这对日期/作者/类别非常有用。
我的问题是:是这个解决方案 - 与块级链接或带有多个链接的简单预告片相比 - 在a11y,UX和一般代码质量方面是一个好主意吗?
这是我正在谈论的预告片(see on Codepen):
.card-link-absolute {
transition: all 0.2s;
width: 20em;
margin: 30px;
}
.card-link-absolute:hover {
color: #014c8c;
box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.2);
}
.card-link-overlay {
position: absolute;
top: 0;
right: 0;
width: 100%;
height: 100%;
}
.card-link-foreground {
position: relative;
z-index: 10;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet" />
<article class="card card-link-absolute">
<img class="card-img-top" src="http://placehold.it/318x180" alt="Card image cap">
<div class="card-block">
<h4 class="card-title">Link in absolute</h4>
<p class="card-text">The text is here and can be quite long</p>
<p class="card-text">
<a class="btn btn-success btn-sm card-link-foreground" href="http://antistatique.net">Other link</a>
</p>
<a href="#0" class="card-link-overlay"><span class="sr-only">Read more about Card title</span></a>
</div>
</article>
答案 0 :(得分:0)
我对这个主题的看法是:如果能够提供最佳的屏幕阅读器体验,您可以完美地使用第一个解决方案(不包括链接中的所有内容)。然后,如果您想为鼠标用户提供另一种体验,可以使用“this-is-clickable”鼠标指针在包装器元素上使用javascript onclick
事件。只要使用键盘执行相同的操作,没有任何内容表明链接必须相同。这几乎等同于您的position: absolute
解决方案,但更容易实现。
但是我可以保留真正可以访问的内容。如果它看起来不像一个链接,但表现得像一个链接,那可能会令人不安。
我还会说,如果内部有指向其他目的地的链接,那么对于某些人来说这会让人感到困惑(这种实现并不是专门针对屏幕阅读器的用户)。