美文网首页
img固定宽度和高度,不规则图片变形问题的解决方法

img固定宽度和高度,不规则图片变形问题的解决方法

作者: holidayPenguin | 来源:发表于2022-06-28 18:07 被阅读0次

日常项目中,后端传图不规则,比例大小不一。前端又要去做适应,是一个让人非常头大的问题。

总结了一个不规则图片不变形的解决方案:

注:先写一个长 300px200px 带边框的 div ,图片接近方形,实现图片正常显示不变形。

<div class="box box1">
    ...
</div>

1、背景图法

通过背景图的 background-position 属性,可以使图片居中显示。国外一些网站有看到类似的案例,简单好操作。

.box1{
    background: url("https://hbimg.huabanimg.com/42d38784a9e5ad1cbce090966a7a87c274f5d27ba616-VMBaO0_fw658") no-repeat center center;
    background-size: auto 100%;
}

这样可以显示完整的图片,不变形:

image.png

若要图片填满容器,可以将 background-size 属性改为 100% auto

background-size: 100% auto;

如下图:

image.png

同样 background-sizecontain (完整显示)和 cover (填充)属性也能起到相同的效果。

2、object-fit

object-fit CSS 属性指定可替换元素的内容应该如何适应到其使用的高度和宽度确定的框,不支持IE。

可用属性:

fill 不保持纵横比缩放图片,使图片完全适应

contain 保持纵横比缩放图片,使图片的长边能完全显示出来

cover 保持纵横比缩放图片,只保证图片的短边能完全显示出来

none 保持图片宽高不变

scale-down 当图片实际宽高小于所设置的图片宽高时,显示效果与none一致;否则,显示效果与contain一致

inherit 继承

initial 默认值

unset 继承父元素,若父元素没有属性则显示默认值

image.png

CSS:

ul>li>img{
    width: 150px;
    height: 100px;
}
ul>li:nth-child(1)>img{
    object-fit: fill;
}
ul>li:nth-child(2)>img{
    object-fit: contain;
}
ul>li:nth-child(3)>img{
    object-fit: cover;
}
ul>li:nth-child(4)>img{
    object-fit: none;
}
ul>li:nth-child(5)>img{
    object-fit: scale-down;
}

3、flex

该方法也可以实现以上两种方法的效果。

以容器宽 200px300px ,图片为方形为例:

设置 width: 100% 为图片完整显示,多出部分留白。

设置 height: 100%; 为图片全部填充,这时候需要给图片的容器添加 overflow: hidden; 属性,防止图片超出。

图片等比例缩放,多余部分,还有就是要考虑IE兼容问题,可以在手机端项目中使用。

ul{
    display: flex;
}
ul li{
    width: 200px;
    height: 300px;
    display: flex;
    justify-content: center;
    align-items: center;
    border: 1px solid #23caff;
    margin: 20px;
        overflow: hidden;
}
img{
    width: 100%;
}

4、js 方法

js 方法应该比较通用,可以兼容多版本浏览器。

var img = document.getimgmentById("img");
var div = document.getimgmentById("div");
img.onload = function () {
  if (img.naturalHeight < div.offsetHeight) {
    img.style.width = "auto";
    img.style.height = "100%";
  }
}

5、jQuery方法

也可以兼容多版本浏览器,需要 jQuery 加持。

var $tabLi = $("#tab").find("ul li"),
  length = $tabLi.length,
  liWidth = $tabLi.width(),
  propArr = [];
$tabLi.each(function (i) {
  var $img = $(this).find("img");
  var width = $img.width();
  width?imgLoad.call($img[0]):($img[0].onload = imgLoad);
  function imgLoad() {
    var width = $(this).width();
    var height = $(this).height();
    propArr[i] = width/height;
    this[width>height?"width":"height"] = liWidth;
    for (var j = 0; j < length; j++)if ( !propArr[j] )return;
  }
});

6、一个原始的方法

图片等比例缩放,多余部分空白填补:

ul li {
    width: 200px;
    height: 200px;
    text-align: center;
    display: table-cell;
    vertical-align: middle;
    border: 1px solid red;
}

ul li img {
    max-height: 100%;
    max-width: 100%;
}

参考

img固定宽度和高度,不规则图片变形问题的解决方法-HTML笔记-w3h5-Web前端开发资源网

相关文章

  • img固定宽度和高度,不规则图片变形问题的解决方法

    日常项目中,后端传图不规则,比例大小不一。前端又要去做适应,是一个让人非常头大的问题。 总结了一个不规则图片不变形...

  • object-fit

    比如有一个元素 img,高度固定,宽度不固定,调整浏览器窗口大小的时候要img元素不变形,宽高比不变,直接用 ob...

  • 原生Js实现瀑布流效果

    盗用的效果图 效果分析 瀑布流中图片的宽度都是固定的,但是高度需要设置为auto以使图片不变形,高度不固定。首先想...

  • iOS中 图片的等比例显示

    解决方法:高度固定,等比例显示宽度 示例代码如下:

  • 图片容器大小不确定,图片宽度自适应

    图片设置高度等于宽度在图片容器大小不确定的情况下,想设置图片的宽度自适应,高度等于宽度,也就是正方形显示。解决方法...

  • 瀑布流布局

    在css中给img设定好宽度,图片设置绝对定位先根据容器宽度和图片宽度计算列数,用一个数组储存每列的当前高度,在图...

  • 设置imageView的高度随图片的高度变化

    先说一下需求: 想要实现imageView的高度随着未知图片的高度变化。 imageView的宽度固定为屏幕的宽度...

  • div嵌套img

    问题描述: div里面嵌套Img,div只设了宽度,没有设高度,img设置width:100%;结果div下面有个...

  • wepy小程序入门开发问题总结

    1.图片宽度100%高度自适应问题 我需要图片宽度撑满,高度自适应,然而图片宽度撑满了屏幕,但是高度为0 小程序i...

  • Android ImageView 高度固定,宽度自适应;宽度固

    今天在公司项目开发中遇到了这种需求,就是图片的高度(宽度)可能是固定的,但相对的,宽度(高度)可能不需要固定,相对...

网友评论

      本文标题:img固定宽度和高度,不规则图片变形问题的解决方法

      本文链接:https://www.haomeiwen.com/subject/wjczvrtx.html