标签: srcset

浏览器正在加载两张图片-一幅用于srcset,一幅用于src(Chrome 41等)

我正在开发的网页上使用srcset属性。

<img src="img/picture-820x496.jpg" 
    srcset="img/picture-820x496.jpg 1200w, 
    img/picture-374x226.jpg 992w, 
    img/picture-305x185.jpg 768w, 
    img/picture-707x428.jpg 300w" />
Run Code Online (Sandbox Code Playgroud)

如果我检查页面上加载了哪些资源,我会看到Chrome 41以及使用polyfill的FF以及Safari 7始终将图像加载两次-一次是完整分辨率,一次是从srcset属性获得的相应大小。我在这里做错了什么?

safari firefox html5 google-chrome srcset

5
推荐指数
1
解决办法
1580
查看次数

我可以将<picture>用于高度和宽度受限的图像吗?

我有一个幻灯片放映的东西,图像将尽可能大,但不超过视口的宽度或高度.基本上object-fit: contain.

我想让这些图像反应灵敏,因为对于手机而言,"尽可能大",而大型桌面则非常不同.我不能使用<img srcset>因为它现在只有屏幕密度(x描述符)或宽度(w描述符).因此,<picture>我自己手动制作选择逻辑.

我开始时:

<picture>
  <source media="(orientation:portrait)"
          sizes="(max-width: 1200px) 100vw, 1200px"
          srcset="300.jpg 300w, 500.jpg 500w, 800.jpg 800w, 1200.jpg 1200w">
  <source sizes="(max-width: 1200px) 100vw, 1200px"
          srcset="300.jpg 300w, 500.jpg 500w, 800.jpg 800w, 1200.jpg 1200w">
  <img src="default.jpg" alt="a man slipping on a banana peel">
</picture>
Run Code Online (Sandbox Code Playgroud)

但它并不像屏幕的方向那么简单,因为所涉及的实际宽高比对于视口(非常高的手机,浏览器工具栏等)和图像本身而言都会变得非常奇特; 相同的图像可能在一个屏幕上受到宽度约束,但在另一个屏幕上受到高度约束.我想我可以写解析出的纵横比的脚本,但我难倒逻辑来把它转换成一个有意义srcsetsizes列表.

理想情况下 很快<img srcset>就会获得h描述符,但我想将现在可以解决的问题混在一起.

html image responsive-design srcset

5
推荐指数
1
解决办法
1184
查看次数

img srcset 基于 img 宽度而不是视口宽度

我有一个部分模板,它在页面上呈现一篇文章,该页面基本上是图像和随附的文本。在登陆页面中,我将在页面上放置几篇具有不同类别的文章,主要文章将是全宽,次要文章将是半宽度,第三篇文章将是第三宽度。有时侧边栏文章的宽度也非常小。然后,根据视口,有时图像可以渲染在文本上方或文本左侧。

总而言之,同一篇文章的 HTML 根据上下文以多种方式呈现。

在最新的 srcset 规范中有什么方法可以解释这一点吗?

据我所知,每个上下文必须有不同的大小属性,本质上是将布局/断点耦合到标记,在我的实现中具有如此多的上下文,这将使服务器端逻辑变得可怕。

html srcset

5
推荐指数
1
解决办法
1261
查看次数

如何从 srcset 确定最高分辨率图像

假设我有一张图片

<img srcset="large.jpg 1400w, medium.jpg 700w, small.jpg 400w"
     sizes="(min-width: 700px) 700px, 100vw"
     alt="A woman reading">
Run Code Online (Sandbox Code Playgroud)


现在这也可以是这样的格式

<img srcset="large.jpg 2x, medium.jpg 1.3x, small.jpg 0.8x"
     sizes="(min-width: 700px) 700px, 100vw"
     alt="A woman reading">
Run Code Online (Sandbox Code Playgroud)


另外,(不是有效的 HTML)

<img srcset="large.jpg 1400w, medium.jpg 1.3x, small.jpg 0.8x"
     sizes="(min-width: 700px) 700px, 100vw"
     alt="A woman reading">
Run Code Online (Sandbox Code Playgroud)


现在我如何提取具有最高分辨率图像的 URL。
我想过分割 srcset 然后提取大小,但问题是大小可以是1200w格式或2x格式或两者都可以,我不知道如何区分这是1200w格式还是2x格式,即使我这样做找出什么是什么,我如何比较它们以确定最大尺寸。

我希望我能展示我已经尝试过的东西,但我没有想到如何做到这一点!

javascript url jquery image srcset

5
推荐指数
2
解决办法
4478
查看次数

HTML srcset - 何时使用 x 描述符?

我正在阅读 HTML5 中的响应式图像并有一个问题。

什么时候会使用 x 描述符?例如,如果您有同一图像的不同分辨率版本,为什么您不使用 w 描述符呢?据我了解,如果你定义:

<img src="fallback.img" alt"txt"
     srcset="large.jpg 1024w,
             medium.jpg 640w,
             small.jpg  320w,"
     sizes="250px"   
     alt="txt">
Run Code Online (Sandbox Code Playgroud)

然后,浏览器通过将图像的宽度(1024,640,320)(由 w 描述符提供)除以它们将要显示的宽度(250)(由尺寸属性提供)来计算出像素密度。通过获取像素密度,浏览器可以考虑高密度显示。

到目前为止,这就是我的理解,如果我错了,我很想知道。那么什么时候 w 描述符不是最佳选择/什么时候 x 描述符更可取?

html descriptor responsive-design srcset responsive-images

5
推荐指数
1
解决办法
2290
查看次数

如何从Webpack中&lt;picture&gt;的srcset属性加载图片?

我开始在我的 Webpack 应用程序中使用该标签,并注意到当前设置不适用于 srcset 中引用的图像:

<picture>
<source srcset="img/goal-2.jpg" media="(min-width: 675px)">
<img src="../img/goal-2-s.jpg">
</picture>
Run Code Online (Sandbox Code Playgroud)

目标 2-s.jpg 被正确解析并复制到我的构建文件夹,而目标 2.jpg 被忽略。

目前我的 webpack.config.js 配置是这样的:

{
    test: /\.(jpe?g|png|gif|svg)$/i,
    loader: 'file?name=img/[name].[ext]'
},...
Run Code Online (Sandbox Code Playgroud)

我不想自动生成不同大小的文件——我加载的文件的裁剪方式不同,我手动完成并将其保存在我的应用程序文件夹中。我想要的只是 Webpack 以与处理 img 的 src 图像相同的方式处理我的源的 srcset 图像。

谢谢!

image webpack srcset

5
推荐指数
1
解决办法
2187
查看次数

Safari 在调整大小时不请求 srcset 图像

我想提供响应式图像,为此我使用 srcset 属性。

<img 
    src="https://res.cloudinary.com/demo/image/upload/w_480/group.jpg" 
    alt=""
    srcset="
        https://res.cloudinary.com/demo/image/upload/w_480/group.jpg 480w,
        https://res.cloudinary.com/demo/image/upload/w_750/group.jpg 750w,
        https://res.cloudinary.com/demo/image/upload/w_1334/group.jpg 1334w,
        https://res.cloudinary.com/demo/image/upload/w_1536/group.jpg 1536w,
        https://res.cloudinary.com/demo/image/upload/w_2048/group.jpg 2048w
    "
>
Run Code Online (Sandbox Code Playgroud)

Chrome 和 android 按预期工作;在纵向移动中,它将加载一个“小”图像,只是填充宽度所需的图像,如果您转动手机,它将根据新宽度请求新图像。

在 Chrome 检查器工具中选择 iOS 设备(iPhone 6、iPad)效果很好:

在此处输入图片说明

但是 Safari 桌面版和移动版都不会在调整大小/转动设备上请求新图像。但它确实在重新加载时请求正确的图像。

我尝试过 Safari 9.1.2 和 11.0、iPhone 6 (iOS 10.3.2)、iPhone 6s (iOS 11.0) 和 iPad Air 2 (iOS 11.0)。

Safari 是否仍然缺乏对 srcset 的支持?它被认为是完全支持的

codepen测试自己。 也在 codepen 上写代码

html safari mobile-safari srcset responsive-images

5
推荐指数
1
解决办法
1952
查看次数

Bootstrap响应断点的大小属性

我正在我的页面上进行优化,这一切都很顺利,因为我想出了一个实现srcsetsizes属性的想法<img>.我使用新的缩放图像(额外的1200w,大型992w,中型786w,小型576w,extra_small-320w)创建php构造img对象和填充srcset属性的函数和通用(尽可能多的可用)sizes属性(下面的示例) .当开始使用杂发生启动问题引导网格系统对于不同的vw(视图宽度),例如col-lg-4 col-md-6.我尝试了很多不同的版本,sizes但它似乎没有工作,除了一个:

sizes="(min-width: 36em) calc(.333 * (100vw - 12em)), 100vw"

这是有效的,但对于一个网格 - 在这个例子.333中是col-4.(12em是sidenav宽度).

但是对于多个网格,我尝试了这个:

sizes="(max-width: 575.98px) 100vw,
        ((min-width: 576px) and (max-width: 767.98px)) 100vw,
        ((min-width: 768px) and (max-width: 991.98px)) calc(.5 * 100vw),
        ((min-width: 992px) and (max-width: 1199.98px)) calc(.333 * 100vw),
        ((min-width: 1200px) and (max-width: 1440.98px)) calc(.333 * 100vw),
        (min-width: 1441px) calc(.333 * …
Run Code Online (Sandbox Code Playgroud)

html media-queries twitter-bootstrap srcset bootstrap-4

5
推荐指数
1
解决办法
1675
查看次数

浏览器如何使用 &lt;img&gt;“sizes”和“srcset”属性选择正确的图像?

属性如何srcset结合属性确定正确的图像sizes?以此图为例:

<img alt="Demo image"
     sizes="(min-width: 1024px) 512px,
             100vw"
     srcset="img/banner-large.jpg 2048w,
             img/banner-medium.jpg 1400w,
             img/banner-small.jpg 800w">
Run Code Online (Sandbox Code Playgroud)

(我清除了Chrome中的缓存)

我认为最后一个图像总是会被选择(800w),因为 512px(尺寸)和图像宽度为 800w(srcset),但该图像并不总是被选择?为什么?

css image responsive-design srcset

5
推荐指数
2
解决办法
2635
查看次数

具有 srcset、大小、媒体查询的响应式图像 - 防止加载巨大图像以获得更高的像素密度

我很长一段时间都使用图片元素来制作每个视口不同尺寸的响应式图像。它工作得很好,但现在我被迫切换到响应式,并且<img>我尝试将我的图片元素重写为 IMG 样式。srcsetsizes

经过长时间的搜索,我在以下位置找到了很好的文档:

https://www.dofactory.com/html/img/sizes 以及更多详细信息: https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images

带图片的代码是这样的:

<picture>
    <source media="(max-width: 740px)" src="740.jpg" type="image/jpeg">
    <source media="(max-width: 980px)" src="1280.jpg" type="image/jpeg">
    <source media="(max-width: 1280px)" src="1600.jpg" type="image/jpeg">
    <source media="(max-width: 1480px)" src="1920.jpg" type="image/jpeg">
    <img src="740.jpg" title="..." alt="..." />
</picture>  
Run Code Online (Sandbox Code Playgroud)

我将其重写为响应式 img,如下所示:

<img src="740.jpg" title="..." alt="..." 
    srcset="
       740.jpg 740w,
       1280.jpg 1280w,
       1600.jpg 1600w,
       1920.jpg 1920w" 
    sizes="
       (max-width: 740px) 740px,
       (max-width: 980px) 1280px,
       (max-width: 1280px) 1600px,
       (max-width: 1480px) 1920px"
/>
Run Code Online (Sandbox Code Playgroud)

这在浏览器中的第一次测试中似乎效果很好。但后来我注意到在移动设备上它加载了太大的图像。

原因是某些移动设备的像素密度不同,如 响应图像完整指南中所述

您也可以使用 Firefox 的开发工具来模拟: Firefox 开发工具

我尝试通过将代码更改为来解决此问题

<img src="1920.jpg" title="..." alt="..." 
    srcset=" …
Run Code Online (Sandbox Code Playgroud)

html image srcset pixel-density responsive-images

5
推荐指数
1
解决办法
3102
查看次数