这是我之前没有遇到过的问题。我需要在网站中的所有图像上使用alt标签,包括CSS background-image属性中使用的图像。
据我所知,并没有类似于此的CSS属性,那么请问最好的方法是什么?
背景图片确实可以展示数据!实际上,这通常被建议在呈现视觉图标比等价的文本摘要列表更紧凑和用户友好的情况下使用。任何使用图像精灵的地方都可以从这种方法中受益。
酒店列表图标通常用于显示便利设施。想象一下一个页面列出了50个酒店,每个酒店有10个便利设施。CSS Sprite非常适合这种情况——更好的用户体验,因为速度更快。但是如何为这些图像实现ALT标签呢?请参考示例站点。
答案是它们根本不使用alt
文本,而是在包含div上使用title
属性。
HTML
<div class="hotwire-fitness" title="Fitness Centre"></div>
.hotwire-fitness {
float: left;
margin-right: 5px;
background: url(/prostyle/images/new_amenities.png) -71px 0;
width: 21px;
height: 21px;
}
alt alt属性被定义在一组标签中(即img、area以及可选的input和applet),使您能够为对象提供文本等效内容。在以下常见情况下,文本等效内容为您的网站及其访问者带来以下好处:title属性的值可以以各种方式由用户代理呈现。例如,视觉浏览器通常将标题显示为“工具提示”(指针暂停在对象上时出现的短消息)。音频用户代理可以在类似的上下文中朗读标题信息。例如,在链接上设置属性允许用户代理(视觉和非视觉)告诉用户有关链接资源的性质:
<div role="img" aria-label="adorable puppy playing on the grass">
...
</div>
这篇文章中描述的使用案例展示了Flickr选择使用背景图像的原因是因为这样可以显著地提高移动设备的性能。
我认为你应该阅读Christian Heilmann的这篇文章,可以通过此链接查看。他解释说,背景图片仅用于美学目的,不应用于呈现数据,因此可以豁免每个图像都应有替代文本的规定。
引用摘录(我强调):
CSS背景图片只具有美学价值而非文档本身的视觉内容。如果你需要在页面中放置具有含义的图像,则使用IMG元素并在alt属性中提供替代文本。
我同意他的观点。
<img>
标签中使用background-size
和background-position
样式吗?这些样式使得背景图片的定位非常灵活,例如在响应式的主页空间中,图像很可能包含一个至关重要的信息。 - Jeff Ward如其他回答所述,div标签没有(受支持的)alt属性,只有img标签才有。
真正的问题是为什么需要为网站中的所有背景图片添加alt属性?根据这个答案,它将帮助你确定在处理中采取哪种方法。
视觉/文本:如果你只是想在图像无法加载时为用户添加文本回退,那么简单地使用title属性即可。大多数浏览器会在用户悬停在图像上时提供一个视觉工具提示(消息框),如果由于某种原因图像未加载,则行为与alt属性一样呈现文本。此技术仍允许网站通过保持图像设置为背景来加快加载时间。
屏幕阅读器:中间路线的选择,这取决于具体情况,因为从技术上讲,将图像保持为背景并使用标题属性方法应该能够正常工作,正如上面所暗示的那样,“音频用户代理可以在类似的上下文中发出标题信息。”但是不能保证在所有情况下都能正常工作,包括一些读者可能完全忽略它。如果你最终选择采用这种方法,可以尝试添加aria-labels来帮助确保屏幕阅读器捕捉到这些信息。
SEO/搜索引擎: 这是个大问题,如果你跟我一样,添加了背景图片并且一切看起来都很好。几个月后,客户(或者也许是你自己)才意识到由于没有为图像添加alt属性而失去了一些主要的SEO优势。请注意,标题属性在搜索引擎中没有任何权重,根据我的研究以及本文所述:https://www.searchenginejournal.com/how-to-use-link-title-attribute-correctly/。因此,如果您想要实现SEO,那么必须在img标签中使用alt属性。一种可能的方法是在网站上加载非常小的实际图像,并带有alt属性,这样您就可以获得所有的SEO,并且无需重新调整已存在的CSS。然而,这可能会导致额外的加载时间,具体取决于图像的大小,而Google在索引时确实查看图像的路径。简而言之,如果您选择这种方法,请接受必须完成的任务并包含实际的图像,而不是使用背景。
<a href="http://www.facebook.com">
<span class="fb_logo" role="img" aria-label="Connect via Facebook">
</span>
</a>
不过,如果像上面的例子一样,包含背景图片的元素只是一个空容器,我个人更喜欢将文本放在其中并使用CSS隐藏它;就像你展示图像的地方:
<a href="http://www.facebook.com"><span class="fb_logo">
Connect via Facebook
</span></a>
.fb_logo {
height: 37px; width: 37px;
background-image: url('../gfx/logo-facebook.svg');
color:transparent; overflow:hidden; /* hide the text */
}
<div class"ir background-image">Your alt text</div>
“with background-image”是一个类名,用于指定背景图片。可以使用HTML5boilerplates的图片替换类(如下)。
/* ==========================================================================
Helper classes
========================================================================== */
/*
* Image replacement
*/
.ir {
background-color: transparent;
border: 0;
overflow: hidden;
/* IE 6/7 fallback */
*text-indent: -9999px;
}
.ir:before {
content: "";
display: block;
width: 0;
height: 150%;
}
.alt-image {
position: absolute;
top: 0;
left: 0;
z-index: -1;
}
.background-image{
background:url("https://www.w3schools.com/images/picture.jpg") no-repeat;
width:100%;
height:500px;
position:relative;
}
<div role="img" aria-label="place alt text here" title="place alt text here" class="background-image">
<img src="" alt="place alt text here" class="alt-image"/>
</div>
以下是我对这类问题的解决方案:
在CSS中创建一个新类并将其定位到屏幕外。然后,在调用背景图像的属性之前,将您的替代文本放在HTML中。可以是任何标签,如H1
、H2
、p
等。
CSS
<style type="text/css">
.offleft {
margin-left: -9000px;
position: absolute;
}
</style>
HTML
<h1 class="offleft">put your alt text here</h1>
<div class or id that calls your bg image> </div>
我不清楚你想要什么。
如果你想让CSS属性呈现alt属性的值,那么也许你正在寻找CSS属性函数,例如:
IMG:before { content: attr(alt) }
title
属性,但这并不适用于所有元素。你为什么需要这样做?你是想处理无法加载的图像,还是想在加载的图像上添加工具提示? - Cᴏʀʏ<div>
中,即使它不被验证,你仍然可以在其中获得关键词,并且谷歌也喜欢它。 - user1850679