在什么情况下,使用html IMG标记显示图像比使用css background-image更合适,反之亦然?
因素可能包括可访问性、浏览器支持、动态内容或任何技术限制或可用性原则。
- 您需要图像来占用空间还是要将其覆盖?
- 作为一个更新,由于这在谷歌排名很高,浏览器缩放和图像拉伸的背景图像现在是可能的,并得到了广泛的支持(当然,IE8及以下,是例外),渲染项目4和7在情况下可以允许回退或忽略IE8及以下这样的效果。canius.com/search=背景图像
- 很好很有用的帖子,我会添加一个问题进行比较,CSS的优点也是悬停效果吗?可以使用img标签复制吗?
- 我通常将alt属性和title属性添加到所有内容图像中。这不可取吗?
- 此外,img还可以有带有可点击区域和提示的地图。
- @vitim.us你可以将提示(titles)应用于除imgs以外的许多其他元素,如果这就是你的意思?
- 在提到CSS sprite时,你错了,背景图片比img标签更好。不,在IMG的情况下,可以使用css clip属性实现相同的事情,因此从背景图像的pro中删除这些点。
IMG的正确使用
如果你想使用IMG。人们打印您的页面,您希望默认情况下包含图像。杰迪
当图像具有重要的语义意义时,如警告图标时,使用IMG(与alt文本一起使用)。这样可以确保图像的含义可以在所有用户代理(包括屏幕阅读器)中进行通信。
img的语用用法
如果图像是内容的一部分,例如徽标或图表或人物(真人,而不是普通照片人物)。&Sanchothefat公司
如果您依赖浏览器缩放来呈现与文本大小成比例的图像,请使用IMG。
使用IMG。对于IE6中的多个叠加图像。
按顺序使用IMG和z-index要拉伸背景图像以填充整个窗口,请参见下面的6。
使用IMG而不是background-image,可以在后台显著提高动画的性能。
何时使用CSS背景图像
如果图像不是内容的一部分。&Sanchothefat公司
使用CSS背景图像对文本进行图像替换,如段落/标题。&Sanchothefat公司
如果你想要的话,使用background-image。人们打印您的页面,您不希望默认情况下包含图像。杰迪
如果需要改进下载时间,请使用background-image,如使用CSS精灵。
如果您只需要图像的一部分是可见的,那么使用background-image,就像使用css sprites一样。
使用background-image和background-size:cover来拉伸背景图像以填充整个窗口。
- 我对文本替换部分的背景图像仍然不确定。我看到人们使用背景图像,然后使用文本缩进:文本为-9999px。然而,我知道像这样的文本缩进曾经对SEO有害,我想它仍然对某些搜索引擎有害。但最重要的是,如果关闭图像,但将CSS保留在图像中,那么文本仍然不在屏幕上。就我而言,图像上的alt文本是用于如果图像不显示,那么img标签更好。
- 我同意斯科特·里德的说法。关键是打印时应该显示图像。如果是文本替换,它应该。
- 我不同意img标签更适合动画制作。如果您使用css translate在chrome动画元素中进行一些测试,您将看到css背景图像的绘制时间明显短于img标记。
- 后圆角图像的实际使用:当你不想在垂直中心问题上松开头(不同垂直尺寸的图像);)
- 是的,垂直居中问题-打开flexbox!
- 如果你想进入"整个"市场,那么flexbox仍然是不可行的。可能适用于小型网站/客户机,但对于大型网站/客户机,在撰写本文时,这只是一种不可接受的方法(除非您的客户机特别决定删除某些浏览器)。
- 我将把它添加到"实用"列表中:如果你从页面中删除CSS样式(例如,取消样式表链接),你会看到一堆令人困惑的UI箭头和愚蠢的小部件图像,相反,像网站徽标、内容图像等的东西会消失吗?如果两个都不行,那你做得很好。如果两者都是,则应考虑图像标记。
- 另请参见下面关于加载时间和注释的答案:在某些情况下,使用CSS背景可能是显示延迟方面的问题。
- 将样式与内容分离的目标是什么?如果我在一个页面上添加一个应该是某个分区背景的图像,我不想编辑CSS。我觉得应该有某种方法可以在HTML中插入背景图像。
- @BinaryFunt-</div>这样你就可以在CSS样式表中设置样式,但是如果背景图像更多的是内容问题而不是样式问题,那么你仍然可以从HTML方面编辑它。
- 这些似乎是很好的指导方针,但我看到很多网站不遵守它们。你失踪还有其他原因吗?有没有其他的原因,这些设计师可能不使用img标签?示例:在加载火箭的情况下,向下滚动此页面至packages部分。火箭是一个背景图像。有什么合理的理由为什么或者只是设计师的偏好?
- background-image对我有两个好处:background-size: cover和在图像上叠加梯度的能力。
- 我认为,背景图像的另一种实用用法是,如果需要使用Webpack之类的工具捆绑图像内容。与带有背景图像的框相比,嵌入文本的img似乎更容易使用。
- 这里不是有一个语义参数来创建可读的HTML来准确描述正在呈现的内容吗?例如,如果您在代码中看到,您知道那里会有一个图像。然而,如果您看到,并且它有一个图像被隐藏在另一个文件中的某个地方,那么这似乎是低效的可搜索性。你能不能继续使用没有src的标签,通过css应用background-image,或者说这是个疯狂的对话?
- 在IMG的第5点中似乎有一个点击诱饵——指向一篇关于化妆品的日本博客文章。链接是www.ajaxline.com/browsers性能与HTML-&zwnj;&8203;编码相关[不要单击此]
- @Patrick在第2版中,删除了Roborouke的一些内容链接,并再次提到了Jaytee关于打印的讨论。是故意的吗?
- @安德鲁,那是五年前,我不知道。:)
对我来说这是一个黑白相间的决定。如果图像是内容的一部分,例如徽标或图表或人员(真人,而不是普通照片人员),则使用标记加alt属性。其他一切都有CSS背景图像。
使用CSS背景图像的另一个时间是对文本(如段落/标题)进行图像替换。
- 好极了!con——在进行文本图像替换时使用背景图像。
- 是的,做图像替换从来都不理想,但是有些设计直到你做了才是对的。
- 1同意。请注意,文本的图像替换属于同一"不属于内容的一部分",因为内容是实际文本。
- 背景图像不一定要附加到某个东西上吗?您必须添加一些内容以向其添加背景,目前每个内容元素只能有一个背景…
- 完美答案,但有一个例外:网站标识,所以你要确保它的印刷。
- 这是一个公平的观点,但文本的图像替换(例如标题)肯定需要您添加一个"alt"以便屏幕阅读器阅读?或者,如果图像没有显示,你仍然得到标题?是的,标题和样式会更好,但你肯定想要文本吗?
- @我提到的标志是内容;)
- @使用图像替换并不意味着使用图像而不是文本,而是使用CSS以某种方式隐藏文本,并使用CSS提供图像作为背景。文档在语义上保持不变。
- 就我个人而言,我讨厌不能复制"文本",因为它实际上是一个图像。叫我懒惰,但嘿…
- 总而言之,我喜欢通过将HTML视为"数据",将CSS视为"视图"来处理这些决策——因此,如果它是信息性的并且与特定页面相关,那么使用img;如果它纯粹与主题/布局相关,那么使用css。
- 当您需要用于SEO的图像时,请使用带有alt属性的img标记。否则使用CSS在后台使用图像。
我很惊讶还没有人提到这个:CSS转换。
您可以本地转换div的背景图像:
1 2 3 4 5 6 7 8 9 10
| #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动画,以淡出的src。
有关MDN上转换的详细信息。
- 这不是一个好理由。您可以有一个带有2个重叠图像的DIV,以及以下CSS:#some_div { transition: opacity 0.5s; }和#some_div:hover #top_img { opacity: 0; }。
- 如果您阅读链接的MDN文章(或W3C规范),您会发现背景图像不是可设置动画的属性之一,任何这样做的浏览器(Chrome)都不符合Web标准。也就是说,我认为应该是这样的,这是一个很好的简单效果,所以我很失望它不是标准的一部分。
以上答案只考虑设计方面。我将在SEO方面列出它。
何时使用。
当你的图像需要被搜索引擎索引时
如果它与内容有关,而不是与设计有关。
如果您的图像不是太小(不是图标图像)。
可以添加alt和title属性的图像。
使用打印媒体CSS打印网页中的图像
何时使用css background-image。
纯粹用于设计的图像。
与内容无关。
我们可以用CSS3播放的小图像。
重复图片(在博客作者图标中,每一篇文章都会重复日期图标等)。
因为我将基于这些原因使用它们。这些是搜索引擎优化图像的良好实践。
默认情况下,浏览器并不总是设置为打印背景图像;如果您希望让其他人打印您的页面:)
- 听起来像:pro——如果您希望在默认情况下打印图像,请使用img。con——如果您不希望默认情况下打印图像,请使用背景图像。好一个!
- 我认为这个想法是有单独的只打印的CSS样式来隐藏图像或将其更改为更合适的样式。
如果您的CSS位于外部文件中,那么通常可以方便地将站点中经常使用的图像(如头图像)显示为背景图像,因为这样您以后可以灵活地更改图像。
例如,假设您有以下HTML:
……和CSS:
1 2 3 4 5
| #headerImage {
width: 200px;
height: 100px;
background: url(Images/headerImage.png) no-repeat;
} |
几天后,您更改了图像的位置。你所要做的就是更新CSS:
1 2 3 4 5
| #headerImage {
width: 200px;
height: 100px;
background: url(../resources/images/headerImage.png) no-repeat;
} |
否则,您必须在每个HTML文件中更新相应的标记的src属性(假设您没有使用服务器端脚本语言或CMS来自动执行该过程)。
如果您不希望用户能够保存图像(尽管我从未需要这样做),背景图像也很有用。
- 背景图像当然可以保存一些最小的视图源,只是不像右键单击图像那么容易。
- 火狐浏览器。右击。查看背景图像"。没那么难。
- @trig除非有一个透明的覆盖或页面特定的上下文菜单修改来阻止您这样做。我以前看到过,在我看来这很愚蠢,因为你甚至不需要在源代码中进行快速浏览,如果页面已经完全加载,那么在火狐中至少你可以单击工具>页面信息/alt+t,我/右键单击并选择查看页面信息,浏览到媒体部分,然后保存列表中你想要的所有项目。当然,也有一些方法可以防止这种情况发生,比如将图像嵌入到闪存文件或其他奇怪的技巧中,但即使是这些技巧也可以被忽略或解释。
- 我认为背景技术不太适合拒绝用户保存图像…
与桑乔夫的回答大致相同,但从另一个方面来说。我总是问自己:如果我完全从网站中删除样式表,那么剩下的元素是否只属于内容?如果是这样,我的工作做得很好。
一些答案使这里的情况过于复杂。这是一个非常简单的情况。
每当你想要放置图像时,只需回答这个问题:
这是内容的一部分还是设计的一部分?
如果你不能回答这个问题,你可能不知道你在做什么或者你想做什么!
另外,不要把这两种技术放在一边,因为你想不想"打印机友好"。也不要用CSS从SEO的角度隐藏内容。如果你发现自己在CSS文件中管理你的内容,那你就大错特错了。这只是一个关于内容与否的微不足道的决定。其他方面都应该被忽略。
- 我喜欢这个答案。很清楚。其余的问题,如打印机友好或搜索引擎优化应单独考虑在每个场景。
我将添加另外两个参数:
如果需要调整图像的大小,img标记很好。例如,如果原始图像是100px乘100px,而您希望它是80px乘80px,则可以设置img标记的css宽度和高度。I don't know any good way to do this using background image.edit:This can now also be done with a background image,using the background-sizecss3 attribute.
当需要在精灵之间动态切换时,使用背景图像是很好的。例如,如果您有一个按钮图像,并且您希望在光标悬停在元素上时显示一个单独的图像,则可以使用包含普通和悬停精灵的背景图像,并动态更改背景位置。
- 这是一个很好的答案,尤其是调整大小的点。人们会争辩说你可以使用背景大小,但如果你试图支持旧的浏览器,这不一定是最好的方式。
- 这就是在css background-size: 80px 80px;中实现的方法
- 谢谢你@kareem。我看到这是由CSS3引入的,当我最初回答时,它还不存在。我已经编辑了我的答案来反映这一点。
- 我认为重要的是要注意,调整照片的大小在像素化或插值方面可能很棘手。如果可能的话,我不会调整超过40%的大小(这是一个拉伸-20%是标准的),而不会将您的图像放入照片成像软件中,以便在不损失质量的情况下正确调整大小。如果没有足够的信息来拉伸和填充分配的像素数量,那么dpi质量在这里就非常重要。
前景=img.
背景=CSS背景。
- 当然可以,但是"菜单"按钮旁边的小向下箭头指示器或者其他类似的元素呢?你如何分类-前景还是背景?
- @dudewad我会说前台,因为它们(视觉上)在页面的"顶层",叠加在其他元素上。
使用标记的另一个好处是与seo相关,即,您可以在图像标记的alt属性中提供有关图像的其他信息,但在通过css指定图像时,无法提供此类信息,在这种情况下,搜索引擎只能索引图像文件名。alt属性绝对比css方法提供了标签seo的优势。这就是为什么根据我的说法,最好使用标记指定您希望在图像搜索结果(如谷歌图像搜索)中排名良好的图像。
- 可以在站点地图中定义背景图像alt值。google.com/schemas/sitemap图片/1.1
仅在必要时才使用背景图像,例如具有平铺图像的容器。
使用图像的主要优点之一是它对SEO更好。
- 可能是因为您可以使用alt属性。
- 这难道不取决于你是否想为特定的图像搜索引擎优化吗?我不明白你为什么要在一个图片上搜索引擎优化是页面样式的一部分,而不是内容(例如,你的联系人页面上的电子邮件图标)。所以事实上,我宁愿把你的陈述转过来。仅在必要时使用图像(与内容相关、与打印相关和/或与SEO相关)。
使用背景图像,您需要绝对指定尺寸。如果你事先不了解他们或者无法确定他们,这可能是一个重大问题。
的一个大问题是重叠。如果我想要一个CSS内部阴影在我的图像(box-shadow:inset 0 0 5px rgb(0,0,0,.5)上)?在这种情况下,由于不能有子元素,所以需要使用定位并添加等同于无用标记的空元素。
总之,这是一个非常情景化的过程。
应使用background-image的其他几种情况:
- 当鼠标悬停在图像上时,希望图像发生更改。
当您想向图像添加圆角时。如果您使用img,图像会从圆角中泄漏。
- 你可以这样做:img { border-radius: 10px; }。
- @拉菲科瓦斯基,你是对的。不记得border-radius不工作的确切情况。
在有多个外观或设计版本的情况下使用CSS背景图像。可以使用javascript动态更改元素的类,这将强制它呈现不同的图像。使用img标签,可能会更复杂。
- 您也可以动态地更改图像标记的src属性,就像更改类一样简单。
- @但是,在这种情况下,图像源需要保存在JS中而不是CSS中。IMO CSS文件更适合保留文件名。
这里有一个技术考虑:图像会动态生成吗?在HTML中生成标记比动态编辑CSS属性容易得多。
- 那么内联样式呢?这个问题不能由这个想法决定。
- 也许我应该这样说:您愿意使用dom元素还是元素属性?
- 可能值得考虑09年的bacl,但对于jquery来说,这几乎不是一个问题。在元素上切换CSS或类比切换元素更容易、更流畅。
- 大多数现代框架都使这成为一个没有问题的问题。
关于使用css translatex/y(动画HTML的正确方法)设置图像的动画-如果您对正在设置动画的css背景图像和正在设置动画的img标记执行chrome时间线记录,您将看到css背景图像的绘制时间大大缩短。
图像的大小如何?如果我使用img标签,浏览器将缩放图像。如果我使用CSS背景,浏览器只会从较大的图像中剪切一个块。
还有另一个原因!如果您有一个响应式设计,并且希望通过媒体查询将低、中、高分辨率图像用于设备,那么您也应该使用背景。
- 我从文森特·威勒姆斯那里听说,马尔顿,特舍林是不能用管道输送的。那么你认为它对吡咯啉有什么作用呢?
- 请参考文档了解pieterpeitshoeve.nl/rondleiding的可管道性。
另外,我有一个图库部分,它的图片大小不一致,所以即使这些图片明显被视为内容,我还是使用背景图片,并将它们放在具有设置大小的分区中。这与Facebook在其专辑中的表现类似。
img是一个HTML标记,因此应该使用它。为了引用或说明事物,人们,例如:在文章中。
另外,如果图像有意义或必须是可点击的,IMG比CSS背景更好。我认为,对于所有其他情况,都可以使用CSS背景。
尽管如此,这是一个需要反复讨论的主题。
来自法国巴黎的网络学生
如果您希望用户能够"右键单击"和"保存图像"/"保存图片",那么只需添加一个小的图像,就应该使用img标记,这样如果您打算将图像作为其他人的资源提供。
使用背景图像将(据我所知,在大多数浏览器上)禁用直接保存图像的选项。
一个小的输入,在iPhone上,即使是小图像,响应图像也会在一分钟内减慢渲染速度,这是我遇到的问题:
1 2 3
| <!-- Was super slow -->
<img src=".." width="100%" /> |
但当切换到使用背景图像时,问题就消失了,这只有在针对较新的浏览器时才可行。
- 你对这种行为有什么支持或解释吗?
- 对不起,我不知道它为什么会把页面拖慢到爬行速度。也许iPhone浏览器中的重新流动资源很少。
首先加载IMG,因为src在HTML文件中,而在background-image的情况下,样式表中提到了源文件,因此在加载样式表后加载图像,从而延迟了网页的加载。
- 另外,一些浏览器(如火狐35)在一段时间后似乎会刷新css background-image:如果您打开了几个选项卡,那么当您在一段时间后返回选项卡时,css背景会暂时为空。
HTML用于内容,CSS用于设计。图像是必要的吗?它需要被屏幕阅读器读取吗?如果答案是"是",则将图像放入HTML。如果它纯粹是为了设计样式,那么可以使用CSS中的background image属性来注入图像。正如这里已经提到的许多人一样,如果愿意,您可以在图像上使用伪元素。
另外请注意,大多数搜索引擎蜘蛛不索引CSS背景图像,因此背景图像将被忽略,您将无法从搜索引擎获得任何流量(简而言之,没有SEO的好处)。
其中,所有用标签定义的图像都被编入索引(除非手动排除),并且如果它们的标题/alt属性和文件名得到了适当的优化(w.r.t一些关键字),则可以从搜索引擎引入流量。
当我想让它们100%可伸缩时,我使用图像而不是背景图像,这在大多数浏览器中都得到了支持。
如果只为页面上的特殊内容或只为一个页面添加图像,则应使用img标记;如果要将图像放在多个页面上,则应使用css背景图像。
另一个背景图像pro:
/列表的背景图像。如果背景图像是整体设计的一部分并且在多个页面上重复,则使用背景图像。最好以背景精灵的形式进行优化。
对所有不属于整体设计的图片使用标签,并且很可能只放置一次,例如文章、人物和重要图片的特定图片,这些图片应该添加到谷歌图片中。
**我在标签中唯一重复的图像是站点/公司徽标。因为人们倾向于点击它进入主页,所以你用一个标签来包装它。
如果您希望图像具有流动性,并且可以缩放到不同的屏幕大小,则可以使用img标记。对我来说,这些图片主要是内容的一部分。对于大多数不属于内容的元素,我使用css sprites使下载大小保持最小,除非我真的想要动画图标等。
我认为你不应该使用img标签。HTML是为内容设计的,而不是视觉样式。页面上的所有图像都应该来自于CSS,而HTML代码是纯的。(即使需要更长的时间来构建)
- 我同意你对用作页面装饰的图像的看法,但肯定有些图像是内容:新闻文章中的照片,学术文章中的图表等。这些都是内容的一部分,可能需要一个img标签。
- 一个形象胜过千言万语……
- 如果标签没有任何优势的话,那就更有效了,但是目前,您可以通过标签获得更多的功能/控制,并且不能考虑将其废弃。
- "保持HTML代码的纯粹性"--你有没有接触过一个项目,其中每个图像都是背景图像?我来告诉你,这是一个没有文件记录的项目(大多数项目),你基本上是随机决定什么元素被用来放置背景图像。WC3 Web规范自Internet开始以来就定义了图像标记。语义定义在适当的情况下使用img标记。我相信,通过将所有东西都放入这样的CSS中,您会使代码的可维护性变得过于复杂,大大降低了代码的可维护性。