在什么情况下使用HTML IMG
标记来显示图片更合适,而不是CSS background-image
,反之亦然?
因素可能包括可访问性,浏览器支持,动态内容或任何技术限制或可用性原则。
答案 0 :(得分:739)
IMG
人print your page,您希望默认情况下包含图片。
- JayTee IMG
(带alt
文字),例如a warning icon。这确保了图像的含义可以在所有用户代理(包括屏幕阅读器)中传达。IMG
加alt属性
是part of the content,例如徽标或图表或人物(真实的人,而非股票照片的人)。
- sanchothefat IMG
。IMG
multiple overlay images in IE6。IMG
和z-index
到stretch a background image填充整个窗口。img
代替background-image
可以显着提高背景动画的效果。background-image
人print your page并且您不希望默认情况下包含图像。
- JayTee background-image
与CSS sprites。background-image
,与CSS精灵一样。background-image
与background-size:cover
一起使用,以拉伸背景图片以填充整个窗口。答案 1 :(得分:276)
这对我来说是一个黑白分明的决定。如果图像是内容的一部分,例如徽标或图表或人(真实的人,而不是股票照片人),则使用<img />
标记加alt属性。其他一切都有CSS背景图片。
使用CSS背景图像的另一个时间是进行文本的图像替换,例如。段/报头。
答案 2 :(得分:104)
我很惊讶没有人提到这一点: CSS过渡。
您可以原生转换div
的背景图片:
#some_div {
background-image:url(image_1.jpg);
-webkit-transition:background-image 0.5s;
/* Other vendor-prefixed transition properties */
transition:background-image 0.5s;
}
#some_div:hover {
background-image:url(image_2.jpg);
}
这可以保存任何类型的JavaScript或jQuery动画,以淡化<img/>
的{{1}}。
有关MDN转换的详细信息。
答案 3 :(得分:64)
以上答案仅考虑设计方面。我将它列在SEO方面。
何时使用<img />
alt
和title
属性的图片。何时使用CSS background-image
因为我会基于这些原因使用它们。这些是图像搜索引擎优化的良好实践。
答案 4 :(得分:49)
默认情况下,浏览器并不总是设置为打印背景图像;如果您打算让人们打印您的页面:)
答案 5 :(得分:48)
如果您将CSS放在外部文件中,那么通常可以方便地将整个站点中经常使用的图像(例如标题图像)显示为背景图像,因为这样您就可以灵活地在以后更改图像
例如,假设您有以下HTML:
<div id="headerImage"></div>
...和CSS:
#headerImage {
width: 200px;
height: 100px;
background: url(Images/headerImage.png) no-repeat;
}
几天后,您可以更改图像的位置。您所要做的就是更新CSS:
#headerImage {
width: 200px;
height: 100px;
background: url(../resources/images/headerImage.png) no-repeat;
}
否则,您必须更新每个HTML文件中相应src
标记的<img>
属性(假设您没有使用服务器端脚本语言或CMS自动化过程。)
如果您不希望用户能够保存图像,背景图像也很有用(尽管我从未需要这样做)。
答案 6 :(得分:44)
与sanchothefat's answer大致相同,但来自不同的方面。我总是问自己:如果我要从网站上完全删除样式表,那么剩余的 元素是否属于内容?如果是这样,我做得很好。
答案 7 :(得分:40)
有些答案在这里过于复杂。这是一个死的简单情况。
每次想要放置图片时,只需回答这个问题:
这是内容的一部分还是设计的一部分?
如果你不能回答这个问题,你可能不知道你在做什么或者你想做什么!
此外,请不要考虑这两种技术,只是因为您希望与“打印机友好”。另外,请勿使用CSS隐藏SEO的观点。如果您发现自己在CSS文件中管理自己的内容,那么您就会陷入困境。对于什么是内容与否,这只是一个微不足道的决定。其他方面都应该被忽略。
答案 8 :(得分:27)
我会添加另外两个参数:
如果您需要调整大小图片, img 标记就会很好。例如。如果原始图像是100像素×100像素,并且您希望它是80像素×80像素,则可以设置img标记的CSS宽度和高度。 我不知道使用背景图像做任何好方法。编辑:现在也可以使用background-size
CSS3属性使用背景图像。
当您需要动态在精灵之间切换时,使用 background-image 是很好的。例如。如果你有一个按钮图像,并且你希望当光标悬停在元素上时显示一个单独的图像,你可以使用包含普通和悬停精灵的背景图像,并动态地改变背景位置。
< / LI>答案 9 :(得分:17)
前景= img。
背景= CSS背景。
答案 10 :(得分:17)
使用&lt; IMG&gt;的另一个好处标签与SEO有关 - 即您可以在图像标签的ALT属性中提供有关图像的其他信息,而在通过CSS指定图像时无法提供此类信息,在这种情况下,只能将图像文件名称编入索引通过搜索引擎。 ALT属性肯定会给出&lt; IMG&gt;标签SEO优于CSS方法。这就是为什么我认为最好使用&lt; IMG&gt;指定想要在图像搜索结果(例如Google图像搜索)中排名良好的图像。标签
答案 11 :(得分:14)
仅在必要时使用背景图像,例如带有图像的容器。
使用 IMAGES 的主要PROS之一是对SEO更好。
答案 12 :(得分:12)
使用背景图片,您需要绝对指定尺寸。如果您事先并未事先了解它们或无法确定它们,这可能是一个重大问题。
<img />
的一个大问题是叠加层。如果我想在图像上使用CSS内部阴影(box-shadow:inset 0 0 5px rgb(0,0,0,.5)
),该怎么办?在这种情况下,由于<img />
不能包含子元素,因此您需要使用定位并添加等同于无用标记的空元素。
总之,这是非常情境化的。
答案 13 :(得分:11)
应该使用background-image
的其他几种情况:
img
,则图像会从圆角漏出。答案 14 :(得分:9)
在多个外观或设计版本的情况下使用CSS background-image。 Javascript可用于动态更改元素的类,这将强制它呈现不同的图像。使用IMG标签,可能会更棘手。
答案 15 :(得分:8)
这是一个技术考虑因素:图像会动态生成吗?在HTML中生成<img>
标记比尝试动态编辑CSS属性要容易得多。
答案 16 :(得分:7)
关于使用CSS TranslateX / Y制作动画图像(动画html的正确方法) - 如果你进行Chrome时间轴录制的CSS背景图像动画与IMG标签动画,你会看到绘画时间大大缩短用于CSS背景图像。
答案 17 :(得分:7)
还有另一个原因!如果您有响应式设计并希望通过媒体查询分割设备的低,中和高分辨率图像的使用,您也应该使用背景。
答案 18 :(得分:7)
图像大小怎么样?如果我使用img标签,浏览器会缩放图像。如果我使用css背景,浏览器只会从较大的图像中剪切一块。
答案 19 :(得分:6)
此外,我有一个画廊部分,图片大小不一致,所以即使这些图像显然被视为内容,我使用背景图像并将它们居中在具有设定大小的div中。这与facebook在他们的专辑中所做的类似..
答案 20 :(得分:6)
img 是一个html标记,因为它应该被使用。用于引用或说明事物的人,例如:在文章中。
此外,如果图片 具有含义 或必须可点击, img 优于 css背景。对于所有其他情况,我认为可以使用 css背景。
虽然,这是一个需要反复讨论的主题。
来自法国巴黎的网络学生
答案 21 :(得分:5)
只需要添加一个小的,如果您希望用户能够“右键单击”和“保存图像”/“保存图片”,则应使用img标记,因此如果您打算将图像提供为他人的资源。
使用背景图片(据我所知,在大多数浏览器中)禁用直接保存图像的选项。
答案 22 :(得分:5)
小输入, 我的响应式图像在iphone上的渲染速度减慢了一分钟,即使图像很小,我也遇到了问题:
<!-- Was super slow -->
<div class="stuff">
<img src=".." width="100%" />
</div>
但是当切换到使用背景图片时,问题就消失了,这只有在定位更新的浏览器时才可行。
答案 23 :(得分:4)
IMG
首先加载,因为src
在html文件本身中,而在background-image
的情况下,在样式表中提到了源,因此在加载样式表后加载图像,延迟加载网页。
答案 24 :(得分:3)
HTML代表内容,CSS代表设计。图像是否必要,是否需要被屏幕阅读器拾取?如果答案是肯定的,那么将图像放在HTML中。如果它纯粹用于样式化,那么您可以使用CSS中的background-image属性来注入图像。就像这里的很多人已经提到的那样,如果你愿意,你可以在图像上使用伪元素。
答案 25 :(得分:3)
另请注意,大多数搜索引擎蜘蛛都不会将CSS背景图像编入索引,因此背景图像将被忽略,您将无法从搜索引擎获得任何流量(简而言之,没有SEO优势)。
所有使用标签定义的图像都被编入索引(除非手动排除),并且如果他们的标题/ alt属性和文件名被正确优化(w.r.t某些关键字),则可以从搜索引擎引入流量。
答案 26 :(得分:2)
如果您希望图像流畅并缩放到不同的屏幕尺寸,则可以使用IMG标签。对我来说,这些图像大多是内容的一部分。对于大多数不属于内容的元素,我使用CSS精灵来保持最小的下载大小,除非我真的想要动画图标等。
答案 27 :(得分:2)
当我想让它们100%可伸缩时,我会使用图像而不是背景图像,这在大多数浏览器中都是支持的。
答案 28 :(得分:2)
如果您只想为页面上的特殊内容添加图像或仅为一页添加图像,则应使用IMG标记,如果要将图像放在多个页面上,则应使用CSS背景图像。 / p>
答案 29 :(得分:2)
另一个背景图片PRO:<ul>
/ <ol>
列表的背景图片。
如果背景图像是整体设计的一部分,则会在多个页面上重复使用。最好以背景精灵形式进行优化。
对所有不属于整体设计的图片使用标签,并且最有可能放置一次,例如文章,人物和重要图片的特定图片,这些图片值得添加到 Google图片中。 强>
**我在<img>
标记中包含的唯一重复图像是网站/公司徽标。因为人们倾向于点击它去主页,所以你用<a>
标签包装它。
答案 30 :(得分:0)
只是为了投入一个扳手 - 我认为你永远不应该使用img标签。 HTML用于内容,而不是视觉风格。您网页上的所有图片都应该来自CSS,让您的HTML代码保持纯净。 (即使建立起来需要更长的时间)