响应式网站-弹性图片

实现响应式图片有一下几种方法:

1、js或者服务端

2、secset

3、srcset配合sizes

4、picture

5、svg


1、首先来看一下js的演示代码

$(document).ready(function(){
    function makeImageResponsive(){
        var width = $(window).width();
        var img = $('.content img');
        if(width <= 480){
            img.attr('src','img/480.png');
        }else if(width <= 800){
            img.attr('src','img/800.png');
        }else{
            img.attr('src','img/1600.png');
        }
    }

    $(window).on('resize load',makeImageResponsive);
});

在window加载的时候和改变窗口大小的时候调用makeImageResponsive方法判断当前浏览器的宽度选择合适的图片。


2.srcset

<img src="img/ad003-m.png" srcset="img/480.png 480w, img/800png 800w, img/1600png 1600w">

这样设置img的属性后就会根据屏幕的宽度来决定加载那张图片


3.srcset配合sizes

<img src="img/ad003-m.png" srcset="img/480.png 480w, img/800png 800w, img/1600png 1600w" sizes="50vw">

vw是代表视口宽度的一个单位(viewport width),100vm代表图片的尺寸就是100%视口的宽度

srcset属性也有个坑,默认设置100vw的话,当图片居中占50%的情况下,依然根据视口宽度来选择图片,所以这时需要设置sizes="50vw"让图片宽度真正到达480的时候在加载更大的图片。 

随着布局更加复杂,还可以通过计算来控制sizes

<img src="img/ad003-m.png" srcset="img/480.png 480w, img/800png 800w, img/1600png 1600w" sizes="(min-width:800px) calc(100vw - 30em), 100vw">


4.picture标签

<picture>
                    <source srcset="img/ad003-l.png" media='(min-width : 50em' />
                    <source srcset='img/ad003-m.png' media='(min-width : 30em)' />
                    <img alt="新手秘籍" src="img/ad003.png">
                </picture>  

浏览器会遍历picture的source设置,直到找到一个属性满足当前环境media就讲这个source的srcset匹配到img里面,可以设置多个source和多个srcset。还可以根据图片格式来选择图片:

<source type="image/svg+xml" srcset="logo.svg 480w, logo-m.svg 800w" />

<source type="image/webp" srcset="logo.webp 480w, logo-m.webp 800w" />

浏览器不支持picture的话可以使用picturefill.js来兼容


5.svg

在线创建svg的图片的网站有:editor.method.ac   和 https://icomoon.io

相比srcset和picture来说,svg的兼容性比较广泛,而且图片很小。

svg图片可以在线压缩:iconizr.com

针对png图片进行压缩:https://tinypng.com

有时候简单对图片进行压缩带来页面载入速度的提升有惊喜的效果。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值