zoukankan      html  css  js  c++  java
  • 响应式图片新属性srcset、sizes及、、media的有效性测试

    1.写在前面

    测试时间:2018/3/28

    测试工具及方法: Firefox developer edition-mozila浏览器的responsive design mode



    2.涉及的知识点

    CSS媒体查询-MDN

    响应式图片— srcset 和 sizes 属性

    响应式图片

    英文资料1

    英文资料2

    3.测试项目及结果总结

    (1)测试用图片(100px、300px、600px、800px)



    (2)srcset+sizes响应式测试

    A.第一次

    <img src="selina.jpg" alt="alt"
         srcset="100-s1.jpg 100w,300-s1.jpg 300w,600-s2.jpg 600w,800-s2.jpg 800w"
         sizes="(max-300px) 150px,(max-500px) 350px,
    	    (max-750px) 650px,(max-1000px) 850px,10vw" /> 

    结果:

    (选择width:290px、400px、700px、900px、1200px、1800px;

    对应的尺寸范围:0-300px,300-500px,500-750px,750-1000px,1000px以上;

    对应img的width:150px、350px、650px、850px、120px)


    结果描述及总结:

        以上结果可以看出,img的width为150px时,加载的为等比缩小的300px的图片;img的width为350px时,加载的为等比缩小的600px的图片;img的width为650px时,加载的等比缩小的800px的图片;img的width为850px时,加载的为等比放大的800px的图片。

        结论:浏览器按照sizes的规则得到尺寸后,选择性加载图片时是按照“图片尺寸不小于实际尺寸”的原则进行的。也就是说,选择图片是在资源列表里的“大于等于实际尺寸的图片集合中,选择最接近的那一张图片”。当然,如果没有完全相同的尺寸的图片存在时,是有等比例缩放的。

    B.第二次

    <img src="selina.jpg" alt="alt"
         srcset="600-s2.jpg 600w,800-s2.jpg 800w"
         sizes="(max-800px) and (min-500px) 800px,10vw"/>

    结果:

    选择width:400px、600px、1000px

    对应width范围:0-500px、500-800px、800px以上

    对应img的width:40px、60px、100px


    结论:

    用and连接min-width和max-width在当前版本(60.07b)的火狐开发者浏览器是不支持的,会被无效化。

    其他情况,如or连接min-和max- 或者 and/or 连接相同的max-/min-都是不支持的,语义上也没有必要。

    那么,我们怎么处理复杂的media-condition情况呢?

    小测试1:逗号连接的<media-conditon>,<media-condition> <source-size-value>,<source-size-value>工作原理到底是怎么样的?(个人理解)

    <img src="selina.jpg" alt="alt"
         srcset="100-s1.jpg 100w,300-s1.jpg 300w,600-s2.jpg 600w,800-s2.jpg 800w"
         sizes="(max-500px) 300px,(max-1000px) 500px,10vw"/> 

    分析:

    (max-500px) 300px(可视区宽度小于500px时,图片宽度为300px)

    (min-1000px) 500px(可视区域宽度小于1000px时,图片宽度为500px)

    结果:(可视宽度取400px、600px)


    <img src="selina.jpg" alt="alt"
         srcset="100-s1.jpg 100w,300-s1.jpg 300w,600-s2.jpg 600w,800-s2.jpg 800w"
         sizes="(max-1000px) 500px,(max-500px) 300px,10vw"/>

    分析:交换两个条件的顺序,取可视区宽度为400px、600px


    结果:0-1000px都图片宽度都是500px,第二个条件失效。

    测试总结

    sizes的赋值语法,条件出现的先后顺序很关键,前面的条件不会被后面的条件所覆盖。以上面的两个测试为例:第一次测试,max-500px出现在max-1000px的前面,所以两个条件重复的部分没有被1000px的条件覆盖;第二次测试,max-1000px出现在max-500px的前面,500px的条件无法覆盖与前面1000px条件重复的部分,也就是它自己的全部范围,所以失效了。

    由上面的总结,我们得到了复杂条件的sizes赋值的解决办法:统一用max-或者min-构成赋值语句

    • 统一用max-构成(条件范围定义必须严格按照从小到大的顺序出现)
    • 统一用min-构成(条件范围定义必须严格按照从大到小的顺序出现)
      • 其余复杂的范围构成,都可以分解成多个单一的max-/min-条件

    C.第三次

    <img src="selina.jpg" alt="alt"
         srcset="100-s1.jpg 100w,300-s1.jpg 300w,600-s2.jpg 600w,800-s2.jpg 800w"
         sizes="(max-500px) 250px" />  

    结果:

    选择的width:300px、501px、601px、1000px

    对应范围:0-500px、500px以上

    img的width:250px、未知


    结果描述及总结:

    width在0-500px时,img的width为250px,浏览器正确选择了300px尺寸的图片;而当500px以后,属于未定义的范围,(500px,600px]范围,浏览器选择600px的图片;(600,800px]范围,l浏览器选择800px图片;800px以上,仍旧是800px图片。

    总结:可见,未定义的范围,浏览器对图片的尺寸的设置默认是100vw。即:可见区域的全部尺寸。


    (3)<picture>+<source>+meida+srcset+sizes测试(艺术指导测试)

    <picture>
       <source media="max-500px"
    	   srcset="100-s1.jpg 100w,300-s1.jpg 300w"
    	   sizes="(max-300px) 80px,240px" />
    	 
       <img src="selina.jpg" alt="alt"
    	srcset="600-s2.jpg 600w,800-s2.jpg 800w"
    	sizes="(max-1000px) 480px,640px"/>
    </picture>

    结果:

    选择的width:290px、400px、800px、1200px

    对应width范围:0-300px、300-500px、500-1000px、1000px以上

    img的width:80px、240px、480px、640px


    结果描述及总结:

    全是s2的图片。<source>标签失效,但<img>以及其中的srcset、sizes仍旧有效。


    (4)<pictue>+type+srcset+sizes可替换格式测试

    测试图片:100-s1.jpg、300-s1.jpg以及用这两个制作的同尺寸的ico图片100-s1.ico、300-s1.ico

    (在线制作地点:在线ico制作站点)

    <picture>
       <source type="image/x-icon"
    	   srcset="100-s1.ico 100w,300-s1.ico 300w"
    	   sizes="(max-500px) 80px,240px"/>
    	 
       <img src="selina.jpg" alt="alt"
    	   srcset="100-s1.jpg 600w,300-s1.jpg 800w"
    	   sizes="(max-500px) 80px,240px"/>
    </picture>

    结果:选择尺寸400px、600px



    结果描述及总结:

    可见,<picture>+<source>+type进行的可替换格式测试成功的。


    全篇总结:

    • 浏览器加载图片原则:大于等于实际尺寸的图片集合中,选择最接近的那一张图片
    • 复合条件定义分解成单一的max-/min-并严格按照顺序规则定义书写
    • sizes真正未定义的范围,浏览器会默认图片尺寸为100vw
    • 用<picture>+<source>可以提供图片可替换格式,但目前结合media对图片进行“艺术指导”

    转载请注明:https://blog.csdn.net/u014711690/article/details/79750505

  • 相关阅读:
    request
    href="#"
    可展开收起的客服导航。
    JS添加父节点的方法。
    精简漂亮的导航浮动菜单显示特效演示
    竖排导航
    仿新浪微博
    鼠标滑过改变文字
    滚动函数
    一些常用的兼容函数。
  • 原文地址:https://www.cnblogs.com/peterzhangsnail/p/12521667.html
Copyright © 2011-2022 走看看