--- title: :图像嵌入元素 slug: Web/HTML/Element/img tags: - HTML - Web - 元素 - 参考 - 图像 - 图片 - 多媒体 - 照片 - 相片 translation_of: Web/HTML/Element/img ---
HTML <img>
元素将一份图像嵌入文档。
上面的例子展示了 <img>
元素的用法:
src
属性是必须的,它包含了你想嵌入的图片的文件路径。alt
属性包含一条对图像的文本描述,这不是强制性的,但对可访问性而言,它难以置信地有用——屏幕阅读器会将这些描述读给需要使用阅读器的使用者听,让他们知道图像的含义。如果由于某种原因无法加载图像,普通浏览器也会在页面上显示alt
属性中的备用文本:例如,网络错误、内容被屏蔽或链接过期时。还有很多其他属性,可以实现各种不同的目的:
HTML 标准并没有给出需要支持的图像格式的列表,因此每个{{glossary("user agent", "用户代理")}}支持一组不同的格式。MDN 另有一份完整的网页浏览器图像格式指南可供参考。
{{page("/zh-CN/docs/Web/Media/Formats/Image_types", "table-of-image-file-types")}}
如果在加载或渲染图像时发生错误,且设置了至少一个 {{htmlattrxref("onerror")}} 事件处理器来处理 {{event("error")}} 事件,那么设置的事件处理器就会被调用。这样的错误可能发生在各种不同的情况下,包括:
src
属性的属性值为空(""
)或者 null
。src
属性的 {{glossary("URL")}} 和用户正在浏览的页面的 URL 完全相同。<img>
元素的属性中没有指定宽度和/或高度。此元素支持全局属性。
注意:浏览器并非总是会显示图像。比如:
在这些情况下,浏览器很可能会将图像替换为图像所属 <img>
元素的 alt
属性所提供的文本。基于上面罗列的原因,以及更多尚未列出的原因,建议尽可能地通过 alt
属性提供一些有用的信息。
如果省略 alt
属性,则表明该图像是内容的关键部分,但没有等效的文本可用。
如果把这个属性设置为空字符串(alt=""
),则表明该图像不是内容的关键部分(这是一种装饰或者一个追踪像素点),非可视化浏览器在{{glossary("Rendering engine", "渲染")}}的时候可能会忽略它。而且,如果图片加载失败,可视化浏览器会隐藏表示图片损坏的图标。
将图像复制并粘贴为文本,或是将图像的链接保存为浏览器书签时,也会用到此属性。
anonymous
use-credentials
Origin
HTTP header)被发送 (比如,cookie, 一份证书,或者 HTTP 基本验证信息)。如果服务器没有给源站发送证书(通过 Access-Control-Allow-Credentials
HTTP header),图像将会被污染,且它的使用会受限制。原有的
HTTP 头部信息),可防止其在 {{HTMLElement('canvas')}} 中的使用。如果无效,默认当做 anonymous
关键字生效。更多信息,请查看 CORS 属性设置 。为浏览器提供图像解码方式上的提示。允许的值:
sync
译者注:这里的原文是:
Decode the image synchronously, for atomic presentation with other content.
此图像的解码将是一个原子操作,在完成解码显示之前,不被其他内容的显示而打断,因此其他内容的显示会被延迟。
async
auto
width
和 height
中的一个值,浏览器会根据原始图像进行缩放。auto
high
low
naturalWidth
/naturalHeight
on images would return the values specified in this attribute. Explainer, examples使用说明:只有在 <img>
元素是一个拥有有效 {{htmlattrxref("href","a")}} 属性的 {{htmlelement("a")}} 元素的后代元素的情况下,这个属性才会被允许使用。
eager
lazy
no-referrer
: The {{httpheader("Referer")}} header will not be sent.no-referrer-when-downgrade
: No Referer
header is sent when navigating to an origin without {{glossary("HTTPS")}}. This is the default if no policy is otherwise specified.origin
: The Referer
header will include the page's origin ({{glossary("scheme")}}, {{glossary("host")}}, and {{glossary("port")}}).origin-when-cross-origin
: Navigating to other origins will limit the included referral data to the scheme, host, and port, while navigating from the same origin will include the full path and query string.unsafe-url
: The Referer
header will always include the origin, path and query string, but not the fragment, password, or username. This is unsafe because it can leak information from TLS-protected resources to insecure origins.Media Conditions describe properties of the viewport, not of the image. For example, (max-height: 500px) 1000px
proposes to use a source of 1000px width, if the viewport is not higher than 500px.
资源尺寸的值被用来指定图像的预期尺寸。当 srcset
中的资源使用了宽度描述符 w
时,{{glossary("User agent", "用户代理")}}会使用当前图像大小来选择 srcset
中合适的一个图像 URL。被选中的尺寸影响图像的{{glossary("intrinsic size", "显示大小")}}(如果没有影响大小的 {{glossary("CSS")}} 样式被应用的话)。如果没有设置 srcset
属性,或者没有属性值,那么 sizes
属性也将不起作用。
<img>
元素来说是必需的。在支持 srcset
的浏览器中,src
被当做拥有一个像素密度的描述符 1x
的候选图像处理,除非一个图像拥有这个像素密度描述符已经被在 srcset
或者 srcset
包含 w
描述符中定义了。w
' 符号。该整数宽度除以sizes属性给出的资源(source)大小来计算得到有效的像素密度,即换算成和x描述符等价的值。x
' 符号。如果没有指定源描述符,那它会被指定为默认的 1x
。
在相同的 srcset
属性中混合使用宽度描述符和像素密度描述符时,会导致该值无效。重复的描述符(比如,两个源在相同的 srcset
两个源都是 2x
)也是无效的。
The user agent selects any of the available sources at its discretion. This provides them with significant leeway to tailor their selection based on things like user preferences or {{glossary("bandwidth")}} conditions. See our Responsive images tutorial for an example.
使用说明: 如果 <img>
元素是 {{htmlelement("a")}} 或 {{HTMLElement("button")}} 元素的后代元素则不能使用这个属性。
top
vertical-align: top
或 vertical-align: text-top
middle
vertical-align: -moz-middle-with-baseline
bottom
vertical-align: unset
或 vertical-align: initial
left
float: left
right
float: right
备注: 此属性的当前最新的 {{glossary("W3C")}} 版本,HTML 5.2 中被提到,但在 {{glossary("WHATWG")}} 组织的 HTML Living Standard 中依然处于被移除的状态。它的未来尚无定数;authors should use a {{glossary("WAI")}}-{{glossary("ARIA")}} alternative such as aria-describedby
or aria-details
.
<img>
附加样式<img>
是一个可替换元素。它的 {{cssxref("display")}} 属性的默认值是 inline
,但是它的默认分辨率是由被嵌入的图片的原始宽高来确定的,使得它就像 inline-block
一样。你可以为 <img>
设置 {{cssxref("border")}}/{{cssxref("border-radius")}}、{{cssxref("padding")}}/{{cssxref("margin")}}、{{cssxref("width")}}、{{cssxref("height")}} 等等的 CSS 属性。
<img>
没有基线(baseline),这意味着,当在一个行内格式的上下文(an inline formatting context)中使用 {{cssxref("vertical-align")}}: baseline
时,图像的底部将会与容器的文字基线对齐。
You can use the {{cssxref("object-position")}} property to position the image within the element's box, and the {{cssxref("object-fit")}} property to adjust the sizing of the image within the box (for example, whether the image should fit the box or fill it even if clipping is required).
根据图像文件的类型,图像可能会有一个原始分辨率(intrinsic dimension)或者叫原始宽高。对于一些类型的图像,原始分辨率并不是必要的。比如说,{{glossary("SVG")}} 图像,如果它们的根 {{SVGElement("svg")}} 元素没有 width
或 height
属性,SVG 图像就可以没有原始分辨率。
译者注:原始分辨率/原始宽高是图像的固有属性,基本上就是图像本身的分辨率/宽高。只与图像本身有关,与 <img>
元素的属性、显示分辨率等等无关。点阵图像通常有且只有一个随图片宽高变化的原始分辨率,而矢量图像可以没有。不过,编辑矢量图像时,通常可以手动/编辑器自动为其设置原始分辨率。
下面的示例将图像嵌入到页面中,且包含用于改善可访问性的备用文本。
<img src="favicon144.png" alt="MDN logo">
{{ EmbedLiveSample('Alternative_text', '100%', '160') }}
此示例建立在前一个示例的基础上,展示了如何将图像转换为链接。为做到这一点,将 <img>
标签嵌套在 {{HTMLElement("a")}} 之内。这时,备用文本应当描述链接所指向的资源,就像是文本链接一样。
<a href="https://developer.mozilla.org"> <img src="favicon144.png" alt="Visit the MDN site"> </a>
{{ EmbedLiveSample('Image_link', '100%', '160') }}
srcset
属性在这个例子中,我们包含了一个 srcset
属性,它引用了 MDN 标志高清版本;在高分辨率设备上,它将被优先加载,取代 src
属性中的图像。在支持 srcset
的{{glossary("User agent", "用户代理")}}中,src
属性中的图片被作为 1x
候选项。
<img src="favicon72.png" alt="MDN logo" srcset="favicon144.png 2x">
{{EmbedLiveSample("Using_the_srcset_attribute", "100%", "160")}}
srcset
和 sizes
属性在支持 srcset
的用户代理中,当使用 w
描述符时,src 属性会被忽略。当匹配了媒体条件 (min-width: 600px)
时,图像将宽 200px,否则宽 50vw(视图宽度的50%)。
<img src="clock-demo-200px.png" alt="Clock" srcset="clock-demo-200px.png 200w, clock-demo-400px.png 400w" sizes="(max-width: 600px) 200px, 50vw">
{{EmbedLiveSample("Using_the_srcset_and_sizes_attributes", "100%", 350)}}
若要看到大小调整的效果,请{{LiveSampleLink('Using_the_srcset_and_sizes_attributes', '打开单独的页面查看示例')}},以便拖动窗口,调整内容区域的大小。
虽然 <img>
元素的用途是很单纯(原文:innocent)的,但是它们可对用户安全和隐私造成不良的后果。See Referer header: privacy and security concerns for more information and mitigations.
alt
属性的值应该清晰、简洁地描述图像的内容。它不应该描述“图像的存在”,或仅仅包含图像的文件名。如果因为图像没有等价的文本描述, alt
属性只得不写或留白,那么可以考虑使用其他方法来呈现图像试图传递的内容。
<img alt="图片" src="penguin.jpg">
<img alt="一只站在沙滩上的跳岩企鹅。" src="penguin.jpg">
当图像上没有 alt
属性时,一些屏幕阅读器可能会读出图像的文件名。如果文件名不能代表图像的内容,甚至是一团乱码,这可只能造成令人迷惑的体验。
title
属性{{htmlattrxref("title")}} 属性不是 alt
属性可接受的替代品。并且,避免将 alt
属性的值直接复制到同一幅图片的title
属性上。这样可能会让一些屏幕阅读器把同一段描述读两遍,造成一定程度上的困扰。
title
属性也不该被用作一幅图片在 alt
之外的补充说明信息。如果一幅图片需要小标题,使用 figure
或 figcaption
元素。
title
元素的值一般作为提示条(tooltip)呈现给用户,在光标于图片上停下后显示出来。尽管这确实能给用户提供更多的信息,您不该假定用户真的能看到:用户可能只有键盘或触摸屏。如果要把特别重要的信息提供给用户,选择上面提供的一种方法将其内联显示,而不是使用 title
。
内容类别 | 流式内容、短语内容、嵌入内容, palpable content. If the element has a usemap attribute, it also is a part of the interactive content category. |
---|---|
允许的内容 | 无,它是一个 {{Glossary("empty element", "空元素")}}。 |
标签省略 | 必须有开始标签,不可有结束标签。 |
允许的父元素 | 接受嵌入内容的任意元素。 |
允许的 ARIA 角色 | 任意 |
DOM 接口 | {{domxref("HTMLImageElement")}} |
规范 | 状态 | 说明 |
---|---|---|
{{SpecName('Referrer Policy', '#referrer-policy-delivery-referrer-attribute', 'referrer attribute')}} | {{Spec2('Referrer Policy')}} | Added the referrerpolicy attribute. |
{{SpecName('HTML WHATWG', 'embedded-content.html#the-img-element', '<img>')}} | {{Spec2('HTML WHATWG')}} | |
{{SpecName('HTML5 W3C', 'embedded-content-0.html#the-img-element', '<img>')}} | {{Spec2('HTML5 W3C')}} | |
{{SpecName('HTML4.01', 'struct/objects.html#h-13.2', '<img>')}} | {{Spec2('HTML4.01')}} |
{{Compat("html.elements.img")}}