正在加载...

HTML picture 元素

许多页面只用一个 img 就足够了。当你需要为不同屏幕或格式提供不同文件时——桌面用宽幅裁切、手机用更紧的裁切,或用现代格式并附带 JPEG 后备——picture 元素可以提供多个候选项。浏览器会选出合适的一个;后备 img 则照顾旧客户端和无障碍访问。

picture 增加了什么

picture 是一个容器。在其中放置零个或多个 source 元素,以及恰好一个后备 img。每个 source 可以声明何时适用(media)或它是什么格式(type),以及文件位置(srcset)。img 不是可有可无的装饰:它是必需的后备,也是放置 alt 的位置。

直接回答

在 <picture> 内包裹一个或多个 <source> 元素以及一个后备 <img>。用 media 表达 viewport 条件,用 type 表达 WebP 等格式。img 仍然需要 src 和 alt。初学者可以先用同一张照片的两个宽度,再去收集各种现代格式。

用 media 做艺术指导

艺术指导(art direction)指的是为不同 viewport 提供不同裁切或布局——不仅仅是「同一张照片缩小一点」。source 上的 media 让你把宽布局和窄布局指向不同的文件。

带 media 与后备 img 的 picture

html
HTML Code
<picture>
<source media="(min-width: 800px)" srcset="images/wide.jpg">
<source media="(min-width: 400px)" srcset="images/medium.jpg">
<img src="images/small.jpg" alt="Mountain trail at sunrise">
</picture>

如何阅读 media 示例

  • 常见教学写法会把 source 从更具体的条件排到更宽泛的条件;浏览器仍会自行评估并选出匹配项
  • source 上的 srcset 指向候选文件的 URL
  • 最终的 img 在没有任何 source 匹配、或 picture 支持不完整时,提供 src 和 alt
  • 练习时调整窗口大小,观察哪个文件合适——若要确认请求,可用 DevTools 的 Network 面板

用 type 选择格式

有时同一构图会以 WebP 提供给支持该格式的浏览器,并以 JPEG 提供给其他浏览器。type 告诉浏览器 MIME 类型,从而可以跳过不支持的格式,而不必先下载它们。

带 type 与后备 img 的 picture

html
HTML Code
<picture>
<source type="image/webp" srcset="images/hero.webp">
<img src="images/hero.jpg" alt="Product hero on a clean desk">
</picture>

把第一天的范围保持很小

第一次练习不必覆盖每一种格式和每一个断点。先让一个带有两个合理候选项的 picture 跑通,在 img 上保持诚实的 alt,然后再扩展。响应式 srcset 的密度描述符以及更高级的 sizes 属性,会在你逐步进阶时再学。

alt 留在 img 上

不要只把无障碍文本写在 source 上。屏幕阅读器和后备渲染都依赖 img。图像那一课里的装饰规则仍然适用:信息性图像需要真正的 alt;纯装饰可以用 alt=""。

picture 与单个 img

当一个文件就够用时,使用普通的 img。只有当你确实需要按条件使用不同文件时——viewport 艺术指导或格式切换——才使用 picture。没有真实需求的多余标记只会增加维护成本。

顺序与后备习惯

把 source 元素列在 img 之前。始终包含 img。如果忘记后备,某些浏览器和许多教学校验器会把该模式视为不完整。用窄窗口和宽窗口各测一次,也用可能不偏好你「花哨」格式的浏览器测一次。

在编辑器中练习

  1. 准备同一张照片的两个宽度(或两个清晰的练习文件)。
  2. 构建一个带有两个 source media 查询和一个后备 img 的 picture。
  3. 调整浏览器窗口大小,观察哪个文件合适。
  4. 确认 alt 仍在 img 上,而不是只写在注释里。
  5. 可选:在 JPEG img 上方添加带 type="image/webp" 的 WebP source,并确认该模式在各处仍能显示图像。

常见错误

  • 忘记后备 img
  • 只把 alt 写在 source 上,而不是写在 img 上
  • 在基础 media 模式尚未跑通前就堆叠过多格式
  • 在单个优化后的 img 就足够时仍使用 picture
  • 裁切不一致,导致 viewport 跨越断点时让用户感到突兀
  • 把 source 上的 srcset 与链接的 href 混为一谈

小结

  • picture 提供多个图像候选项;浏览器会选出其中一个
  • 使用 source 加上必需的后备 img
  • media 引导 viewport 选择;type 引导格式选择
  • alt 留在 img 上
  • 从简单开始:两个宽度,或一种现代格式加上 JPEG 后备

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
6
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部