不二如是 发表于 2019-6-20 14:30:30

四大不传CSS心法解决#图片变形问题

本帖最后由 不二如是 于 2020-3-17 19:08 编辑

估计很多鱼油都会困惑:

明明图片在自己电脑布局的时候,效果很完美,但是一旦放到别人的浏览器上就很难看?{:10_266:}
这是为啥呢?

常见的原因,无非就是写死了图片宽高,导致渲染图片比例不对,将布局撑坏。

如何从前端保证图片不变形,也是一项很重要的能力,不难,但是要会哦。

今天介绍 4 种常用的通过 CSS 完美解决图片变形的方法。

准备两张图(555 * 555;555 * 370):

《零基础入门学习Scratch》了解下:传送门



图片素材包(鱼油可自行准备哦):**** Hidden Message *****


方法一

让图片的宽度或者高度等于容器的宽度或高度,然后让图片居中

我们先创建一段基础网页,加载两张图片:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鱼C-奇技淫巧</title>
</head>
<body>
<div>
    <img src="images/1.png">
</div>
<br>
<div>
    <img src="images/1.jpg">
</div>
</body>
</html>


按照上面说的让图片或宽高等于容器的宽高,然后图片居中。

通过 css 来实现,先统一限定 div 宽高为 333px,顺便加一个 1px 边框:

div{
            position: relative;
            width: 333px;
            height: 333px;
            border: 1px solid green;
      }


由于图片宽高默认都是 555,正常溢出,接着设置一下 img 的样式:

img{
            width: 100%;
            position: absolute;
      }


第一张图效果还好,因为都是正方形的,所以自动适应后效果还不错。

第二张图由于是矩形,宽度 100% 后,长度会自适应,所以很诡异。

我们可以通过 transform()方法平移元素。

top: 50%;
            left: 50%;
要先通过 top,left 像下右移动 50%:


然后通过再平移:

img{
            width: 100%;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
      }


如果图片的宽度限制了,高度大于等于容器的高度,就会填满整个容器。

但是如果图片高度小于容器高度,就会出现空白,固定高度同理。

此方法是最简单也最实用,配合后台裁切,更加完美。


方法二

让图片始终显示在容器内,并且居中显示

方法二可以说是方法一的升级操作。

在 img 样式中去掉 width:100%,并添加:

        max-width: 100%;
        max-height: 100%;


可以看到,无论是宽度超过容器,还是高度超过容器,还是宽高都不超过容器。

都能全部居中显示在容器内,不会裁切。

如果换成一张纵向矩形图效果更明显。


方法三

将图片变成背景,通过改变背景尺寸等可以任意改变图片在容器中显示的效果

这个操作可以说是最简单的,我们只拿 1.jpg 举例子(注释掉 1.png)。

利用 background-image 属性引入图片:

<div class="d2" style="background-image: url(images/1.jpg)"></div>
重新修改 div 样式:

div{
            width: 333px;
            height: 333px;
            border: 1px solid green;
            background-repeat: no-repeat;
            background-position: center;
            background-size: cover;
      }


其他样式不变,分别更改 background-size 属性的值,第一种 auto auto :

background-size: auto auto;


第二种 100% auto :

background-size: 100% auto;


第三种 auto 100%:

background-size: auto 100%;


第四种 100% 100%:

background-size: 100% 100%;


我们可以看到方法一和方法二都能轻松实现。

最开始的 cover 效果是最理想的,即居中显示,占满整个容器并且不变形。

这种方法如果不考虑 seo 的话,用起来还是很顺手的。

但是,如果是资讯站、图片展等等,千万不要用这种方法,这样图片将很难被搜索引擎收录哈!


方法四

即兼顾方法三,又能兼顾 SEO

这里就要隆重推出 object-fit 和 object-position。

可以这么理解,object-position 相当于 background-position,它的默认值是50% 50%,也就是居中,所以一般不写。

加了 object-fit,默认就居中了。

而 object-fit,相当于 background-size,即图片填充方式(这里不是图片大小)。

还是一张图片演示,修改下 html:

<div class="d2" >
    <img src="images/1.jpg" >
</div>
然后修改 div 样式:

div{
            width: 333px;
            height: 333px;
            border: 1px solid green;
      }
最简单的宽高和一个边框,修改 img 的样式:

img{
            width: 100%;
            height: 100%;
            object-fit: cover;
      }


接下来分别修改 object-fit 属性的值,第一种 fill:

object-fit: fill;


第二种 contain:

object-fit: contain;


第三种 scale-down:

object-fit: scale-down;


第四种 none:

object-fit: none;


几乎和方法三的实现结果一样。

注意:图片一定要设置宽高,否则设置 object-fit 无效。

将图片设置为何容器一样的宽高就可以了。

容器也不需要设置溢出隐藏,object-fit 会自动隐藏超出图片的宽高部分。

如果不考虑兼容 IE,这种方法两全其美,何乐而不为呢?!



http://xxx.fishc.com/forum/201803/20/101934b3igkgm9hgbgz0ck.gif

如果喜欢,别忘了评分{:10_281:} :

http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif

这位鱼油,如果喜欢本系列HTML帖子,请订阅 专辑☞(传送门)(不喜欢更要订阅{:10_278:} )

newu 发表于 2019-6-20 14:39:30

沙发围观{:10_279:}

Thornt 发表于 2020-4-25 13:52:41

前来围观

KevinHu 发表于 2020-5-9 14:20:00

看看{:10_254:}
页: [1]
查看完整版本: 四大不传CSS心法解决#图片变形问题