• 浅谈图片展示、图片自适应解决方案


    在这里插入图片描述

    导读

    我们在日常开发中会遇到展示图片的问题,图片拉伸、图片残缺、有空白、大小不一致都是问题
    所以我们如何更好得展示图片,就引出我们这篇文章的主题

    CSS 解决方案

    background-size

    🐷background-size: contain;

    💌 background-size:contain;等比缩放,按照某一边来覆盖显示区域的,若区域大于图片的比
    例,会有白边,图片不会变形

    <div class="img_box">
    </div>
    <script>
    </script>
    <style>
        .img_box {
            width: 100px;
            height: 100px;
            background-image: url('./1.jpg');
            background-size: contain;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    🐥就是说,其实这种也是不是很好用的,就相当于把某一边宽度为100%,但是另一边就按照比例,就很容易造成有白边(我这里加了个底色)
    在这里插入图片描述

    🐷background-size:100%;

    💌 background-size:100%;相当于background-size:100% auto的写法。
    💌 background-size:100% 100%;这种方式设置完背景图片的大小后,会完全铺满整个盒子,
    💌 background-size:100%;这种方式设置的背景图片的大小,x轴会和盒子一样的宽,但是y轴由于默
    认为 auto

    🐷background-size:cover;

    这中是比较好的方案
    首先会充满盒子,不变形,但是会把多余的进行裁剪

    <div class="img_box">
    </div>
    <script>
    </script>
    <style>
        .img_box {
            width: 100px;
            height: 100px;
            background-color: red;
            background-image: url('./1.jpg');
            background-repeat: no-repeat;
            background-size: cover;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    object-fit

    这个属性,我们主要讨论下面这种情况

    <div class="img_box">
        <img src="./1.jpg" alt="">
    </div>
    <script>
    </script>
    <style>
        .img_box {
            width: 200px;
            height: 100px;
            background-color: red;
        }
        img{
            width: 100%;
    		height: 100%;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    可以看到会产生拉伸

    🐷object-fit: contain;

    🐥可以看出和上面的background-size:contain;特点一样,会按照某一边,不会拉伸,但是比例不匹配会产生白边(我这里依然是红边)

    <div class="img_box">
        <img src="./1.jpg" alt="">
    </div>
    <script>
    </script>
    <style>
        .img_box {
            width: 200px;
            height: 100px;
            background-color: red;
        }
        img{
            width: 100%;
    		height: 100%;
            object-fit: contain;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    🐷object-fit: cover;

    🐥可以看出,不会拉伸,但是会对图片进行剪切

    <div class="img_box">
        <img src="./1.jpg" alt="">
    </div>
    <script>
    </script>
    <style>
        .img_box {
            width: 200px;
            height: 100px;
            background-color: red;
        }
        img{
            width: 100%;
    		height: 100%;
            object-fit: cover;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    进而探讨图片跟随屏幕大小自适应的问题

    我们设想一个问题,就是页面一个图片,咱们想把图片自适应屏幕宽度,进行完整更好的展示

    <div class="img_box">
        <img src="./1.jpg" alt="">
    </div>
    <script>
    </script>
    <style>
        .img_box {
            width: 1000px;
            height: 800px;
            background-color: red;
        }
        img{
            width: 100%;
    		height: 100%;
            object-fit: cover;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    🐥拉伸边框会出现这样,明显不是咱们想要的
    在这里插入图片描述

    只设宽度方案,优化方案

    我们如下代码,只设置宽度,虽然看上去不错,但是依然是不完善的

    <div class="img_box">
        <img src="./1.jpg" alt="">
    </div>
    <script>
    </script>
    <style>
        .img_box {
            width: 100%;
            background-color: red;
        }
        img{
            width: 100%;
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    🐥其实这里我们可以进而去控制img元素的父盒子,去控制父盒子的宽度自适应,可以设置display:inline-block;简单的控制父元素宽度(宽度也是随内容变化的,而且图片默认样式恰巧也表现为inline-block的效果),可以看下图的变化,就很nice

    <div class="img_box">
        <img src="./1.png" alt="">
    </div>
    <div class="img_box">
        <img src="./2.png" alt="">
    </div>
    <script>
    </script>
    <style>
        .img_box {
            background-color: red;
            display: inline-block;
        }
        img {
            width: 100%;
            vertical-align: middle;
    
        }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    JVM学习第二天
    2022国赛C:古代玻璃制品的成分分析与鉴别
    TCP 连接管理机制(一)——TCP三次握手详解 + 为什么要有三次握手
    [车联网安全自学篇] 五十四. Android安全之剪贴板+键盘缓存+UI界面+自动截屏敏感信息挖掘
    如何轻松打造数字人克隆系统+直播系统?OEM教你快速部署数字人SaaS系统源码
    20220810
    vue3中使用Vuedraggable实现拖拽排序
    用go基于有向图实现一个有限状态机器(FSM)
    跨域问题及前端的解决方法
    Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架
  • 原文地址:https://blog.csdn.net/qq_45859670/article/details/127658220