css使用aspect-ratio制作4:3和9:16和1:1等等比例布局
文章目录
- 1. 前言
- 2. 用法
- 2.1 基本语法
- 2.2. 与`max-width`、`max-height`等属性结合使用
- 2.3. 动态计算比例
- 3. 应用场景
- 4. 兼容性和替代方案
- 5. 总结
1. 前言
在网页制作过程中,有时候我们只知道宽度,或者只知道高度,这时候需要制作一个4:3和9:16这种类似的盒子,不使用js而使用纯css如何实现呢:
aspect-ratio 是 CSS 中用于定义元素宽高比的属性。它允许开发者指定一个元素的宽度和高度之间的固定比例关系,无论元素的实际尺寸如何变化,都会保持这个比例。这种特性在响应式设计、图片和视频布局等场景中非常实用,能够帮助开发者更轻松地控制元素的外观和布局,避免因内容尺寸变化导致的布局错乱问题。
2. 用法
下面列举了一些常用的用法:
2.1 基本语法
aspect-ratio属性接受一个由斜杠(/)分隔的两个数字,表示宽度与高度的比例,其语法如下:
element {aspect-ratio: <width> / <height>;
}
其中,width
和height
为非负数字,例如:
.box {aspect-ratio: 16 / 9; /* 常见的视频宽高比 */width: 500px;background-color: lightblue;
}
在上述代码中,.box元素的宽度设置为500px,由于aspect-ratio设置为16/9,因此该元素的高度会自动计算为500px * 9 / 16 = 281.25px,从而保持16:9的宽高比。
2.2. 与max-width
、max-height
等属性结合使用
aspect-ratio属性可以与max-width、max-height等属性配合,实现更灵活的响应式布局。例如:
.image-container {max-width: 800px;aspect-ratio: 4 / 3;overflow: hidden;
}.image-container img {width: 100%;height: 100%;object-fit: cover;
}
在这个例子中,.image-container的最大宽度为800px,并且保持4:3的宽高比。内部的图片会自动填满容器,并通过object-fit: cover属性确保图片在保持比例的同时,完整显示内容。
2.3. 动态计算比例
aspect-ratio的值也可以通过 CSS 变量(var())动态计算,以适应不同的布局需求:
:root {--ratio-width: 2;--ratio-height: 1;
}.dynamic-box {aspect-ratio: var(--ratio-width) / var(--ratio-height);background-color: lightcoral;
}
通过修改 CSS 变量的值,可以轻松改变元素的宽高比,而无需修改大量的 CSS 代码。
3. 应用场景
下面列举了一些常见的应用场景:
- 响应式图片和视频布局
在响应式设计中,aspect-ratio属性常用于保持图片和视频的比例,防止其在不同设备上拉伸变形。例如,对于视频播放器:
.video-player {width: 100%;aspect-ratio: 16 / 9;
}
无论设备屏幕宽度如何变化,视频播放器都会始终保持16:9的比例,确保视频的正确显示。
- 卡片式布局
在卡片式布局中,使用aspect-ratio可以让卡片在不同屏幕尺寸下保持一致的外观。例如:
.card {width: 300px;aspect-ratio: 3 / 4;border: 1px solid #ccc;border-radius: 10px;overflow: hidden;
}
这样,每张卡片都会保持固定的宽高比,即使卡片内容有所不同,整体布局也会显得整齐有序。
- 图表和图形绘制
在绘制图表、流程图等图形时,aspect-ratio可以帮助开发者精确控制图形的比例,使其在不同屏幕上都能正确显示。例如:
.chart {width: 600px;aspect-ratio: 5 / 3;background-color: #f9f9f9;
}
通过设置合适的宽高比,图表可以更好地展示数据,提升视觉效果。
4. 兼容性和替代方案
虽然aspect-ratio属性功能强大,但在使用时需要注意其浏览器兼容性:
- Chrome:从版本 89 开始支持aspect-ratio属性,目前主流版本均已完全支持。
- Firefox:从版本 87 开始支持该属性。
- Safari:从版本 15.4 开始支持,较旧版本的 Safari 不支持此属性。
- Edge:从版本 89 开始支持,与 Chrome 保持一致。
环境 | 版本 | 支持情况 |
---|---|---|
Chrome | 89+ | 支持 |
Firefox | 87+ | 支持 |
Edge | 89+(新版本基于Chromium) | 支持 |
Safari | 15.4+ | 支持 |
对于不支持aspect-ratio属性的旧版浏览器,可以使用 JavaScript 来实现类似的效果。或者利用css里“百分比 padding 是相对于父容器宽度计算”的特性来实现:
- 通过 JavaScript 监听窗口大小变化,动态计算并设置元素的高度:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Aspect Ratio Fallback</title><style>.fallback-box {width: 100%;background-color: lightgreen;}</style>
</head><body><div class="fallback-box" id="fallbackBox"></div><script>const fallbackBox = document.getElementById('fallbackBox');const ratio = 16 / 9;function setBoxHeight() {const width = fallbackBox.offsetWidth;fallbackBox.style.height = (width / ratio) + 'px';}window.addEventListener('load', setBoxHeight);window.addEventListener('resize', setBoxHeight);</script>
</body>
</html>
- css里“百分比 padding 是相对于父容器宽度计算”的特性
设置 .box 的 height: 0,然后通过 padding-top: 75% 来创建高度。 因为 padding-top
百分比是基于父容器的宽度计算的,所以 75% 表示高度是宽度的 75%,即实现了 4:3 的比例(3 ÷ 4 = 0.75)。
使用position: absolute 可以在里面添加内容或覆盖其他元素。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Aspect Ratio Fallback</title><style>.container {width: 400px; /* 可以根据需要调整宽度 */position: relative;}.box {height: 0;padding-top: 75%; /* 3/4 = 0.75 = 75% */background-color: lightblue;position: relative;}/* 如果你想在盒子里放内容,可以用一个绝对定位的子元素 */.box-content {position: absolute;top: 0;left: 0;width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;}</style>
</head><body><div class="container"><div class="box"></div></div>
</body>
</html>
这2种方式可以在不支持aspect-ratio属性的浏览器中,模拟出类似的宽高比效果。
5. 总结
aspect-ratio属性为 CSS 开发者提供了一种简单而有效的方式来控制元素的宽高比,极大地简化了响应式设计和布局的实现过程。尽管存在一定的浏览器兼容性问题,但随着主流浏览器的不断更新,该属性的应用将会越来越广泛。在实际项目中,合理运用aspect-ratio属性,可以提升页面的视觉效果和用户体验,使布局更加灵活和美观。
本次分享就到这儿啦,我是鹏多多,如果您看了觉得有帮助,欢迎评论,关注,点赞,转发,我们下次见~
往期文章
- flutter-使用extended_image操作图片的加载和状态处理以及缓存和下载
- flutter-制作可缩放底部弹出抽屉评论区效果
- flutter-实现Tabs吸顶的PageView效果
- Vue2全家桶+Element搭建的PC端在线音乐网站
- 助你上手Vue3全家桶之Vue3教程
- 助你上手Vue3全家桶之VueX4教程
- 助你上手Vue3全家桶之Vue-Router4教程
- 超详细!Vue的九种通信方式
- 超详细!Vuex手把手教程
- 使用nvm管理node.js版本以及更换npm淘宝镜像源
- vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令
个人主页
- CSDN
- GitHub
- 简书
- 博客园
- 掘金
相关文章:
css使用aspect-ratio制作4:3和9:16和1:1等等比例布局
文章目录 1. 前言2. 用法2.1 基本语法2.2. 与max-width、max-height等属性结合使用2.3. 动态计算比例 3. 应用场景4. 兼容性和替代方案5. 总结 1. 前言 在网页制作过程中,有时候我们只知道宽度,或者只知道高度,这时候需要制作一个4:3和9:16这…...
深入探索 Apache Spark:从初识到集群运行原理
深入探索 Apache Spark:从初识到集群运行原理 在当今大数据时代,数据如同奔涌的河流,蕴藏着巨大的价值。如何高效地处理和分析这些海量数据,成为各行各业关注的焦点。Apache Spark 正是为此而生的强大引擎,它以其卓越…...
0903Redux改造项目_用户信息_状态管理-react-仿低代码平台项目
文章目录 1 Redux管理用户信息1.1 定义store和reducer1.2 使用useSeletor 2 自定义Hook统一加载用户信息存储Redux3 根据用户登录状态动态跳转页面结语 1 Redux管理用户信息 1.1 定义store和reducer src/store/userReducer.ts代码如下所示: import { createSlice…...
PyTorch_构建线性回归
使用 PyTorch 的 API 来手动构建一个线性回归的假设函数,数据加载器,损失函数,优化方法,绘制训练过程中的损失变化。 数据构建 import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt i…...
领略算法真谛: 多源bfs
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
Linux的web服务器的部署及优化
实验环境的配置 我们依然是要配置本地软件仓库,之前已有详细介绍,然后再次基础上还有如下操作,首先是进入到以下文件进行编辑 编辑内容为下,并且注意自身的网关有没有写错 然后给予权限 再进行下列操作后,就配置完成了…...
ASP.NET Core 请求限速的ActionFilter
文章目录 前言一、实现步骤1)创建自定义Action Filter示例1:示例2: 2)注册服务3)使用 二、实现说明总结 前言 以下是一个基于内存缓存实现的自定义限流Action Filter。 一、实现步骤 1)创建自定义Action…...
本地化语音转换工具推荐与使用
软件介绍 Buzz是一款基于OpenAI Whisper技术开发的开源语音转文字工具,支持离线运行和实时语音转换,能够高效完成会议记录、音频转文字等任务。 安装注意事项 在使用Buzz之前需要注意软件的安装设置,由于程序自带较大的模型文件&…...
【心海资源】telegram换U地址完整源码
【心海资源】telegram换U地址完整源码 未测,需要的下载完整的 下载地址:下载地址.txt - 蓝奏云...
神经网络开发实战:从零基础到企业级应用(含CNN、RNN、BP网络代码详解)
简介 神经网络作为深度学习的核心,正在成为现代AI应用的基石。从基础的感知机到复杂的Transformer架构,从图像识别到自然语言处理,神经网络技术的演进推动了人工智能的快速发展。本文将系统介绍神经网络的核心概念、主流模型及其实现原理,并通过三个企业级实战案例(医学图…...
C# WPF 布局
C# 0、WPF 布局 1、ON/OFF按钮 2、textBox 3、ComboBox 4、TabControl 5、Button <Window x:Class"WpfApp5.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…...
【PaaS与AI融合】MLOps平台的架构设计
PaaS与AI融合:MLOps平台的架构设计 一、技术背景与发展趋势二、技术架构核心特征1. 全生命周期管理闭环2. 混合编排引擎3. 智能资源调度三、关键技术实现细节1. 持续集成流水线2. 异构资源管理3. 安全治理体系四、行业实践与未来演进典型案例分析发展趋势展望五、架构设计建议…...
硬件工程师面试常见问题(15)
第七十一问:运放增益带宽积解读(有待改进) 增益带宽积顾名思义:增益(就是开环增益)与带宽的乘积; 第七十二问:运放输出摆幅 定义:输出摆幅是指输出信号在最大值和最小值…...
SpringMVC——第6章:RESTFul编程风格
一、RESTFul编程风格 1.RESTFul是什么 RESTFul是WEB服务接口的一种设计风格。 RESTFul定义了一组约束条件和规范,可以让WEB服务接口更加简洁、易于理解、易于扩展、安全可靠。 RESTFul对一个WEB服务接口都规定了哪些东西? 对请求的URL格式有约束和规范…...
深度解析:从 GPT-4o“谄媚”到 Deepseek“物理腔”,透视大模型行为模式的底层逻辑与挑战
深度解析:从 GPT-4o“谄媚”到 AI“物理腔”,透视大模型行为模式的底层逻辑与挑战 标签:人工智能, GPT-4o, 大语言模型, AI伦理, 人机交互, 技术思考 大家好!最近AI圈最火的“瓜”之一,莫过于OpenAI的GPT-4o模型在一…...
2025 年最新树莓派 Pico 连接 OLED 显示字模汉字详细教程
OLED 概述 OLED(Organic Light-Emitting Diode,有机发光二极管)是一种基于有机材料的发光技术,通过电流驱动有机薄膜发光,具有自发光、高对比度、柔性可弯曲等特点。 4 针脚 OLED 硬件电路如图所示,GND 接…...
【Ubuntu 安装Docker CE-Jenkins】
安装Docker CE(Ubuntu) Install | Docker Docs官网 使用apt仓库安装 DNS配置(可选) #手动替换 sudo vim /etc/systemd/resolved.conf #典型配置如下 [Resolve] DNS8.8.8.8 DNS114.114.114.114 FallbackDNS1.1.1.1 # 备用 DNS#sed替换 sudo sed -i /^#DNS/ {s/#DNS/DNS8.8.8…...
知识图谱 + 大语言模型:打造更聪明、更可靠的AI大脑 —— 探索 GraphRAG 中文优化与可视化实践
大语言模型(LLMs)无疑是近年来人工智能领域最耀眼的明星。它们强大的自然语言理解和生成能力,在文本创作、代码生成、对话交互等众多领域展现了惊人的潜力。然而,当前的 LLMs 并非完美无缺,它们常常面临着“幻觉”&…...
三、【LLaMA-Factory实战】模型微调进阶:从LoRA到MoE的技术突破与工程实践
一、引言 在大模型微调领域,选择合适的训练策略直接决定了效率与效果的平衡。LLaMA-Factory深度整合了参数高效微调(PEFT)、全量微调、混合专家模型(MoE)等12种训练策略,支持从消费级GPU到多卡集群的全场景…...
Photo-SLAM论文理解、环境搭建、代码理解与实测效果
前言:第一个解耦式Photo-SLAM,亮点和效果。 参考:https://zhuanlan.zhihu.com/p/715311759 全网最细PhotoSLAM的conda环境配置教程,拒绝环境污染!!-CSDN博客 1. 环境搭建 硬件:RTX 4090D wi…...
解决pycharm检测不到已经装好的conda的pytorch环境
问题 1.找装anaconda的位置(我装到了py-anacon下) 2.找到下图中的conda.bat 3.pycharm社区版右下角,添加新解释器 4.选conda环境,选择2.中conda.bat的位置,加载环境,使用现有环境,可以看到有选…...
【计算机视觉】3d人脸重建:3DDFA_V2:实时高精度3D人脸重建与密集对齐技术指南
3d人脸重建:3DDFA_V2:实时高精度3D人脸重建与密集对齐技术指南 一、项目概述与技术背景1.1 3DDFA_V2核心价值1.2 技术演进路线1.3 核心技术指标 二、环境配置与模型部署2.1 硬件要求2.2 软件安装基础环境搭建关键组件安装 2.3 模型下载 三、核心算法原理…...
谈判模拟器 - Gemini 2.5 商业优化版
核心目标: 基于深厚的理论知识、丰富的实战经验和前沿的技术洞察,结合麦肯锡领先的谈判策略框架,为用户提供全面、深入、可操作的商业谈判策略指导和建议,助力其在复杂商业环境中达成最优谈判结果,并实现商业价值最大化…...
深度学习系统学习系列【4】之反向传播(BP)四个基本公式推导
文章目录 补充知识:∇ 和 ⊙ 运算符详解∇ (nabla) 运算符⊙ (圆圈点) 运算符 反向传播基本公式计算图和基本定义BP1:输出层误差推导BP1公式的重要性实际例子BP2第 l l l层误差推导BP3 :损失函数关于偏置(b)偏导的推导BP4: 损失函…...
算法每日一题 | 入门-顺序结构-上学迟到
上学迟到 题目描述 学校和 yyy 的家之间的距离为 s 米,而 yyy 以 v 米每分钟的速度匀速走向学校。 在上学的路上,yyy 还要额外花费 10 分钟的时间进行垃圾分类。 学校要求必须在上午 8:00 到达,请计算在不迟到的前提下,yyy 最…...
开源库测试
yolov10 https://github.com/THU-MIG/yolov10 conda create -n yolov10 python3.9 conda activate yolov10 pip install -r requirements.txt pip install -e .报错 找不到对应版本 Could not find a version that satisfies the requirement gradio4.31.5 (from versions:…...
因为gromacs必须安装cuda(系统自带的NVIDIA驱动不行),这里介绍下如何安装cuda
1. 安装步骤 查看是否安装了cuda # 法1 cat /usr/local/cuda/version.txt # 法2 nvcc --version 若没有安装,则查看是否有N卡驱动,若无N卡驱动,则到软件与更新 -> 附加驱动中安装驱动 查看N卡驱动支持的cuda版本 nvidia-smi 如下…...
ABC 404
1.C 题: 1.思路: NM&每个点读数为2,但图中有可能出现多环,需要判断所有点是否都在同一连通块上,有俩种解法:搜索,循环 2.代码(循环做法) #include<bits/stdc.h&g…...
机器学习朴素贝叶斯算法
1.朴素贝叶斯算法 1.1基本概念 其分类原理是利用贝叶斯公式根据某特征的先验概率计算出其后验概率,然后选择具有最大后验概率作为该特征所属的类。之所以称之为“朴素”,是因为贝叶斯分类只做最原始、最简单的假设:所有的特征之间是相对独立…...
Linux:深入理解数据链路层
实际上一台主机中,报文并没有通过网络层直接发送出去,而是交给了自己的下一层协议——数据链路层!! 一、理解数据链路层 网络层交付给链路层之前,会先做决策再行动(会先查一下路由表,看看目标网…...
健康养生:从生活点滴启航
养生并非遥不可及的高深学问,只需把握生活中的细微之处,就能为健康保驾护航。 清晨睁眼,先在床上做简单的搓脸动作,从下巴到额头轻柔按摩,促进面部血液循环,唤醒肌肤活力。随后空腹喝一杯温水,可…...
【向量数据库】用披萨点餐解释向量数据库:一个美味的技术类比
文章目录 前言场景设定:披萨特征向量化顾客到来:生成查询向量相似度计算实战1. 欧氏距离计算(值越小越相似)2. 余弦相似度计算(值越大越相似) 关键发现:度量选择影响结果现实启示结语 前言 想象…...
CloudCompare 中 ccDrawableObject
CloudCompare 中 ccDrawableObject 类的主要内容与使用 1. ccDrawableObject 概述 在 CloudCompare 中,ccDrawableObject 是一个基类,主要用于管理 3D 可绘制对象 的显示属性,如颜色、可见性、LOD(层次细节)、光照等…...
【Linux】进程控制
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、什么是进程控制 二、进程创建 三、进程终止(进程退出) 退出码 main函数返回 _exit() exit() 测试 四、进…...
设计模式-基础概念学习总结(继承、多态、虚方法、方法重写)
概念使用例子的方式介绍(继承,多态,虚方法,方法重写),实现代码python 1. 继承(Inheritance) 概念:子类继承父类的属性和方法,可以直接复用父类的代码&#…...
分析rand()和srand()函数的功能
rand()和srand()函数原型: int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。 void srand(unsigned int seed)用来给rand() 设置随机数发生器,随机数发生器输出不同的数值,rand() 就会生成不同的随机数 1)、在“D:\Keil_v5\AR…...
架构师如何构建个人IP:职业规划与业务战略的双重提升
在数字化时代,软件架构师的角色已从单纯的技术专家转变为兼具技术领导力和业务影响力的复合型人才。如何构建个人IP,提升行业影响力,成为架构师职业发展的关键课题。本文从个人认知、业务战略、架构决策、产品思维四个维度,探讨架…...
CSS知识总结
一、CSS核心概念解析 1.1 选择器体系(重点) 基础选择器: /* ID选择器 */ #header { background: #333; }/* 类选择器 */ .btn-primary { color: white; }/* 属性选择器 */ input[type"text"] { border: 1px solid #ccc; } 组合…...
CRS 16 slot 设备硬件架构
目录 1. 核心组件 1.1 线路卡与物理接口模块 1.2 交换结构与容量 1.3 控制与管理 1.4 风扇与散热 1.5 电源与告警 2. 插槽编号与机箱布局 2.1 前侧(PLIM 面) 2.2 后侧(MSC 面) 2.3 插槽配对 1. 核心组件 1.1 线路卡与物…...
人工智能浪潮中Python的核心作用与重要地位
在人工智能(Artificial Intelligence,AI)蓬勃发展的时代,Python已然成为推动这一技术进步的关键编程语言。从复杂的机器学习算法实现,到前沿的深度学习模型构建,再到智能系统的部署,Python无处不…...
【了解】数字孪生网络(Digital Twin Network,DTN)
目录 一、为什么?二、是什么?三、什么架构?四、如何应用?参考 一、为什么? 一方面,网络负载不断增加,,网络规模持续扩大带来的网络复杂性,使得网络的运行和维护变得越来越复杂。另一…...
[C语言]第一章-初识
目录 一.引言 二.MinGW 下载与安装 1.什么是 MinGW 2.下载 MinGW 3.安装 MinGW 4.配置 MinGW 环境变量 三.VS Code 下载与安装 1.什么是 VS Code 2.下载 VS Code 3.安装 VS Code 4.汉化 5.安装扩展插件 C/C 截图 四.编写并运行 Hello World 程序 代码解释 运行…...
如何用git将项目上传到github
步骤 1.创建仓库 2.记下仓库的url 3.在本地初始化仓库 路径要在项目下 cd /path/to/your/vue-project git init 4.创建touch .gitignore文件 在项目根目录下创建 .gitignore 文件,用于指定 Git 忽略哪些文件或文件夹 5.添加和提交项目文件 将文件提交到版本控…...
C++入门(上)--《Hello C++ World!》(1)(C/C++)
文章目录 前言命名空间域命名空间的用法 C的输入和输出缺省参数函数重载auto关键字(C11)范围for 前言 C不是C# C兼容大部分C的东西,但不是完全(98%的样子,除非遇到了不兼容的,那就记一下,不然就认为自己在C里面写的那些可以写到C里…...
架构思维:构建高并发读服务_基于流量回放实现读服务的自动化测试回归方案
文章目录 引言一、升级读服务架构,为什么需要自动化测试?二、自动化回归测试系统:整体架构概览三、日志收集1. 拦截方式2. 存储与优化策略3. 架构进化 四、数据回放技术实现关键能力 五、差异对比对比方式灵活配置 六、三种回放模式详解1. 离…...
代码随想录第33天:动态规划6(完全背包基础)
一、完全平方数(Leetcode 279) 本题与“零钱兑换”基本一致。 1.确定dp数组以及下标的含义 dp[j]:和为j的完全平方数的最少数量为dp[j] 2.确定递推公式 dp[j] 可以由dp[j - i * i]推出, dp[j - i * i] 1 便可以凑成dp[j]。 …...
Android控件View、ImageView、WebView用法
一 控件清单 View、ImageView、WebView 二 控件UI代码 <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app=&qu…...
关于浏览器页面自动化操作
Selenium 是一个用于自动化浏览器操作的强大框架,广泛应用于Web应用程序的测试自动化。它主要由以下几个核心组件组成: Selenium WebDriver: WebDriver 是 Selenium 的核心组件,它提供了一组API,允许开发者编写程序来…...
P5739 计算阶乘详解
此题目,对于会递归的很简单很简单,但作者是野人不会,只能是边刷边学,且题解比较有意思,所有我这次的重心不是题目,而是题解里面创作者展示的不一样的东西,先看题目 题目要求不用for循环…...
把Android设备变成“国标摄像头”:GB28181移动终端实战接入指南
把Android设备变成“国标摄像头”:GB28181移动终端实战接入指南 ——执法记录仪、巡检终端、布控球,如何通过大牛直播SDK直接挂到GB28181平台? 在过去,GB28181 通常用于固定摄像头、NVR等“设备端”。但在政务、安防、应急等行业…...