用CSS隐藏文本,最佳实践?
比方说,我有这个元素来显示网站的标志:
<div id="web-title"> <a href="http://website.com" title="Website" rel="home"> <span>Website Name</span> </a> </div>
#blog-title
将被设置为background:url(http://website.com/logohere.png)
,但如何正确隐藏文本Website Name
? 正如在这里看到的: 隐藏文本使用CSS或这里https://stackoverflow.com/a/2705328 ,我已经看到了各种方法来隐藏文本,如:
#web-title span { text-indent: -9999px; }
要么
#web-title span { font-size: -9999px; }
要么
#web-title span { position: absolute; top: -9999px; left: -9999px; }
我也看到一些结合这三种方法。 但实际上哪一个是有效隐藏文本的最佳做法?
实际上,最近出现了一种新的技术。 本文将回答您的问题: http : //www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement
.hide-text { text-indent: 100%; white-space: nowrap; overflow: hidden; }
它是可访问的,具有比-99999px更好的性能。
更新 :由于@deathlock在注释区域中提到,上述修补程序( Scott Kellum )的作者build议使用透明字体 : http ://scottkellum.com/2013/10/25/the-new-kellum-method .html 。
你可以简单地使它透明
{ width: 20px; height: 20px; overflow: hidden; color:transparent; }
你不能简单地使用display: none;
喜欢这个
HTML
<div id="web-title"> <a href="http://website.com" title="Website" rel="home"> <span class="webname">Website Name</span> </a> </div>
CSS
.webname { display: none; }
或者如果你关心预留空间的话,怎么玩能见度呢?
.webname { visibility: hidden; }
大多数开发者将要做的是:
<div id="web-title"> <a href="http://website.com" title="Website" rel="home"> <span class="webname">Website Name</span> </a> </div> .webname { display: none; }
我也曾经这样做过,直到我意识到你隐藏了设备的内容。 又名屏幕阅读器等。
所以通过:
#web-title span {text-indent: -9000em;}
你确保文本仍然是可读的。
将.hide-text类添加到包含文本的跨度中
.hide-text{ display:none; }
或使文本透明
.hide-text{ color:rgba(0,0,0,0); }
根据您的使用情况使用。
如果你愿意在你的标记中容纳这个(就像你在持有文本的问题中一样),那么我会使用CSS助手中的任何jQuery UI:
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
如果你绝对拒绝添加额外的标记来隐藏在图像的容器中的文本,图像replace技术是很好的。
什么谷歌(search机器人)需要相同的内容应该送达机器人,因为它是送达用户。 将文本缩进(任何文本)让机器人认为它是垃圾邮件,或者您正在向用户和机器人提供不同的内容。
最好的方法是直接在标签中使用logo作为图像。 给你的图像“alt”。 这将是完美的机器人阅读,也将有助于图像search。
这是直接从马的嘴里: http : //www.youtube.com/watch?v=fBLvn_WkDJ4
截至2015年9月,最常见的做法是使用以下CSS:
.sr-only{ clip: rect(1px, 1px, 1px, 1px); height: 1px; overflow: hidden; position: absolute !important; width: 1px; }
我这样做:
.hidden-text { left: 100%; display: inline-block; position: fixed; }
我意识到这是一个老问题,但Bootstrap框架有一个内置的类(sr-only)来处理除屏幕阅读器之外的所有内容的隐藏文本:
<a href="/" class="navbar-brand"><span class="sr-only">Home</span></a>