解释图像的`srcset`中的`w`

2024-02-11

据我了解,srcset用于根据以下内容确定要加载的图像dpi设备的。我在 Google Web Fundamentals 上看到了这个例子,它似乎使用了w单位连同vw单位恰好是视口宽度的 1%:

<img src="lighthouse-200.jpg" sizes="50vw"
     srcset="lighthouse-100.jpg 100w, lighthouse-200.jpg 200w,
             lighthouse-400.jpg 400w, lighthouse-800.jpg 800w,
             lighthouse-1000.jpg 1000w, lighthouse-1400.jpg 1400w,
             lighthouse-1800.jpg 1800w" alt="a lighthouse">

帮助我了解其测量单位是什么以及如何使用它?


w是图像的固有宽度。这是当您右键单击图像并在 Mac 上选择“获取信息”或在 Windows 上选择“属性”时获得的数字。

为什么需要指定w?因为第一个值srcset属性仅指向加载图像的链接。它没有说明图像的宽度。在实际加载图像之前,浏览器无法得知图像的尺寸。

为什么浏览器需要知道图像的固有宽度?

以下是浏览器在加载图像时执行的操作:

  • 查看其设备宽度
  • look at sizes并找出最适合选择的图像尺寸
  • 查看参考文献列表srcSet并选择尺寸匹配或大于上面数字的图像。

借用 MDN 的示例代码:

<img srcset="elva-fairy-480w.jpg 480w,
             elva-fairy-800w.jpg 800w"
     sizes="(max-width: 600px) 480px,
            800px"
     src="elva-fairy-800w.jpg"
     alt="Elva dressed as a fairy">

常见的做法是在图像路径中包含固有图像宽度。然而,没有什么可以阻止你像这样撒谎:

<img srcset="elva-fairy-480w.jpg 600w,
             elva-fairy-800w.jpg 800w"
     sizes="(max-width: 600px) 480px,
            800px"
     src="elva-fairy-800w.jpg"
     alt="Elva dressed as a fairy">

这意味着如果视口宽度为 480px 的浏览器加载页面,max-width: 600px条件为真,浏览器有一个 480px 宽的槽来加载图像。

图片elva-fairy-480w.jpg将被加载,因为其固有宽度(600w - 膨胀!)最接近插槽尺寸。

因此,如果夸大图像的固有宽度,可能不会有什么坏处。

如果低估了固有宽度怎么办?

<img srcset="elva-fairy-480w.jpg 280w,
             elva-fairy-800w.jpg 800w"
     sizes="(max-width: 600px) 480px,
            800px"
     src="elva-fairy-800w.jpg"
     alt="Elva dressed as a fairy">

在 480px 的视口宽度上,图像elva-fairy-800w.jpg将被加载,因为elva-fairy-480w.jpg据报道为 280w,不符合指令sizes.

因此,低估图像的固有宽度将导致浏览器加载过大的图像,这违背了响应式图像的初衷。

不过,我还没有考虑到对图像的内在宽度撒谎所带来的所有后果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释图像的`srcset`中的`w` 的相关文章

随机推荐

  • 使垂直菜单高度适合 100%

    我画了一张草图https i stack imgur com NiSi8 jpg https i stack imgur com NiSi8 jpg所以侧边栏必须与内容侧边栏一起一直向下拖动 它的高度应该是 100 以及它的所有父级 div
  • 为什么 tailwind 不覆盖本地定义的样式?

    我正在尝试通过 tailwindcss 麦粒肿更改文本的默认颜色 但我不明白为什么它不起作用 但 Bootstrap 确实会覆盖默认样式 我是 tailwindcss 的新手 有人能告诉我这里发生了什么事吗 在这里您可以在codesandb
  • 检查 QFont 是 Serif 还是 Sans-Serif

    我有一个由用户选择的 QFont QFont font QFontDialog getFont ok prevFont this 我如何知道它是否是衬线字体 这有效吗 bool isSansSerrif font styleHint QFo
  • Java 中的时间对象是什么?

    我在探索TemporalQuery http docs oracle com javase 8 docs api java time temporal TemporalQuery html and TemporalAccessor http
  • 如何在 Eclipse 中运行 Java 9 主类而不编辑启动配置?

    我在 Eclipse Oxygen 1a Release 4 7 1a 的 Maven 项目中创建了一个简单的 Hello World 主类和一个 module info java 文件 运行在 Java 9 0 1 上 当我尝试右键单击启
  • 如何将mysql数据库中的表导出到excel?

    我在 mysql 中有一个表 该表非常大 有超过 100k 行 我想将其导出到 Excel 但是 我尝试了 phpmyadmin 上的导出到 excel 功能 但转储 excel 文件需要很长时间 这甚至不是倾销 错误始终是 连接已重置 有
  • 是否有基于终端及其祖先映射递归数据类型的名称?

    假设我有一个如下所示的类型 data Term a Terminal a Application Term a Term a Abstraction String Term a 现在 我想绘制地图Term a to Term b 理想情况下
  • 如何在 Emacs 中检查 Python 代码的语法而不实际执行它?

    Python 的 IDLE 有 检查模块 Alt X 来检查语法 无需运行代码即可调用该语法 在 Emacs 中是否有等效的方法来执行此操作 而不是运行和执行代码 python m py compile script py
  • Java N/IO 中的行分隔符?

    使用以下命令写入 txt 文件时如何插入新行java nio file 以下代码生成一个只有一行的txt文件ABCDEF 而不是两条单独的线ABC and DEF public static void main String args th
  • Python Spark从数据框中提取字符

    我在 Spark 中有一个数据框 如下所示 ID Column 1 STRINGOFLETTERS 2 SOMEOTHERCHARACTERS 3 ANOTHERSTRING 4 EXAMPLEEXAMPLE 我想做的是从列中提取前 5 个
  • 通过虚拟盒提供的 ember-cli 违反了内容安全策略

    我有一个新鲜的ember cli v 0 1 2应用 我在虚拟框中提供 ember 并通过仅主机配置的网络适配器从主机访问网页 地址为192 168 56 102 当我跑步时ember serve从虚拟盒子中访问192 168 56 102
  • Grabwidget 即使放大也能获取完整视图

    我在用QPixmap QPixmap grabWidget QWidget widget int x 0 int y 0 int width 1 int height 1 抓住视口QPixmap object 在某些情况下 即使屏幕放大到一
  • 为什么如果类的成员是引用,则复制对象是非法的?

    我遇到一个测验 指出下面第 18 行中的代码格式不正确 因为 当需要复制的成员之一是引用时 使用隐式定义的赋值运算符是格式不正确的 我无法理解这一点 为什么无法复制引用 为什么16号线是合法的 第 16 行与第 18 行非常相似 复制构造函
  • Socket.io 中的身份验证

    我将尝试验证 socket io 上的连接 目前 用户首先通过 REST API 进行身份验证 然后 我向用户发送JsonWebToken与经过身份验证的用户的用户名 打开客户端和服务器之间的连接后 我的计划是暂时从已连接套接字列表中删除该
  • GEKKO:不响应约束也不求解 obj 函数

    以下是与这个问题相关的内容 使用 Gekko 的 MPC 和 ARX 模型 https stackoverflow com questions 63727310 mpc with arx model using gekko 63731362
  • WPF 中的多行组合框

    我试图找到 WPF 的多行用户可编辑组合框的示例 我们已经使用自定义模板尝试了各种方法 但无法使其工作 我们试图解决的具体问题是在下拉列表中显示地址列表 用户可以同时输入新地址 在组合框中输入内容没有问题 但多行却让我们丧命 如果我们想在
  • 如何绘制不在道路上的路线,MKMapView

    所以我一直在尝试使用 MKMapView 和叠加层来创建 不在道路上的道路 这可能听起来很奇怪 但我想做的是 在我的 iOS 应用程序中 我想绘制特定酒店提供的短途旅行路线 但是到目前为止我发现的所有帖子都集中在现有道路上 因为短途旅行会经
  • “外部 IP 地址”和“公共 IP 地址”这两个术语是同义词吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 外部IP地址与公共IP地址以及内部I
  • 使用 for in 循环使类可迭代?

    我有一个自定义类 class MyArrayClass 该类是一个自定义列表实现 我想做以下事情 var arr MyArrayClass MyArrayClass arr append first arr append second ar
  • 解释图像的`srcset`中的`w`

    据我了解 srcset用于根据以下内容确定要加载的图像dpi设备的 我在 Google Web Fundamentals 上看到了这个例子 它似乎使用了w单位连同vw单位恰好是视口宽度的 1 img src lighthouse 200 j