最正式的方法就是给一个透明图片加样式:
<img src="blank.gif" width="16" height="16" class="sprite" />
但是这样做有一些缺点:
1. 会多一个图片的请求
2. 众所周知的,内联行里的图片和中文字的底端无法对齐。这个问题的解决办法也有,就是用“vertical-align: -2px;” 强行把图片拉下来一截。
第二种方法:
a {
display: block;
text-indent: -3000px;
overflow: hidden;
width: 20px;
height: 20px;
background: url(...);
}
这个方法很不错,唯一的缺点就是它只能用于样式被设为块级的元素。
第三种方法是我自己想出来的,比较山寨,但是挺实用:
<span class="sprite"> </span>
.sprite {
font-family: "Courier New", Courier, monospace;
font-size: 12px;
letter-spacing: -14px;
padding-left: 50px;
background: url(...);
}
其中padding-left用来调节宽度。
这个方法的好处在于:
1. 没有多余的空白图片
2. 支持inline样式
3. 良好的垂直对齐
但这个山寨方法有很多局限性:
1. 高度的调节很麻烦。不同的浏览器对字体和行高的解析不一致。
2. 可能在不同操作系统中宽度和高度会不一致。(我还没全面测试)
不管怎么样,这至少是一个在某些固定环境中可以尝试的方法。
fireyy: 2009-4-14 10:29 pm
比较倾向于做跨浏览器的
inline-block蓝蓝小雪: 2009-4-14 10:47 pm
看看这个……
http://blog.istef.info/2008/10/13/cross-browser-inline-block-css/
inline-block,然后混合一下第二种方法:
a {text-indent: -3000px;
overflow: hidden;
width: 20px;
height: 20px;
background: url(...);
/* 这里放更多的css属性,inline-block放在最后 */
display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;
}
OoSleePinG: 2009-4-16 11:51 am
img可以算是一个inline-block元素,一般是用inline-block的方法,但inline-block也有很大局限性比如ff2表现不佳,ff2下私有属性-moz-inline-stack和-moz-inline-box都有些问题,现在我是干脆放弃FF2。把inline-bock的hack放在css声明位置便于管理。
.iflower1,.iflower2,.iflower3,.iflower4,.iflower5
{display:-moz-inline-box;display:inline-block;*display:inline;zoom:1;*margin-right:3px;vertical-align:text-top;position:relative;}
img标签的想法很有创意。支持
小麦: 2009-4-17 1:49 am
@蓝蓝小雪:inline-block那个很棒的说。
哎,为啥之前一直没注意IE的hasLayout有这个特性呢~
P.S. 你的blog真有趣:)
oneboys: 2009-4-17 5:29 pm
img这类可置换(replaced)inline元素的确同定义过inline-block的普通inline元素一致。
bujichong: 2009-6-14 6:51 pm
呵呵,不错,我抄一份回去备忘,经常遇到需要背景的内联元素
天堂左我往右: 2010-1-18 8:37 pm
不错,呵呵