防止图片拉伸的自适应处理

在web开发中,做为前端常常会遇处处理图片拉伸问题的状况。
例如banner、图文列表、头像等全部和用户或客户自主操做图片上传的地方,
而一旦牵扯图片,就会涉及到图片拉伸的问题,
固然,在图片上传时作手动裁切,让用户或客户清晰的感知到图片的有效内容才是最优的解决方案,
可是在其余各类外在因素下,没有作裁切的话,就须要在前端显示上作处理了,
知足在上传任意大小图片的状况下,最优显示效果的需求。css

这时咱们须要考虑到极端效果,以下图:
图片描述前端

而咱们想要获得的效果是这样的------
图片描述web

把图片放进框框,要几步?三步...咱们开始dom

第一步:先画个框框 (这里顺便安利一种自适应框框的方法)
//  假定须要一个在750px屏幕下宽400px,高280px的盒子
//  宽度 = 400 / 750 = 0.5333
//  高度 = 280 / 400 * 0.5333 = 0.3733

<style>
    .img-box{
        position: relative;
        width: 53.33%;
        height: 0;
        padding-bottom: 37.33%;
        overflow: hidden;
        background-color: #eee;
    }
</style>

<body>
    <div id="list">
        <div class="img-box">
            <img src="..."/>
        </div>
    </div>
</body>
第二步:设置图片须要使用到的css
<style>
    .width{
        position: absolute !important;
        width: 100% !important;
        min-height: 100% !important;
        top: 50% !important;
        transform: translateY(-50%) !important;
        -ms-transform: translateY(-50%) !important;
        -moz-transform: translateY(-50%) !important;
        -webkit-transform: translateY(-50%) !important;
        -o-transform: translateY(-50%) !important;
        display: block;
    }
    .height{
        position: absolute !important;
        height: 100% !important;
        min-width: 100% !important;
        left: 50% !important;
        transform: translateX(-50%) !important;
        -ms-transform: translateX(-50%) !important;
        -moz-transform: translateX(-50%) !important;
        -webkit-transform: translateX(-50%) !important;
        -o-transform: translateX(-50%) !important;
        display: block;
    }
</style>
第三步:js获取图片高度比较并给img添加类名
//须要注意的是,不能在css中直接给img设置宽度和高度
//不然在img.onload后获取的宽高是css设置的宽高
//同时建议使用dom对象来获取img标签
<script>
    var list = document.getElementById('list');
    getImgWH ( list );
    //执行宽高比对并设置img类名
    function getImgWH ( Obj ) {
        var img = Obj.getElementsByTagName('img');
        for( var i=0 ; i<img.length ; i++ ){
            img[i].onload = function(){
                var width  = this.width;
                var height = this.height;
                if ( width > height ) {
                    this.classList.add('height');
                } else if ( width < height ) {
                    this.classList.add('width');
                } else {
                    this.style.width  = '100%';
                    this.style.height = '100%';
                }
            }
        }
    }
</script>

图片防止拉伸处理比较简单,可是在实际项目中须要获得足够的重视,
一个web页面成也图片,败也图片,
拉伸了图片就等着设计师的磨叽吧,哈哈哈哈...this

相关文章
相关标签/搜索