zoukankan      html  css  js  c++  java
  • 响应式图片

    devicePixelRatio推荐阅读:https://developers.google.com/web/fundamentals/design-and-ux/responsive/images?hl=zh-cn

    Img 的 sizes 和 srcset

    <img src="100.png" sizes="50%" srcset="100.png 100w, 200.png 200w, 400.png 400w">

    sizes

      这个属性可以写一些css,例如“100px”,“50vm”,‘20rem","30vm",甚至是媒体查询 "(min- 600px) 25vw, (min- 500px) 50vw, 100vm"。

    srcset

      顾名思义,就是一堆图片来源的预设。例如:“100.png 100w”, 表示预设 100.png 这张图片,并且告诉浏览器,这张图片的宽度是100。

      我们来看看mdn的描述:

     这个“x”,其实就是我们的像素密度(window.devicePixelRatio),一般windows的机子都是1,苹果的机子是2(得益于它们的Retina屏)。

    选择策略

    以上面的例子来说:<img src="100.png" sizes="50%" srcset="100.png 100w, 200.png 200w, 400.png 400w" />

    1. img 的 sizes 是父元素的 50%(注意这个 sizes 和实际渲染的大小无关),假设父元素宽度是210px,我们计算到 sizes 是 105px。

    2. 计算每一张候选图片的 “x" 值,100.png --> 100/105,200.png --> 200/105,400.png --> 400/105 

    3. 假设我们是用不起 macbook 的穷人,我们的 devicePixelRatio 是 1,也就是说我们屏幕的 “x”值 就是 1

    4. 发现比较接近 1 的有 2 个:100/105 < 1 < 200/105

    5. 往上取最近的一个: 200.png --> 200/105 (因为如果选100的话,浏览器就认为把100px放到105px中显示,图片会失真,因此,浏览器会选一张不会失真的图片)

    ps: 是不是觉得很难理解,没关系。因为这个很难用,所以 H5 它又推出了 Picture 标签。

    Picture标签

    Picture是H5的新标签,除了IE,其他浏览器都基本兼容了,不用考虑IE的童鞋,推荐使用Picture。

    它抛弃了 sizes 属性,srcset 也不用 w 单位了,直接用媒体查询和像素密度来作为判断依据。

    这样就清晰明了多了。

    <picture>
      <source media="(min- 800px)" srcset="head.jpg, head-2x.jpg 2x">
      <source media="(min- 450px)" srcset="head-small.jpg, head-small-2x.jpg 2x">
      <img src="head-fb.jpg" srcset="head-fb-2x.jpg 2x">
    </picture>

    上面的例子中:

    如果浏览器宽度至少为 800px,则将根据设备像素密度使用 head.jpg 或 head-2x.jpg

    如果浏览器宽度在 450px 和 800px 之间,则将根据设备像素密度使用 head-small.jpg 或 head-small-2x.jpg

    对于屏幕宽度小于 450px,且不支持 picture 元素向后兼容的情况,浏览器将渲染 img 元素,因此要始终包含该元素。

  • 相关阅读:
    MySQL事务
    MySQL索引
    MySQL基础
    设计模式之单例模式
    设计模式之适配器模式
    zookeeper学习记录第二篇-----安装、配置、启动
    Scrapy 安装
    shiro
    python 爬虫简介以及使用方法
    linux VMware使用
  • 原文地址:https://www.cnblogs.com/amiezhang/p/11484596.html
Copyright © 2011-2022 走看看