何时使用IMG和CSS背景图片?


777

在什么情况下,与IMGCSS相对,使用HTML 标签显示图像更合适,background-image反之亦然?

因素可能包括可访问性,浏览器支持,动态内容或任何类型的技术限制或可用性原则。


您需要图像占用空间还是要覆盖图像?
geowa4,2009年

9
作为更新,由于在Google上排名很高,因此现在可以进行浏览器缩放和背景图像的图像拉伸,并且得到了广泛的支持(当然,IE8及以下版本除外),在情况下渲染第4和第7项可能会回退或忽略IE8及更低版本的这种影响。caniuse.com/#search=background-image
Shauna

伟大而有用的帖子,我将添加一个问题进行比较,css的优势还是悬停效果?可以使用img标签复制吗?
ericosg

我通常将alt属性和title属性都添加到所有内容图像中。这不是可取的吗?
哈特利圣

2
img也可以包含带有可单击区域和提示的地图
Vitim.us 2013年

Answers:


796

正确使用IMG

  1. 使用IMG,如果你打算让人们打印您的网页,你想被默认包含在图像。— JayTee
  2. 当图像具有重要的语义含义(例如警告图标)时,请使用IMG(带有alt文本)。这确保了可以在所有用户代理(包括屏幕阅读器)中传达图像的含义。

IMG的实用用法

  1. IMG如果图像是徽标,图表或人物(真实人物,而不是摄影人物)等内容的一部分,请使用加号alt属性。— sanchothefat
  2. 使用IMG,如果你依赖于浏览器的缩放比例,以文字的大小呈现图像。
  3. 使用IMG在IE6多的重叠影像
  4. IMG与a配合使用z-index拉伸背景图像以填充其整个窗口。
    注意,CSS3 background-size不再适用。请参阅下面的#6。
  5. 使用img代替background-image可大大提高背景动画的性能。

何时使用CSS背景图片

  1. 如果图像不属于内容,则使用CSS背景图像。— sanchothefat
  2. 在进行文本图像替换时,请使用CSS背景图像。段落/标题。— sanchothefat
  3. 使用background-image,如果你打算让人们打印您的网页,你不想被默认包含的图像。— JayTee
  4. 使用background-image,如果你需要提高下载时间,与CSS的精灵
  5. 使用background-image,如果你需要对图像的仅一部分是可见的,与CSS的精灵。
  6. 用于background-imagebackground-size:cover拉伸背景图像以填充其整个窗口。

3
对于文本替换部分,我仍然很怀疑。我看到人们使用背景图片,然后使用text-indent:-9999px作为文本。但是我知道像这样的文本缩进对SEO不利,而且我想对于某些搜索引擎来说仍然如此。但最重要的是,如果您关闭图像,但是图像上的css消失了,但是文本仍然不在屏幕上。就我而言,如果图像不显示,则图像上的替代文本适用于img标签。
Scott Reed

53
务实地使用backbround图片:当您不希望因垂直居中问题而松散头发时(垂直尺寸不同的图片);)
Frank Nocke 2013年

12
是的,垂直居中问题-带上Flexbox!
Dean_Wilson 2014年

3
@BinaryFunt- <div class="my-css-page-styles" style="background-image:url(blah.png);"></div>这样,您就可以在CSS样式表中对其进行样式设置,但是如果背景图像比样式更多地是内容问题,那么您仍在从HTML方面进行编辑。
Jimbo Jonny 2015年

2
IMG实用性使用的第5点似乎有些诱人之处-指向有关化妆品的日本博客文章。链接为www.ajaxline.com/browsers-performance-in-dependence-of-html-coding [请勿点击
此处

292

对我来说这是一个黑白决定。如果图像是徽标,图表或人物(真实人物,而不是摄影人物)之类内容的一部分,请使用<img />标签加alt属性。对于其他所有内容,都有CSS背景图片。

另一个使用CSS背景图片的时间是在对文本进行图片替换时,例如 段落/标题。


优秀的案例!CON-在对文本进行图像替换时使用背景图像。
系统暂停

2
这是一个公平的观点,但是可以肯定的是,文本的图像替换(例如,用于标题)将要求您添加“ alt”,以使屏幕阅读器阅读它?或者,如果未显示图像,您仍然可以看到标题吗?是的,标题,然后设置样式会更好,但是您确定要文本吗?
Theo Scholiadis 2012年

4
@TheoScholiadis使用图像替换并不意味着使用图像而不是文本,而是使用CSS以某种方式隐藏文本并使用CSS提供图像作为背景。该文档在语义上保持不变。
roborourke'4

57
就我个人而言,我讨厌无法复制“文本”,因为它实际上是图像。叫我懒,但是嘿...
Shaz 2013年

1
当您需要用于SEO的图像时,请使用带有alt属性的img标签。否则请使用CSS在后台使用图像。
超级模特

107

我很惊讶还没有人提到: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/>src

有关MDN过渡的更多信息。


3
那不是很好的理由。您可能有一个包含2个覆盖图像的div,以及以下CSS :#some_div { transition: opacity 0.5s; }#some_div:hover #top_img { opacity: 0; }
warkentien2

5
如果您阅读了该链接的MDN文章(或w3c规范),则会发现background-image不是可动画的属性之一,并且任何这样做的浏览器(chrome)都不符合网络标准。就是说,我认为应该是这样,这是一个很好的简单效果,因此令我感到失望的是它不是标准的一部分。
罗伯特·麦基

72

以上答案仅考虑设计方面。我在SEO方面列出了它。

何时使用 <img />

  1. 当你的形象需要 由搜索引擎索引时
  2. 如果与内容有关系就不要设计。
  3. 如果图像不是太小(不是标志性图像)。
  4. 您可以在其中添加alt和的图像title属性的图片。
  5. 您要使用打印介质CSS打印的网页中的图像

何时使用CSS background-image

  1. 纯粹用于设计的图像。
  2. 与内容无关。
  3. 我们可以在CSS3中玩的小图片。
  4. 重复图像(在博客作者图标中,每篇文章都会重复日期图标,等等)。

因为我将基于这些原因使用它们。这些是搜索引擎优化图片的良好做法。


54

默认情况下,浏览器并非总是设置为打印背景图像。如果您打算让人们打印您的页面:)


9
听起来像:PRO-如果要默认打印图像,请使用IMG。CON-如果您不希望默认打印图像,请使用背景图像。好一个!
系统暂停

7
我认为,这种想法是要使用单独的仅打印CSS样式来隐藏图像或将其更改为更合适的样式。
Blazemonger,2014年

52

如果您将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来自动执行该过程)。

如果您不希望用户保存图像(尽管我从来不需要这样做),则背景图像也很有用。


14
当然,背景图像可以保存一些最小的视图源,而不像右键单击图像那样容易。
Michael Hackner 2010年

2
火狐浏览器。右键点击。“查看背景图片”。没有那么困难。
TRiG 2013年

1
@TRiG除非进行透明的覆盖或特定于页面的上下文菜单修改以防止执行此操作。我以前见过这种情况,我认为这很愚蠢,因为您甚至不需要去研究源代码,如果页面已完全加载,那么至少在Firefox中,您可以单击“工具”>“页面信息/ alt + t”, i /右键单击并选择“查看页面信息”,浏览到“媒体”部分,然后从列表中保存所需的所有项目。当然,有一些方法可以防止这种情况发生,例如将图像嵌入Flash文件或其他怪异的技巧,但即使是那些也可以绕开或解决。
2013年

我认为背景技术不太适合拒绝用户保存图像...
ncubica 2013年

45

sanchothefat的答案大致相同,但从不同的方面来看。我总是问自己:如果我要从网站上完全删除样式表,其余元素属于内容吗?如果是这样,我做得很好。


42

一些答案使这里的方案变得复杂。这是一个简陋的简单情况。

每当您要放置图片时,只需回答此问题即可:

这是内容的一部分还是设计的一部分?

如果您无法回答此问题,则可能不知道自己在做什么或想要做什么!

另外,不要仅仅因为您希望“打印机友好”而考虑这两种技术。也不要使用CSS从SEO角度隐藏内容。如果您发现自己在CSS文件中管理内容,那您将大开眼界。这仅仅是什么是内容的简单决定。其他所有方面均应忽略。


我喜欢这个答案。很清楚 在每种情况下,都应单独考虑其余问题,例如打印机友好或SEO。
胡安·埃雷拉

28

我还要添加另外两个参数:

  • 如果需要调整图像大小,则使用img标签是不错的选择。例如,如果原始图像是100px x 100 px,而您希望它是80px x 80px,则可以设置img标签的CSS宽度和高度。我不知道使用背景图像执行此操作的任何好方法。编辑:现在也可以使用CSS3属性使用背景图像来完成。background-size

  • 当您需要在精灵之间进行动态切换时,使用背景图片非常有用。例如,如果您有一个按钮图像,并且希望在光标悬停在元素上时显示单独的图像,则可以使用同时包含普通和悬停精灵的背景图像,并动态更改背景位置。


2
这是一个很好的答案,尤其是调整大小点。人们会争辩说您可以使用背景大小,但是如果您想支持旧的浏览器,则不一定是最好的方法。
dudewad 2015年

1
这是它是如何在CSS做background-size: 80px 80px;
卡里姆

2
谢谢@Kareem。我看到这是CSS3引入的,当我最初回答时还不存在。我已经编辑了答案以反映这一点。
Anders Rabo Thorbeck,2016年

我认为必须注意,调整照片的大小在像素化或插值方面可能很棘手。在可能的情况下,如果不将图像放入照片成像软件以正确调整大小而又不损失质量,我的调整大小不会超过40%(这是一个标准-20%是标准)。如果没有足够的信息来拉伸和填充分配的像素数量,则DPI质量在这里可能很重要。
戴尔兰德里

18

使用<IMG>标记的另一个好处与SEO有关-即,您可以在image标记的ALT属性中提供有关图像的其他信息,而在通过CSS指定图像时无法提供此类信息,因此如果只有图像文件名可能被搜索引擎索引。相对于CSS方法,ALT属性无疑为<IMG>标签提供了SEO优势。这就是为什么我认为最好使用<IMG>标签在图像搜索结果(例如Google Image Search)中指定要排名良好的图像。


可以在站点地图中定义背景图片的ALT值。google.com/schemas/sitemap-image/1.1
Kareem

17

前景= img。

背景= CSS背景。


5
当然可以,但是“菜单”按钮旁边的小向下箭头指示符或其他类似元素呢?您如何对前景或背景进行分类?
dudewad 2015年

@dudewad我要说前景,因为它们(在视觉上)位于页面的“顶部”层,叠加在其他元素上。
jkdev

14

仅在必要时使用背景图像,例如带有平铺图像的容器。

使用IMAGES的主要PROS之一是它对SEO更好


3
可能是因为您可以使用alt属性。
大卫·大卫

4
这不取决于您是否要针对特定​​图像进行SEO吗?我不明白您为什么要在页面样式而不是内容(例如联系人页面上的电子邮件图标)中的图像上进行SEO。因此,实际上,我宁愿将您的发言转过来。仅在必要时使用IMAGES(与内容有关,与打印有关和/或与SEO有关)。
2014年

12

使用背景图像,您需要绝对指定尺寸。如果您实际上并不事先知道它们或无法确定它们,那么这可能是一个重大问题。

一个大问题<img />是覆盖。如果我想在图片(box-shadow:inset 0 0 5px rgb(0,0,0,.5))上放置CSS内部阴影怎么办?在这种情况下,<img />不能有子元素,因此需要使用定位并添加空元素,这些元素等同于无用的标记。

总之,这是非常情况。


11

background-image还应使用其他几种方案:

  • 当您希望图像在鼠标悬停在其上时发生变化时。
  • 当您想为图像添加圆角时。如果使用img,则图像将从圆角漏出。

您实际上可以执行以下操作:img { border-radius: 10px; }
拉夫夫(Rafff)2014年

@RafcioKowalsky你是正确的。不记得在什么情况下不起作用的确切条件border-radius
Behrang Saeedzadeh 2014年

10

如果外观或设计版本多种,请使用CSS背景图片。Javascript可用于动态更改元素的类,这将迫使它呈现不同的图像。带有IMG标签,可能会更棘手。


您也可以像更改类一样轻松地动态更改图像标签的src属性
roborourke

3
@sanchothefat,是的,但是,在这种情况下,图像源需要保存在JS中而不是CSS中。IMO css文件将更适合保留文件名。
MK_Dev

7

这是一个技术考虑:图像会动态生成吗?<img>与尝试动态编辑CSS属性相比,用HTML 生成标签通常要容易得多。


1
内联样式呢?这个问题确实不能由这个想法决定。
viam0Zah

也许我应该这样说:您愿意使用DOM元素还是element属性?
Bryan M.

也许值得考虑'09中的bacl,但是使用jQuery几乎不是问题。与切换元素相比,在元素上切换css或类甚至更容易,更流畅。
dfherr 2015年

7

图像的大小呢?如果使用img标签,则浏览器会缩放图像。如果我使用CSS背景,浏览器只会从较大的图像中切出一块。


7

关于使用CSS TranslateX / Y(对HTML进行动画处理的正确方法)对图像进行动画处理-如果您在Chrome浏览器时间线中记录了正在动画的CSS背景图像与正在动画的IMG标签,则您会发现CSS的绘制时间大大缩短了背景图像。


7

还有另一个原因!如果您具有响应式设计,并且想通过媒体查询为设备拆分低,中和高分辨率图像的使用,则也应该使用背景。


1
马丁,我不是从文森特·威廉姆斯那里听说过的。那么您如何看待它可以在PyMol上工作
Mehdi

1
请参阅文档,了解它的可发送性pieterpeitshoeve.nl/rondleiding
Maarten

@Maarteen,我想现在可以使用html 5图片和源标签完成
Tick20

6

另外,我的图库部分的图片大小不一致,因此即使这些图像显然被认为是内容,我也使用背景图像并将它们居中设置为div大小。这类似于facebook在其相册中所做的。


6

img由于某种原因是html标记,因此应使用它。为了引用或说明事物,人们例如在文章中。

同样,如果图像具有含义或必须可单击,则img优于CSS背景。对于所有其他情况,我认为可以使用CSS背景

虽然,这是一个需要反复讨论的主题。

来自法国巴黎的网络学生


5

只需添加一小段,如果希望用户能够“右键单击”和“保存图像” /“保存图片”,则应使用img标签,因此,如果您打算将图像作为资源提供给其他。

据我所知,在大多数浏览器中使用背景图片会禁用直接保存图片的选项。


5

很小的输入,即使对于小图像,响应图像也会使iphone的显示速度减慢一分钟,但是我遇到了问题:

<!-- Was super slow -->
<div class="stuff">
    <img src=".." width="100%" />
</div>

但是,当切换为使用背景图像时,问题就消失了,只有针对较新的浏览器,这才可行。


您对此行为有任何支持或解释吗?
2014年

抱歉,我不知道为什么它会减慢页面爬行速度。.也许iPhone上浏览器的重排资源很少。
胜者

4

IMG首先加载src是因为html是在html文件本身中,而在background-image样式表中提到了源代码,因此图像在加载样式表之后加载,从而延迟了网页的加载。


加上一些浏览器(例如Firefox 35)似乎会background-image在一段时间后刷新CSS :如果您打开了多个标签页,则一段时间后返回到标签页时,CSS背景会空白一段时间。
Skippy le Grand Gourou 2015年

3

HTML用于内容,而CSS用于设计。该图像是否必要,是否需要屏幕阅读器拾取?如果答案是肯定的,则将图像放入HTML。如果仅用于样式设置,则可以在CSS中使用background-image属性注入图像。正如很多人已经提到的那样,您可以根据需要在图像上使用伪元素。


3

还要注意,大多数搜索引擎蜘蛛不会为CSS背景图像编制索引,因此背景图像将被忽略,您将无法从搜索引擎获得任何流量(总之没有SEO优势)。

如果使用标签定义的所有图像都被索引(除非手动排除),并且如果它们的标题/替代属性和文件名得到了适当的优化(可以输入某些关键词),则可以带来来自搜索引擎的访问量。


2

如果您希望图像流畅并缩放到不同的屏幕尺寸,则可以使用IMG标签。对我来说,这些图像大部分是内容的一部分。对于大多数不属于内容的元素,我使用CSS Sprite来保持下载大小最小,除非我真的想对图标等进行动画处理。


2

当我想使它们在大多数浏览器中支持100%可拉伸时,我使用图像而不是背景图像。


2

如果只想为页面上的特殊内容或仅一页添加图像,则应使用IMG标签;如果要将图像放置在多个页面上,则应使用CSS背景图像。


2

另一个背景图像PRO:用于的背景图像 <ul> / <ol>列表的。

如果背景图片是整体设计的一部分并且在多页上重复使用,请使用背景图片。优选以背景精灵形式进行优化。

对不属于整体设计的所有图像使用标签,这些图像很可能放置一次,例如文章,人物的特定图像以及应添加到其中的重要图像 Google图像中的图像。

**我在<img>标签中加上的唯一重复图片是网站/公司徽标。由于人们倾向于单击它转到主页,因此您用<a>标签将其包装起来。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.