在什么情况下更适合使用超文本标记语言IMG标记来显示图像,而不是CSSbackground-image,反之亦然?
IMG
background-image
因素可能包括可访问性、浏览器支持、动态内容或任何类型的技术限制或可用性原则。
对我来说,这是一个非黑即白的决定。如果图像是内容的一部分,例如徽标或图表或人物(真人,而不是库存照片人物),则使用<img />标签加alt属性。对于其他所有内容,都有CSS背景图像。
<img />
使用CSS背景图像的另一次是在对文本进行图像替换时,例如。段落/标题。
默认情况下,浏览器并不总是设置为打印背景图像;如果您打算让人们打印您的页面:)
这里有一个技术上的考虑:图像是否会动态生成?用超文本标记语言生成<img>标记往往比尝试动态编辑CSS属性容易得多。
<img>
在多皮肤或多版本设计的情况下使用CSS background-image。Javascript可用于动态更改元素的类,这将迫使它呈现不同的图像。使用IMG标签,可能会更棘手。
如果您的CSS在外部文件中,那么将站点上经常使用的图像(例如标题图像)显示为背景图像通常很方便,因为这样您就可以灵活地稍后更改图像。
例如,假设您有以下超文本标记语言:
<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;}
否则,您必须在每个超文本标记语言文件中更新相应的<img>标记的src属性(假设您没有使用服务器端脚本语言或CMS来自动化该过程)。
src
如果您不希望用户能够保存图像(尽管我从未需要这样做),背景图像也很有用。
与桑乔特法特的回答大致相同,但从不同的方面来看。我总是问自己:如果我要从网站上完全删除样式表,剩余的元素只有是否属于内容?如果是这样,我做得很好。
图像的大小如何?如果我使用img标签,浏览器会缩放图像。如果我使用css背景,浏览器只会从较大的图像中剪切一大块。
前台=img.
背景=CSS背景。
alt
z-index
img
background-size:cover
只是为了在工作中扔一个扳手-我认为你永远不应该使用img标记。超文本标记语言用于内容,而不是视觉风格。您页面上的所有图像都应该来自CSS,让您的超文本标记语言代码纯净。(即使它确实需要更长的时间来构建)
使用背景图像时,您需要绝对指定尺寸。如果您事先不知道或无法确定它们,这可能是一个重大问题。
<img />的一个大问题是覆盖。如果我想在我的图像(box-shadow:inset 0 0 5px rgb(0,0,0,.5))上添加CSS内部阴影怎么办?在这种情况下,由于<img />不能有子元素,您需要使用定位并添加空元素,这相当于无用的标记。
box-shadow:inset 0 0 5px rgb(0,0,0,.5)
总之,这是相当情境化的。
仅在必要时使用背景图像,例如带有平铺图像的容器。
使用图像的主要优点之一是它是更好的SEO。
img是一个html标签,因此应该使用它。用于引用或说明事物,例如:在文章中。
此外,如果图像有意义或必须可点击,则img比css背景更好。对于所有其他情况,我认为可以使用css背景。
尽管,这是一个需要反复讨论的话题。
来自法国巴黎的网络学生
此外,我有一个画廊部分,图片大小不一致,所以即使这些图像显然被认为是内容,我使用背景图像并将它们居中在具有固定大小的div中。这类似于facebook在他们的相册中所做的。
我还要补充两个论点:
如果您需要调整图像的大小,img标签是很好的。例如,如果原始图像是100px 100 px,并且您希望它是80px 80px,您可以设置img标签的CSS宽度和高度。我不知道有什么好的方法可以使用backback-image来做到这一点。编辑:这现在也可以使用backback-image来完成,使用background-size
background-size
当您需要动态地在精灵之间切换时,使用background-image是很好的。例如,如果您有一个按钮图像,并且您希望在光标悬停在元素上时显示一个单独的图像,您可以使用包含普通和悬停精灵的背景图像,并动态更改背景位置。
只是一个小的添加,如果您希望用户能够“右键单击”和“保存图像”/“保存图片”,那么如果您打算将图像作为其他人的资源提供,则应该使用img标签。
使用背景图像将(据我所知在大多数浏览器上)禁用直接保存图像的选项。
如果您希望图像流畅并缩放到不同的屏幕尺寸,您可以使用IMG标签。对我来说,这些图像主要是内容的一部分。对于大多数不属于内容的元素,我使用CSS精灵来保持下载大小最小,除非我真的想动画图标等。
应该使用background-image的其他几个场景:
关于动画图像使用CSS TranslateX/Y(动画html的正确方法)-如果你做一个Chrome时间轴记录的CSS背景图像被动画vs IMG标签被动画你会看到油漆时间大大缩短CSS背景图像。
当我想让它们100%可拉伸时,我使用图像而不是背景图像,这在大多数浏览器中都得到支持。
还有另一个原因!如果你有一个响应式设计,并希望通过媒体查询来分割设备的低、中、高分辨率图像的使用,你也应该使用背景。
使用标签的另一个好处与SEO有关-即您可以在图像标签的ALT属性中提供有关图像的附加信息,而在通过CSS指定图像时无法提供此类信息,在这种情况下,只有图像文件名可以被搜索引擎索引。与CSS方法相比,ALT属性无疑赋予了标签SEO优势。这就是为什么在我看来,最好使用标签指定您想要在图像搜索结果中排名良好的图像(例如Google图像搜索)。
如果您只想为页面上的特殊内容或仅为一个页面添加图像,您应该使用IMG标签,如果您想将图像放在多个页面上,那么您应该使用CSS背景图像。
有些答案使情况过于复杂。这是一个非常简单的情况。
只要回答这个问题,每次你想放置一个图像:
这是内容的一部分还是设计的一部分?
如果你不能回答这个问题,你可能不知道你在做什么或你想做什么!
另外,不要仅仅因为你希望是否“打印机友好”而考虑这两种技术之外的因素。也不要使用CSS从SEO的角度隐藏内容。如果你发现自己在CSS文件中管理内容,你就是在向自己的腿开枪。这只是一个关于什么是内容或不内容的琐碎决定。其他所有方面都应该被忽略。
我很惊讶没有人提到这一点:CSS转换。
您可以原生转换div的背景图像:
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。
<img/>
有关MDN上的转换的更多信息。
一个小输入,我遇到了响应式图像减慢iphone渲染速度长达一分钟的问题,即使是小图像:
<!-- Was super slow --><div class="stuff"><img src=".." width="100%" /></div>
但是当切换到使用背景图像时,问题就消失了,这只有在针对较新的浏览器时才可行。
超文本标记语言用于内容,CSS用于设计。图像是否必要以及是否需要由屏幕阅读器拾取?如果答案是肯定的,那么将图像放入超文本标记语言中。如果纯粹是为了样式化,那么您可以使用CSS中的background d-image属性来注入图像。正如这里的很多人已经提到的,如果您愿意,您可以在图像上使用伪元素。
另一个背景图像PRO:<ul>/<ol>列表的背景图像。
<ul>
<ol>
如果它们是整体设计的一部分并且在多个页面上重复,请使用背景图像。最好以背景精灵形式进行优化。
对不属于整体设计的所有图像使用标签,并且很可能只放置一次,例如文章,人物和值得添加到谷歌图片。的重要图像的特定图像
**我在<img>标签中包含的唯一重复图像是网站/公司徽标。因为人们倾向于点击它进入主页,所以你用<a>标签包装它。
<a>
IMG首先加载,因为src在html文件本身中,而在background-image的情况下,源在样式表中提及,因此图像在样式表加载后加载,从而延迟网页的加载。
另请注意,大多数搜索引擎蜘蛛不会索引CSS背景图像,因此背景图像将被忽略,您将无法从搜索引擎获得任何流量(简而言之,没有SEO好处)。
其中,所有使用标签定义的图像都被编入索引(除非手动排除),并且如果它们的标题/alt属性和文件名被正确优化(w. r. t一些关键字),则可以从搜索引擎带来流量。
以上答案只考虑设计方面。我将其列在SEO方面。
什么时候使用<img />
title
什么时候使用CSSbackground-image
因为我将基于这些原因使用它们。这些是搜索引擎优化图像的良好做法。