基本上,我想省略IMG标签的SRC,只使用精灵图,但担心由于这个原因HTML不符合技术规范。
使用精灵图并不一定意味着您需要在CSS背景中定义它们。您还可以使用IMG标记精灵,为此您基本上需要修剪图像。有两篇好的文章介绍了该技术:
http://tjkdesign.com/articles/how-to_use_sprites_with_my_Image_Replacement_technique.asp
http://www.artzstudio.com/2010/04/img-sprites-high-contrast/
无论是CSS方法还是IMG方法都各自有其优点,因此您需要确定哪种更适合您。
关于语义正确性:
当一张图片具有语义意义时,被视为内容,请使用IMG标签,不要使用雪碧图,并且正确设置ALT属性。
当一张图片只是装饰用途,例如方框的背景、按钮的背景、菜单选项的背景等,它没有语义意义,所以您可以将其作为SPAN、DIV等元素的背景从CSS中使用。在这种情况下,您可以使用雪碧图。
alt
属性。我有很多小按钮,所以它们不是装饰性的(必须使用img标签?),但是单独加载太耗时间了(必须使用精灵图?)。真是一个两难的选择! - dialexbutton
或 input
标签。 - kapa我使用一个1x1像素的透明gif作为src。然后,为该img标签设置相应的背景图像和背景位置。这样,您就可以利用雪碧图的速度,并保持代码的语义(您仍然可以使用alt属性)。
通过重新思考您的选项来解决这个问题。
您可以创建一个包含 <a>
且具有 display:block;
或 <div>
属性的定义区域,并使用 overflow hidden;
隐藏溢出部分和 position:relative;
属性。然后将您的 <img>
图像精灵放置在绝对定位内,这是因为您已经定位了父元素。
接下来,使用 :hover
在图像上更改位置。现在,您的精灵基于 img 标签,所以您可以使用 alt
文本。
以下示例基于 Facebook 精灵图,其中两个版本的图标彼此叠放,每个图标大小为 50px x 50px,总高度为 100px:
<!DOCTYPE html>
<html>
<head>
<style>
.icon {
display:block;
position:relative;
width:50px;
height:50px;
border:1px solid red;
overflow:hidden;
}
#fb {
position:absolute;
top:0;
left:0;
}
#fb:hover {
position:absolute;
top:-50px;
left:0;
}
</style>
</head>
<body>
<a href="https://facebook.com" class="icon" title="Facebook">
<img src="sprite-facebook.png" id="fb" width="50" height="100" alt="Facebook">
</a>
</body>
</html>