像uniapp image标签一样对图片进行缩放和裁剪

像uniapp image标签一样对图片进行缩放和裁剪

  • 0 前言提示
  • 1 实现
    • 1.1 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素
    • 1.2 保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。
    • 1.3 保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。
    • 1.4 宽度不变,高度自动变化,保持原图宽高比不变
    • 1.5 高度不变,宽度自动变化,保持原图宽高比不变
    • 1.6 不缩放图片,只显示图片的不同区域
  • 2 完整代码

0 前言提示

在使用uniapp开发时觉着image标签的mode属性非常的使用,符合多种开发场景,并且最近有在整理object-fitobject-position的笔记,正好利用css属性按照image标签对于图片的缩放和裁剪处理,总结一套自己的经验。

在这里插入图片描述

模式说明
缩放scaleToFill不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素
缩放aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。
缩放aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。
缩放widthFix宽度不变,高度自动变化,保持原图宽高比不变
缩放heightFix高度不变,宽度自动变化,保持原图宽高比不变
裁剪top不缩放图片,只显示图片的顶部区域
裁剪bottom不缩放图片,只显示图片的底部区域
裁剪center不缩放图片,只显示图片的中间区域
裁剪left不缩放图片,只显示图片的左边区域
裁剪right不缩放图片,只显示图片的右边区域
裁剪top left不缩放图片,只显示图片的左上边区域
裁剪top right不缩放图片,只显示图片的右上边区域
裁剪bottom left不缩放图片,只显示图片的左下边区域
裁剪bottom right不缩放图片,只显示图片的右下边区域

1 实现

整体效果图
在这里插入图片描述

以下css全是设置给img标签的

1.1 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素

width: 200px;
height: 200px;
/* 核心 */
object-fit: fill;

1.2 保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。

width: 200px;
height: 200px;
/* 核心 */
object-fit: contain;

1.3 保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。

width: 200px;
height: 200px;
/* 核心 */
object-fit: cover;

1.4 宽度不变,高度自动变化,保持原图宽高比不变

width: 200px;
height: auto;

1.5 高度不变,宽度自动变化,保持原图宽高比不变

width: auto;
height: 200px;

1.6 不缩放图片,只显示图片的不同区域

width: 200px;
height: 200px;
object-fit: none;
/* 核心 */
object-position: X轴位置 Y轴位置;

比如只显示图片的顶部区域object-position: center bottom;
比如只显示图片的左上边区域object-position: left top;
比如只显示图片的右下边区域object-position: right bottom;

2 完整代码

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
        .box {
            width: 900px;
            height: auto;
            display: grid;
            grid: auto-flow minmax(300px, max-content) / repeat(3, 300px);
            column-gap: 5px;
            row-gap: 20px;
            margin: 0 auto;
        }

        .box>div {
            display: grid;
            place-items: center;
            place-content: center;
            background: #000;
        }

        .box>div>span {
            color: #fff;
            min-height: 30px;
            text-align: center;
            margin-top: 10px;
        }

        .box>div>img {
            background: #aaa;
        }

        .basic {
            width: 200px;
            height: 200px;
        }

        .fixed-width {
            width: 200px;
            height: auto;
        }

        .fixed-height {
            height: 200px;
            width: auto;
        }

    </style>
</head>

<body>
    <div class="box">
        <div>
            <span>不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素</span>
            <img class="basic" src="./image/big.jpg" alt="" srcset="" style="object-fit: fill" />
        </div>
        <div>
            <span>保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来</span>
            <img class="basic" src="./image/big.jpg" alt="" srcset="" style="object-fit: contain" />
        </div>
        <div>
            <span>保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取</span>
            <img class="basic" src="./image/big.jpg" alt="" srcset="" style="object-fit: cover" />
        </div>
        <div>
            <span>宽度不变,高度自动变化,保持原图宽高比不变</span>
            <img class="fixed-width" src="./image/tall.jpg" alt="" srcset="" />
        </div>
        <div style="grid-column: 2 / span 2;">
            <span>高度不变,宽度自动变化,保持原图宽高比不变</span>
            <img class="fixed-height" src="./image/big.jpg" alt="" srcset="" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的顶部区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: center top;object-fit: none;" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的底部区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: center bottom;object-fit: none;" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的中间区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: center center;object-fit: none;" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的左边区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: left center ;object-fit: none;" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的右边区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: right center;object-fit: none;" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的左上边区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: left top;object-fit: none;" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的右上边区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: right top;object-fit: none;" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的左下边区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: left bottom;object-fit: none;" />
        </div>
        <div>
            <span>不缩放图片,只显示图片的右下边区域</span>
            <img class="basic" src="./image/tall.jpg" alt="" srcset=""
                style="object-position: right bottom;object-fit: none;" />
        </div>
    </div>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/473527.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git如何在某个commitId的状态提交到一个分支

有些时候&#xff0c;我们在使用子仓库&#xff0c;或者其他情况&#xff0c;会有一个状态是当前的git仓库是在一个commitId上&#xff0c;而没有在一个分支上&#xff1a; 这时如果想要把基于这个commitId创建一个分支&#xff0c;可以使用下面这个命令&#xff1a; git push…

ubuntu20.04搭建rtmp视频服务

1.安装软件 sudo apt-get install ffmpeg sudo apt-get install nginx sudo apt-get install libnginx-mod-rtmp 2.nginx配置 修改/etc/nginx/nginx.conf文件&#xff0c;在末尾添加&#xff1a; rtmp {server {listen 1935;application live {live on;}} } 3.视频测试 本…

OpenAI的GPT已达极限,更看好AI Agent

日前&#xff0c;比尔盖茨发表文章表示&#xff1a;AI Agent不仅会改变人与电脑的互动方式&#xff0c;或许还将颠覆软件行业&#xff0c;引领自输入命令到点击图标以来的最大计算机革命。 在数字化和技术创新的浪潮中&#xff0c;AI Agent作为一种前沿技术&#xff0c;正开启…

GB28181 —— 5、C++编写GB28181设备端,完成将USB摄像头视频实时转发至GB28181服务并可播放(附源码)

被测试的USB摄像头 效果 源码说明 主要功能模拟设备端&#xff0c;完成注册、注销、心跳等&#xff0c;同时当服务端下发指令播放视频时 设备端实时读取USB摄像头视频并通过OpenCV处理后实时转ps格式后封包rtp进行推送给服务端播放。 源码 /****remark: pes头的封装,里面的具…

【教程】rax3000m emmc刷机 支持硬件QOS MT7981到底值不值

为什么选择rax3000m&#xff1f; 1、恩山论坛237大佬放出了硬件QOS功能&#xff0c;而很多几百元路由器一旦开启QOS就会变软件NAT走CPU转发&#xff0c;效果还不如x86软路由。这样就非常适合刷机&#xff0c;在家里跑pt、迅雷等任务时候不会卡顿&#xff0c;实测&#xff0c;丢…

【Leetcode】1969. 数组元素的最小非零乘积

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个正整数 p 。你有一个下标从 1 1 1 开始的数组 n u m s nums nums &#xff0c;这个数组包含范围 [ 1 , 2 p − 1 ] [1, 2^p - 1] [1,2p−1] 内所有整数的二进制形式&…

【python-sc2】详细解析!!!手把手教你学会实现星际争霸2游戏AI智能体的基础知识!!!

参考资料 星际争霸2 AI机器人网站 AI天梯 sc2ai_wiki文档 该网站包含基于各种语言编写的sc2库&#xff0c;包括C、Python、C#、JAVA等。其中&#xff0c;Python有Python-sc2、sharpy-sc2和PySC2三种框架。此外&#xff0c;针对每个框架提供了教程。 python-sc2官方文档 各种族单…

Spring Cloud Gateway教程

1 微服务网关概述 Spring Cloud Gateway是在 Spring 生态系统之上构建的API网关服务&#xff0c;旨在为微服务架构应用提供一种简单有效的统一的API路由管理方式。 Spring Cloud Gateway主要功能&#xff1a; 反向代理认证鉴权流量控制熔断日志监控 2 Spring Cloud Gateway三…

目标检测——YOLOX算法解读

论文&#xff1a;YOLOX: Exceeding YOLO Series in 2021(2021.7.18) 作者&#xff1a;Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun 链接&#xff1a;https://arxiv.org/abs/2107.08430 代码&#xff1a;https://github.com/Megvii-BaseDetection/YOLOX YOLO系列算法…

爬虫案例-网站分词索引与站内搜索

文章目录 1.案例简介2.设计思路3.设计结构4.关键技术5.数据结构6.数据集合7.设计过程7.1 信息采集模块7.2 索引模块7.3 网页排名和搜索 8.示例效果 1.案例简介 本例使用Python建立一个指定网站专用的Web搜索引擎&#xff0c;它能爬取所有指定的网页信息&#xff0c;然后准确的…

智慧安全:守护智慧城市的安全屏障

随着信息技术的迅猛发展&#xff0c;智慧城市已成为现代城市发展的重要方向。智慧城市通过集成应用先进的信息通信技术&#xff0c;实现城市管理、服务、运行的智能化&#xff0c;为城市的可持续发展注入了新的活力。然而&#xff0c;在智慧城市的建设过程中&#xff0c;安全问…

综合案例-淘宝轮播图

代码&#x1f447; <!DOCTYPE html><html lang"en" xmlns"http://www.w3.org/1999/xhtml"> <head><meta charset"utf-8" /><title>淘宝轮播图</title><style>*{margin:0px;padding:0px;}.tb-promo {…

流畅的 Python 第二版(GPT 重译)(四)

第二部分&#xff1a;函数作为对象 第七章&#xff1a;函数作为一等对象 我从未认为 Python 受到函数式语言的重大影响&#xff0c;无论人们说什么或想什么。我更熟悉命令式语言&#xff0c;如 C 和 Algol 68&#xff0c;尽管我将函数作为一等对象&#xff0c;但我并不认为 Py…

Java 设计模式系列:行为型-中介者模式

简介 中介者模式是一种行为型设计模式&#xff0c;它定义了一个中介对象&#xff0c;用于简化对象之间的交互。中介者模式通过引入一个中介对象来解耦多个对象之间的交互&#xff0c;使得这些对象可以独立地改变和复用。 中介者模式的适用场景包括多个对象之间存在复杂的引用…

asp.net在线租车平台

说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 功能模块&#xff1a; asp.net在线租车平台 用户功能有首页 行业新闻用户注册车辆查询租车介绍访问后台 后台管理员可以进行用户管理 管…

xinput1_3.dll丢失如何修复,xinput1_3.dll的安装修复教程分享

在Windows操作系统环境下&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到xinput13.dll”。由于xinput1_3.dll是微软DirectX SDK的一部分&#xff0c;主要用于支持游戏手柄和其他外部设备的输入功能&#xff0c;缺失这一动态链接库文件可能导致某些依赖…

【WEB3安全基建项目Secwarex】空投指南

GoPlusSecurity是WEB3安全基建项目&#xff0c;3月8日完成400万美元的私募融资&#xff0c;目前总融资已经高达1500万美元&#xff0c;其中包括Binance Labs、Huobi Incubator、Kucoin Ventures、Avalanche等知名机构参投。 1、打开网址&#xff1a;secwarex.io&#xff0c;点…

node.js常用的命令

Node.js 是一个用于执行 JavaScript 代码的运行时环境。以下命令是 Node.js 开发中常用的命令&#xff0c;可以帮助你进行包管理、项目配置和代码执行等操作。 node -v&#xff1a;检查 Node.js 的版本。npm -v&#xff1a;检查 npm&#xff08;Node.js 包管理器&#xff09;的…

通配符ssl证书有哪几种

通配符SSL证书是数字证书中比较特别的一种。它可以同时保护主域名以及主域名下所有的子域名&#xff0c;对所保护的网站传输数据进行加密。在证书有效期内&#xff0c;通配符SSL证书还可以免费增加子域名站点。随着互联网的发展&#xff0c;越来越多的个人和企事业单位的开发者…

01.Queue-Basic

1. 队列简介 队列&#xff08;Queue&#xff09;&#xff1a;一种线性表数据结构&#xff0c;是一种只允许在表的一端进行插入操作&#xff0c;而在表的另一端进行删除操作的线性表。 我们把队列中允许插入的一端称为 「队尾&#xff08;rear&#xff09;」&#xff1b;把允许删…