CSS 隐藏标题的文字,用 LOGO 替代

我们有时候在网站上,会使用一张图片替代标题的文字,即 LOGO。那么我们就需要隐藏标题的文字。可能有些人会把文字删掉,那是对搜索引擎不友好的。最好使用 CSS 来隐藏掉文字,并设置背景图片。

那么如何操作呢?

display: none;

这个不为隐藏的对象保留物理占位空间。值得注意的是,大家普遍说法是,搜索引擎可能认为被隐藏的文字属于垃圾信息而被忽略。不过,搜索引擎也搜 CSS 文件?无论怎样,如果用这个方法,<h1>如何设计,也就是如何用 LOGO 替代,确实是比较麻烦的。

如果不考虑搜索引擎的因素,这种方案无疑最佳的,适合内网站点使用,并不是一无是处。

visibility: hidden;

与上面相对,这个会为隐藏的对象保留物理占位空间。

可以用在特殊的占位场合,了解一下,没坏处。

overflow: hidden;

这是网上用的最多的方法,但是有人认为对于隐藏 h1 标签的“站点名称”文字,不太合适,原因他也没说。

.texthidden {
  display: block;
  overflow: hidden;
  width: 0;
  height: 0;
}

网上都说好,如果不是 h1 标签,还真可以用它。

positon: absolute;

用绝对定位将其推出可视区。不过虽然可视性不存在,但仍占据物理空间,与隐藏文字的宗旨相背。另外最好不要用绝对坐标定位 magin 这个属性,因为有人说 margin 在不同浏览器中总是带来不可预料的 Bug。

.texthidden {
  positon: absolute;
  margin-top: -9999px;
  margin-left: -9999px;
}

text-indent: -9999px;

把 h1 作为一个块来显示(display: block;),指定长宽(和图片一样大小),然后指定 h1 的背景图片,也就是将我们需要的图片作为 h1 这个标签的背景。而 h1 标签中插入的,仍然是作为字符形式出现的博客标题,然后用 text-indent: -9999px; 将文字甩到屏幕看不到的地方,9999px 应该是足够了,谁的屏幕也没那么大吧。

h1 a {
  height: 30px;
  width: 165px;
  float: left;
  text-indent: -9999px;
  background-image: url(images/logo.gif);
  background-repeat: no-repeat;
  display: block;
  position: relative;
}

在 h1 使用上语义明确,符合语义化定义。text-indent 就是首行缩进,大家都在中文段落,首行空两格用过它。这里通过负值缩进,使文字超出可视区,而这时 h1 下的背景就显示出来了,h1 中包含的 <a> 标签又不影响使用,对于隐藏文字“站点名称”应该是最佳方案了。但对于多段文字的隐藏这个方法就不适合了。

对了,这段 CSS 对应的 HTML 代码大致是:

<h1>
  <a href="//shansing.com">闪星空间</a>
</h1>

总结

最后一种方案就是我们需要的了。

然而呢,这里还有个问题,就是点击 <h1>、<a> 链接时,会产生一个虚线框,对于 IE 还好,没什么问题,虚线框只是在背影图片大小。但是 Firefox 就有些麻烦,它把缩进的文字范围也包含进来了,这样不是很美观。于是需要屏掉点击时产生的虚线框。

IE 和 Firefox 屏虚线框方法不一样。IE 采用的遍历方法(HTC,css表达式)有些耗系统资源,正好我们只需要隐藏 Firefox 下的虚线框就行了,IE 就不管了,说一下 Firefox 如何去掉链接的虚线框的方法:

h1 a {
  outline: none;
}

完。此文演绎自荆棘鸟博客,提到的“有人”就是指他吧!

若无特别说明,本文系原创,遵循 署名-非商业性使用 3.0 (CC BY-NC 3.0) 协议,转载文章请注明来自【闪星空间】,或链接上原文地址:http://shansing.com/read/205/

6 条评论

  1. Ben Ben

    沙发沙发~~

  2. ASCII ASCII

    直接用 font-size:0; display:none; 来搞好些。

    1. display:none; 在本文中已经说了,存有争议的。

发表评论»

NO SPAMS! 不要发垃圾评论哦!

表情