导航

毅博客

分享本身就是件快乐的事,我因别人得到帮助而感到幸福

« 兼职者要注意保障自己的权益XHTML代码的基本应用 »

以图换字的几个方法及思路

本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
请大家帮忙:行文措辞难免有错,请大家在阅读时发现错误通过评论方式告诉我。谢谢大家

今天有个朋友做网页的时候遇到个问题:想保留链接的背景,但又要链接里的文字消失!可是弄了半天一直没办法把这个文字去掉。我想很多学标准的朋友都遇到过这个问题,这里我把常用的几个方法写出来,把思路也讲一下,希望能帮助刚开始学习的朋友。

“以图换字”就是用图片替换文字表现。我们都知道,文字在浏览器里的表现形式是很差的,会有锯齿,没办法圆润还有没办法做很多效果。一般情况下网页的内容部分是不需要做效果的,但是在WEB标准中对于LOGO、标题,常常需要用到这些。用表格来做的话我们只是在某个地方帖上一张图,这样的方式比较简单,但是不利于搜索。所以我们需要采用标准方式来做,保证网页处于一种良好的状态而有利于搜索。通常以图

显示消失:(display:none;) 这不只是让容器内的内容消失而是包括容器本身都消失。所以我们必需在容器内再做一个容器来保证内消失部分之后,容器内的背景可以正常显示。例 :

<div id="logo">标题内容</div>
#logo {display:none; background:URL; width:300px; height:100px;}

如果是这样写那么你根本什么也看不到。那正确的方式是什么写呢?看示例:

<div id="logo"><span>标题内容</span></div>
#logo {background:URL; width:300px; height:100px;}
#logo span {display:none;}

大家注意上面的代码,背景是在#logo下定义,而#logo span下除了display:none;没有任何样式。因为被定义了display:none;属性的容器会一无所见,如果定义其它样式也是浪费。光是这样还是有问题,这是个没有链接的例子,那有链接的时候怎么办呢?我们再来看个例子:

<div id="logo"><a href="URL" title="标题">标题内容</a></div>
#logo {background:URL; width:300px; height:100px;}
#logo a {display:none;}

大家猜一下这个代码能显示出东西吗?事实是背景显示了,可是链接没了。我们上面说过:被赋于了display:none;属性的容器自身也会消失。那我们就清楚了,必需要在这个A标签里加个容器。我们再看示例:

<div id="logo"><a href="URL" title="标题"><span>标题内容</span></a></div>
#logo {background:URL; width:300px; height:100px;}
#logo a span {display:none;}

这样的是不是就正确了呢?还是不行,为什么呢,我们都知道A不是块级标签,也就是说A的高宽都是内容来决定的,现在内容消失了,也就没有了这个高宽的属性了,那么这个链接也就成了一个没有热区的链接了。可能是点不着的。我们必需要把上面的代码再做修改。

<div id="logo"><a href="URL" title="标题"><span>标题内容</span></a></div>
#logo a {background:URL; width:300px; height:100px; display:block;}
#logo a span {display:none;}

注意这里的A标签的属性一定要加上display:block;把他强制为块级元素。这样A标签就成了一个宽为300高为100,有一个背景没有文字内容的链接形式。大家看到了上面在A标签里还加了一个span标签,好像有点多余。能不能不用span也可以实现效果呢。可以,不过思路就不一样了,而是下面的这种位置移动法。

位置移动:也就是让内容啊分进行位置移动,移出显示区之外。我们还是看代码来了解这个方法。

<div id="logo"><a href="URL" title="标题">标题内容</a></div>
#logo, #logo a {width:300px; height:100px; overflow:hidden;}
#logo a {background:URL; padding:100px 0 0; display:block;}

在CSS中设置了#logo与A有一个溢出隐藏(overflow:hidden;)也就是说有超出300*100大小的就会被隐藏。我们看A被定义了一个padding:100px 0 0; 这个顶部的内距正好把内容压到了显示区以外。那为什么#logo也要用overflow:hidden;呢?因为在IE下会出现一个小BUG,A的内容没办法溢出隐藏所以必需要在父级标签上还要加一个overflow:hidden;

以上内容只是我比较常用的两种方法,当然还会有一些别的方式方法,这些方法都有各自的有缺点,不过各种方法之间也都有互补的。在应用时可以依据情况选择使用即可。

进入经典论坛参加讨论:http://bbs.blueidea.com/thread-2686591-1-1.html

作者 / 振之
网站 / 毅博客 http://andy.andymao.com/
电话 / (86)025 5890 9295
  • quote 3.冷韵
  • http://www.lenvo.cn
  • 网站重构有说这个问题,书里讲了多加一层标签display:none的办法。设置overflow结合magin的办法也用过。text-indent到没用过,似乎会更简单一些……呵呵
  • 2006-10-22 13:44:19 回复该留言
  • quote 4.振之
  • http://www.jonmax.com/
  • text-indent 也算是位置移动的原理,不过有一个很大的缺点,应付多文字就显得不适用了!早前我也是用这个,不过还是觉得现在的用的比较实在
  • 2006-10-22 14:15:52 回复该留言
  • quote 6.ieidea
  • http://www.5dlog.com
  • 俺以前使用text-indent来控制,但发现这个在IE5下并不理想,所以后来加了个<span>标签,使用visibility:hidden,隐藏文字
  • 2006-10-24 8:43:25 回复该留言
  • quote 7.振之
  • http://www.jonmax.com/
  • 本文中的第二种方法是我特别喜欢的,用padding与overflow配合把内空推出显示区以外,这样代码也可以得到精减!
  • 2006-10-24 13:35:51 回复该留言
  • quote 8.秀才
  • http://www.zishu.cn
  • 用透明法行不行!?
    [code]
    <div id="logo">
    <div id="box">
    <a href="URL" title="标题">标题内容</a>
    </div>
    </div>
    <style>
    #logo a {background: #CC0000; width:300px; height:100px; display:block;-moz-opacity:0; filter:alpha(opacity=0);}
    #box{background:#000000;width:300px; height:100px;}
    </style>
    [code]
  • 2006-10-26 10:54:05 回复该留言
  • quote 10.振之
  • http://www.jonmax.com/
  • 也不是这个意思,其实display:none;只是让代码里的内容看不到。实际上内容是存在的。搜索只是搜HTML不会去管样式的。所以并无关系。

    你说的透明法在IE下有效,在FF或是OP等浏览器下可能就会有问题了。思路不错,不过兼容性有问题

    引自 秀才
    我知道这样作的目地是为了搜索考虑的!
    如果是样,像display:none这样的代码最好不要用!
  • 2006-10-26 12:12:56 回复该留言
  • quote 11.iu99
  • http://www.zdser.com
  • 那为什么不直接用图片作连接呢?
    直接用有什么坏处?<a><img src="" /> </a>
    因为浏览器是先下载html中的内容,后下载css中的。采用你所说的办法,如果网速慢,背景图片没有下载好的话,访问者只看到空白而不知所措。
    我是菜鸟,说得不对请你指教。
  • 2007-2-6 22:24:44 回复该留言
  • quote 12.振之
  • http://www.jonmax.com
  • 不使用图片链接是为了实现样式与数据分离。并不是说<a><img../></a>不能用,比如在产品列表中就需要用到这样的形式。但是对于这个图片是样式还是数据就需要做出区分。如果是样式就不要出现在HTML代码里!
  • 2007-2-6 23:25:48 回复该留言
  • quote 14.cnbruce
  • http://www.cnbruce.com/blog
  • 也就是说浏览器用户看不到文字,而搜索引擎能收录到这些文字。把问题扩大化一点,把这个应用到堆叠关键字上,就如同文字前景色和背景色是不是同样属于搜索引擎作弊了呢?

    我认为搜索引擎以后不仅仅去搜索HTML文档代码,还要去看看CSS代码:D

    我个人觉得如果是为了搜索引擎,比如顶部BANNER上有个h1标题碍眼难看,就按照aoao的方法,字很小很小,而不是没有:)
  • 2007-4-14 14:35:20 回复该留言
  • quote 15.振之
  • http://andymao.com/
  • 我个人还是比较倾向于把内容推出显示区,不过text-indent在IE5下常会出现背景显示不出来或是滞后问题。关于AOAO的超小字体法我没有试过,对这种做法是否会产生一定的问题尚不知晓。不过通过padding把字体推出显示区的做法还是比较实在的,只是在IE系列浏览器下面就必需在父层再做一次overflow:hidden;当然这些都不是大问题。
  • 2007-4-14 16:32:03 回复该留言
  • quote 16.Firede
  • http://www.style5.cn
  • 搜索引擎应该是会看CSS的,对于字体大小为零或者字体的颜色与背景色相同也会做出惩罚。
    我还是比较喜欢小毅加span的那个方法,感觉那样自由度大一些,并且不破坏文档的完整性。
  • 2007-8-6 20:38:06 回复该留言
  • quote 19.skyblue
  • 如果是logo应该属于页面内容吧,用背景也不是很恰当啊.
  • 2008-4-12 23:33:56 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Theme from Google黑板报 By Washun

Copyright 2005-2007 Jonmax.com. All Rights Reserved.

Search

最新评论及回复

最近发表

资助者链接