- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在隐身模式下使用 Google Chrome 进行了测试,每次都使用“清空缓存和硬重新加载”重新加载页面。
我有以下 html 响应图像:
<img class="content-img" src="/app/uploads/2018/07/1400x750.png"
srcset="/app/uploads/2018/07/1400x750.png 1400w,
/app/uploads/2018/07/1400x750-768x411.png 768w,
/app/uploads/2018/07/1400x750-1280x686.png 1280w,
/app/uploads/2018/07/1400x750-520x279.png 520w,
/app/uploads/2018/07/1400x750-420x225.png 420w,
/app/uploads/2018/07/1400x750-340x182.png 340w,
/app/uploads/2018/07/1400x750-600x321.png 600w"
sizes="(max-width: 666px) 100vw, (max-width: 1399px) 38vw, 535px"
>
预期行为:
<强>1。视口(viewport)宽度 0px - 666px:
<强>2。视口(viewport)宽度 667 像素 - 1399 像素:
<强>3。视口(viewport)宽度 1400+ 像素:
实际行为:
在 Google Chrome 中进行测试,使用开发工具检查 img 上的所有上述示例的元素,在每种情况下生成的“CurrentSrc”是:
/app/uploads/2018/07/1400x750-520x279.png (正确)
/app/uploads/2018/07/1400x750-1280x686.png (错误(预期宽度为 420 像素)
/app/uploads/2018/07/1400x750.png (不正确(预期宽度为 600 像素)
我摸不着头脑,其他类似的问题似乎都归结为谷歌浏览器缓存问题,但我在测试时已经小心地消除了这个问题,但我仍然没有得到我的 src 图片期待。
我只有 90% 确定我已经为我想要的行为编写了正确的“尺寸”属性。请注意,由于与响应式 CSS 断点对齐并尝试在上下文中加载合理的图像宽度,因此逻辑略微复杂。
最佳答案
关于 srcset
的一些说明和 sizes
属性定义浏览器应选择显示哪个图像的方式(有关详细信息,请参阅 Responsive images)。
首先,浏览器检查sizes
属性以查找适用于当前设备宽度的第一个媒体条件。因此,对于您指定的断点,浏览器应该在最大 666px 宽的设备上以全视口(viewport)宽度显示所选图像,然后在 667px 到 1399px 宽的设备上以视口(viewport)宽度的 38% 显示,最后在设备上以固定的 535px 宽度显示大于 1399 像素宽。
其次,浏览器检查srcset
属性以查找与 sizes
确定的图像插槽大小最匹配的图像属性(如上所述)。
因此对于您指定的断点,预计会出现以下情况:
1) 对于最大 666px 宽的设备,浏览器应选择最接近设备宽度的图像宽度(而不是大于设备宽度的最小图像)。
例子:
在 450 像素宽的设备上,浏览器应选择 420 宽的图像。
在 599px 宽的设备上,浏览器应该选择 600w 的图像。
2) 对于宽度在 667px 和 1399px 之间的设备,浏览器应选择最接近设备宽度 38% 的图像宽度。
例子:
在 1000px 宽的设备上,浏览器应该选择 340w 图像或 420w 图像(由于媒体查询确定的图像插槽大小为 380px,所以当你拆分差异时不确定它是如何选择的)
在 1366px 宽的设备上,浏览器应该选择 520w 的图像(因为由媒体查询确定的插槽大小是 519px)
3) 对于宽度超过 1399px 的设备,浏览器应该选择 520w 图像(因为媒体查询确定的插槽大小是固定的 535px)。
注意:Retina 和其他高分辨率显示器稍微改变了数学,导致浏览器或多或少地将其在上述每个示例中选择的图像宽度加倍(参见 Responsive images: if you're just changing resolutions, use srcset)。
有几个潜在问题需要仔细检查。确保你有 <meta name="viewport" content="width=device-width">
在头部所以你测试的设备在加载页面时被迫采用它们的真实宽度。还要确保您没有冲突的 css 或 js 干扰图像的显示。
如果您避免了陷阱,您的代码在其他方面看起来不错,并且下面的类似代码片段为我提供了预期的结果,尽管您在测试时必须小心缓存,正如您已经注意到的那样(稍微不同的组织可能会帮助您更多快速扫描在不同情况下应选择哪些图像)。下面是使用占位符图像显示宽度的代码片段,这可能有助于您的测试。
<img srcset="https://via.placeholder.com/340x182 340w,
https://via.placeholder.com/420x225 420w,
https://via.placeholder.com/520x279 520w,
https://via.placeholder.com/600x321 600w,
https://via.placeholder.com/768x411 768w,
https://via.placeholder.com/1280x686 1280w,
https://via.placeholder.com/1400x750 1400w"
sizes="(max-width: 666px) 100vw,
(max-width: 1399px) 38vw,
535px"
src="https://via.placeholder.com/340x182"
alt="placeholder image">
关于html - 响应式 img 从 srcset 获取错误图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51290584/
我想替换每一个 带结束标记 字符串中的标记。该字符串实际上是一个 html 文档,其中 img 标记由我生成,并且始终如下所示: Src 是用户输入,所以它可以是任何东西。我做了一个正则表达式,不确
我使用数组通过 getElementsByClassName 存储我所有的 imgs。 我需要知道哪个 img 被点击或 mouseover/mouseout,所以我使用循环来检查哪个 img 被点击
我正在尝试使用图像制作一款类似 Match3 的游戏,但我无法进行比较。我正在为固定数量的 atm 执行此操作,只是为了让它正常工作,稍后应该在 foreach 循环中。如果有什么区别的话,该函数位于
我希望你能帮助我:) 我想定义 img 的高度,相对于图像的“实际”宽度。但宽度是动态的,因为它占父对象的百分比(wxample 的浏览器窗口)。 为什么我需要高度?:没有高度它工作正常,但我需要它,
我知道这个话题被讨论了很多,但我找不到任何适合我的解决方案。所以,我的代码大致是: var img =me.images[curID] var f = function() { var
我试图在一个页面上列出多个图像,但当您单击图像时,它会以模式打开。 它适用于第一张图片,但不适用于其他图片,我假设这是一个 JS 问题,我尝试设置一个空的 var,然后将其设置为获取元素 ID(每个
任务:我们正在通过 HttpWebRequest 抓取 HTML 内容(约 6,000 个调用)。该字符串经过修剪并存储在 SQL Server 2014 数据库中,以便作为 XML 进行处理。 问题
我从上面得到这个错误,不知道如何避免它。我的目的是获取屏幕截图,然后对其进行模板匹配,以查看此时屏幕上是否显示图标。到目前为止,它只是图标的位置。我的代码: #include "opencv2/hig
我有一个包含图像的容器,该图像是从应用程序加载的,因此容器的尺寸是已知的,而图像会有所不同。 我目前有以下 css: #secondary_photos { height: 100px; wi
我正在尝试设置一个随分辨率缩放但看起来仍然不错的页面背景..这就是我正在使用的.. 站点是http://www.gd-gaming.com/wordpress ,如果你用 Firebug 检查它,它只
目前我有 如何删除包装 img 标签的 p 标签? 所以我可以得到.. 最佳答案 使用 $('p > img').unwrap(''); 这将删除 img 周围的所有 p。您应该使用 cl
我想要动画 3 .svg图片: 和css : .sequence { position: relative; } .sequence img { position: ab
我有外部 RSS 提要填充以下重复出现的类 elements 。 {teaserImage} {teaserImage} {teaserImage} 我想简单地获取 :first 实例,该实例也是来自
这是一个独特的问题: 我不想使用浏览器 JavaScript 来解决这个问题,请继续阅读... 我要转换 通过编译应用程序( ng build 或 ng serve )到 Base64 img 标签,
悬停在 中的第一张图片上标记,我需要使用 CSS 增加第二张图片的不透明度。我试过使用 +和 ~运营商,无法让它发挥作用。任何帮助将不胜感激。 最佳答案 a:hover + img
我已经尝试解决这个问题有一段时间了,但我迷路了,有人吗? for(var i=0; i<10; i++) { var Img = new Image(); Img.onload = (
这就是我想要实现的目标: 当用户将鼠标悬停在较小的图像之一上时: 较小的图像 + 文本应替换较大的图像 + 文本。 当用户没有悬停时;将大集返回到其原始图像和文字。 这就是我到目前为止所拥有的。它没有
我知道如何在 php 中执行此操作,但我需要在 javascript/jquery 中完成此操作。 我正在尝试执行以下操作: $('#NewBox').html( $('#OldBox').html(
我正在使用一个 CMS (ExpressionEngine),它将段落标签包裹在图像周围。我正在使用响应式图像(最大宽度:100%),并且由于我还在段落上定义宽度,因此它会导致问题。我想使用 jQue
Tinymce 正在删除我的 img 结束标记并生成无效的 xhtml。 它变成了这个 进入这个 我也在使用 codemagic,但是在查看 html 时它仍然显示 .我也试过包括 , 但输出是
我是一名优秀的程序员,十分优秀!