HTML番外篇(五)-移动端适配

一、媒体查询

1.认识媒体查询

媒体查询是一种提供给开发者针对不同设备需求进行定制化开发的一个接口

你可以根据设备的类型(比如屏幕设备、打印机设备)或者特定的特性(比如屏幕的宽度)来修改你的页面。

媒体查询的使用方式主要有三种:

  • 方式一:通过@media@import使用不同的CSS规则(常用);

    在这里插入图片描述

  • 方式二:使用media属性为<style><link><source>和其他HTML元素指定特定的媒体类型;

在这里插入图片描述

  • 方式三:使用 Window.matchMedia() 和 MediaQueryList.addListener() 方法来测试和监控媒体状态;

比较常用的是通过 @media 来使用不同的CSS规则,目前掌握这个即可;

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!-- 媒体查询方式二:使用media属性 --><!-- <link rel="stylesheet" media="screen and (max-width: 800px)" href="./css/body_bgc.css"> --><style>/* 媒体查询方式一 使用@import *//* @import url(./css/body.css) (max-width: 500px); */</style><script>// 媒体查询方式三:使用matchMedia函数var mediaQueryList = window.matchMedia("(max-width: 600px)");mediaQueryList.addEventListener("change", function(a, b){if (a.matches) {document.body.style.backgroundColor = '#ccc';} else {document.body.style.backgroundColor = 'transparent';}})</script>
</head>
<body></body>
</html>

2.媒体查询 - 媒体类型(Media types)

在使用媒体查询时,你必须指定要使用的媒体类型。

  • 媒体类型是可选的,并且会(隐式地)应用 all 类型。

常见的媒体类型值如下:

  • all:适用于所有设备。
  • print:适用于在打印预览模式下在屏幕上查看的分页材料和文档。
  • screen(掌握):主要用于屏幕。
  • speech:主要用于语音合成器。

被废弃的媒体类型:

  • CSS2.1 和 Media Queries 3 定义了一些额外的媒体类型(tty, tv, projection, handheld, braille, embossed, 以及 aural);
  • 但是他们在Media Queries 4 中已经被废弃,并且不应该被使用;
  • aural类型被替换为具有相似效果的speech。

3.媒体查询 – 媒体特性(Media features)

媒体特性(Media features)描述了 浏览器输出设备,或是预览环境的具体特征;

  • 通常会将媒体特性描述为一个表达式
  • 每条媒体特性表达式都必须用括号括起来

在这里插入图片描述

4.媒体查询 – 逻辑操作符(logical operators)

媒体查询的表达式最终会获得一个Boolean值,也就是真(true)或者假(false)。

  • 如果结果为真(true),那么就会生效;
  • 如果结果为假(false),那么就不会生效;

如果有多个条件,我们可以通过逻辑操作符联合复杂的媒体查询:

  • and:and 操作符用于将多个媒体查询规则组合成单条媒体查询
  • not:not运算符用于否定媒体查询,如果不满足这个条件则返回true,否则返回false。
  • only:only运算符仅在整个查询匹配时才用于应用样式。
  • , (逗号):逗号用于将多个媒体查询合并为一个规则。

比如下面的媒体查询,表示:屏幕宽度大于500,小于700的时候,body背景颜色为红色;

在这里插入图片描述

5.常见的移动端设备

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 320~375之间 font-size: 15px;375~414之间 font-size: 18px;414~480之间 font-size: 21px;大于480px font-size: 24px*//* @media (min-width: 320px) and (max-width: 375px) {.box { font-size: 15px; }}@media (min-width: 375px) and (max-width: 414px) {.box { font-size: 18px; }}@media (min-width: 414px) and (max-width: 480px) {.box { font-size: 21px; }}@media (min-width: 480px) {.box { font-size: 24px; }} *//* CSS层叠性 */@media (min-width: 320px) {.box { font-size: 15px; }}@media (min-width: 375px) {.box { font-size: 18px; }}@media (min-width: 414px) {.box { font-size: 21px; }}@media (min-width: 480px) {.box { font-size: 24px; }}</style>
</head>
<body><div class="box">我是box</div></body>
</html>

二、CSS常见单位详解

1.CSS中的单位

前面编写的CSS中,我们经常会使用px来表示一个长度(大小),比如font-size设置为18px,width设置为100px。

px 是一个长度(length)单位,事实上CSS中还有非常多的长度单位。

整体可以分成两类:

  • 绝对长度单位(Absolute length units);

  • 相对长度单位(Relative length units);

2.CSS中的绝对单位( Absolute length units )

绝对单位:

  • 它们与其他任何东西都没有关系,通常被认为总是相同的大小。
  • 这些值中的大多数在用于打印时比用于屏幕输出时更有用,例如,我们通常不会在屏幕上使用cm。
  • 唯一一个您经常使用的值,就是px (像素)。

在这里插入图片描述

在这里插入图片描述

3.CSS中的相对单位( Relative length units )

相对长度单位

  • 相对长度单位相对于其他一些东西;
  • 比如父元素的字体大小,或者视图端口的大小;
  • 使用相对单位的好处是,经过一些仔细的规划,您可以使文本或其他元素的大小与页面上的其他内容相对应;

在这里插入图片描述

在这里插入图片描述

三、深入理解pixel、DPR、PPI

1.pixel是什么

前面我们已经一直在使用px单位了,px是pixel单词的缩写,翻译为像素

那么像素到底是什么呢?

  • 像素是影响显示的基本单位。(比如屏幕上看到的画面、一幅图片);
  • pix是英语单词picture的常用简写,加上英语单词“元素”element,就得到pixel;
  • “像素”表示“画像元素”之意,有时亦被称为pel(picture element);

2.像素的不同分类(一)

100个pixel到底是多少呢?

  • 我们确实可以在屏幕上看到一个大小,但是这个大小代表的真实含义是什么呢?
  • 我们经常说一个电脑的分辨率、手机的分辨率,这个CSS当中的像素又是什么关系呢?

这里我们要深入到不同的像素概念中,来理解CSS中的pixel到底代表什么含义。

像素单位常见的有三种像素名称:

  • 设备像素(也称之为物理像素);
  • 设备独立像素(也称之为逻辑像素);
  • CSS像素

3.物理像素和逻辑像素

设备像素,也叫物理像素。

  • 设备像素指的是显示器上的真实像素,每个像素的大小是屏幕固有的属性,屏幕出厂以后就不会改变了;
  • 我们在购买显示器或者手机的时候,提到的设备分辨率就是设备像素的大小;
  • 比如iPhone X的分辨率 1125x2436,指的就是设备像素

设备独立像素,也叫逻辑像素。

  • 如果面向开发者我们使用设备像素显示一个100px的宽度,那么在不同屏幕上显示效果会是不同的;
  • 开发者针对不同的屏幕很难进行较好的适配,编写程序必须了解用户的分辨率来进行开发;
  • 所以在设备像素之上,操作系统为开发者进行抽象,提供了逻辑像素的概念
  • 比如你购买了一台显示器,在操作系统上是以1920x1080设置的显示分辨率,那么无论你购买的是2k、4k的显示器,对于开发者来说,都是 1920x1080的大小。

CSS像素

  • CSS中我们经常使用的单位也是 pixel,它在默认情况下等同于设备独立像素(也就是逻辑像素)
  • 毕竟逻辑像素才是面向我们开发者

我们可以通过 JavaScript 中的screen.widthscreen.height获取到电脑的逻辑分辨率:

4.DPR、PPI

DPR:device pixel ratio

  • 2010年,iPhone4问世,不仅仅带来了移动互联网,还带来了Retina屏幕;
  • Retina屏幕翻译为视网膜显示屏,可以为用户带来更好的显示;
  • 在Retina屏幕中,一个逻辑像素在长度上对应两个物理像素,这个比例称之为设备像素比(device pixel ratio);
  • 我们可以通过window.devicePixelRatio获取到当前屏幕上的DPR值;

在这里插入图片描述

PPI(了解):每英寸像素(英语:Pixels Per Inch,缩写:PPI)

  • 通常用来表示一个打印图像或者显示器上像素的密度;
  • 前面我们提过1英寸=2.54厘米,在工业领域被广泛应用;

五、浏览器视口Viewport

1.什么是移动端适配?

移动互联网的快速发展,让人们已经越来越习惯于使用手机来完成大部分日常的事务。

  • 前端我们已经学习了大量HTML、CSS的前端开发知识,并且也进行了项目实战;
  • 这些知识也同样适用于移动端开发,但是如果想让一个页面真正适配于移动端,我们最好多了解一些移动端的知识;

移动端开发目前主要包括三类:

  • 原生App开发(iOS、Android、RN、uniapp、Flutter等)
  • 小程序开发(原生小程序、uniapp、Taro等)
  • Web页面(移动端的Web页面,可以使用浏览器或者webview浏览)

因为目前移动端设备较多,所以我们需要对其进行一些适配。

在这里插入图片描述

这里有两个概念:

  • 自适应:根据不同的设备屏幕大小来自动调整尺寸、大小;
  • 响应式:会随着屏幕的实时变动而自动调整,是一种自适应;

2.认识视口viewport

在前面我们已经简单了解过视口的概念了:

  • 在一个浏览器中,我们可以看到的区域就是视口(viewport);
  • 我们说过 fixed 就是相对于视口来进行定位的;
  • 在PC端的页面中,我们是不需要对视口进行区分,因为我们的布局视口视觉视口是同一个;

但是在移动端,不太一样,你布局的视口和你可见的视口是不太一样的。

  • 这是因为移动端的网页窗口往往比较小,我们可能会希望一个大的网页在移动端可以完整的显示;
  • 所以在默认情况下,移动端的布局视口是大于视觉视口的

所以在移动端,我们可以将视口划分为三种情况:

  • 布局视口(layout viewport)
  • 视觉视口(visual layout)
  • 理想视口(ideal layout)

这些概念的区分,事实上来自ppk,他也是对前端贡献比较大的一个人(特别是在移动端浏览器)

  • https://www.quirksmode.org/mobile/viewports2.html

在这里插入图片描述

3.布局视口和视觉视口

3.1布局视口(layout viewport)

默认情况下,一个在PC端的网页在移动端会如何显示呢?

  • 第一,它会按照宽度为980px来布局一个页面的盒子和内容
  • 第二,为了显示可以完整的显示在页面中,对整个页面进行缩小

我们相对于980px布局的这个视口,称之为布局视口(layout viewport);

  • 布局视口的默认宽度是980px

3.2视觉视口(visual viewport)

  • 如果默认情况下,我们按照980px显示内容,那么右侧有一部分区域 就会无法显示,所以手机端浏览器会默认对页面进行缩放以显示到用户的可见区域中
  • 那么显示在可见区域的这个视口,就是视觉视口(visual viewport)

在Chrome上按shift+鼠标左键可以进行缩放。

在这里插入图片描述

4.理想视口(ideal viewport)

如果所有的网页都按照980px在移动端布局,那么最终页面都会被缩放显示。

  • 事实上这种方式是不利于我们进行移动的开发的,我们希望的是设置100px,那么显示的就是100px;
  • 如何做到这一点呢?通过设置理想视口(ideal viewport);

理想视口(ideal viewport):

  • 默认情况下的layout viewport并不适合我们进行布局;
  • 我们可以对 layout viewport 进行宽度和缩放的设置,以满足正常在一个移动端窗口的布局;
  • 这个时候可以设置meta中的viewport

在这里插入图片描述

六、移动端适配

1.移动端适配方案

移动端的屏幕尺寸通常是非常繁多的,很多时候我们希望在不同的屏幕尺寸上显示不同的大小;

  • 比如我们设置一个100x100的盒子
    • 在375px的屏幕上显示是100 x 100;
    • 在320px的屏幕上显示是90+ x 90+;
    • 在414px的屏幕上显示是100+ x 100+;
  • 其他尺寸也是类似,比如padding、margin、border、left,甚至是font-size等等;

这个时候,我们可能可以想到一些方案来处理尺寸:

  • 方案一:百分比设置
    • 因为不同属性的百分比值,相对的可能是不同参照物,所以百分比往往很难统一
    • 所以百分比在移动端适配中使用是非常少的;
  • 方案二:rem单位+动态html的font-size
  • 方案三:vw单位
  • 方案四:flex的弹性布局

2.适配方案 – rem+动态html的font-size

rem单位是相对于html元素的font-size来设置的,那么如果我们需要在不同的屏幕下有不同的尺寸,可以动态的修改html的 font-size 尺寸。

比如如下案例:

  • 1.设置一个盒子的宽度是 2rem;
  • 2.设置不同的屏幕上html的font-size不同;

在这里插入图片描述

这样在开发中,我们只需要考虑两个问题:

  • 问题一:针对不同的屏幕,设置html不同的font-size;
  • 问题二:将原来要设置的尺寸,转化成rem单位;

2.1 rem的font-size尺寸

方案一:媒体查询

  • 可以通过媒体查询来设置不同尺寸范围内的屏幕html的font-size尺寸;
  • 缺点:
    • 1.我们需要针对不同的屏幕编写大量的媒体查询;
    • 2.如果动态改变尺寸,不会实时的进行更新

方案二:编写js代码

  • 如果希望实时改变屏幕尺寸时,font-size也可以实时更改,可以通过js代码;
  • 方法:
    • 1.根据html的宽度计算出font-size的大小,并且设置到html上;
    • 2.监听页面的实时改变,并且重新设置font-size的大小到html上;
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0;padding: 0;}.box {width: 6.25rem;height: 6.25rem;background-color: #ccc;}</style>
</head>
<body><div class="box">吃饭睡觉阿斗都</div><script>var htmlEl = document.documentElement;function setRemUnit() {var htmlFontSize = htmlEl.clientWidth / 46.875;htmlEl.style.fontSize = htmlFontSize + "px";console.log(htmlFontSize);}setRemUnit();window.addEventListener("resize", function () {setRemUnit();})</script>
</body>
</html>

方案三:lib-flexible 库

  • 事实上,lib-flexible库做的事情是相同的,你也可以直接引入它;

2.2 rem的单位换算

方案一:手动换算

  • 比如有一个在375px屏幕上,100px宽度和高度的盒子;
  • 我们需要将100px转成对应的rem值;
  • 100/37.5=2.6667,其他也是相同的方法计算即可;

方案二:less/scss函数

在这里插入图片描述

方案三:postcss-pxtorem(后续学习)

  • 目前在前端的工程化开发中,我们可以借助于webpack的工具来完成自动的转化;

方案四:VSCode插件

  • px to rem 的插件,在编写时自动转化;

3.适配方案 - vw

在flexible GitHub上已经有写过这样的一句话:

由于viewport单位得到众多浏览器的兼容,lib-flexible这个过渡方案已经可以放弃使用,不管是现在的版本还是以前的版本,都存有一定的问题。建议大家开始使用viewport来替代此方。

所以它更推荐使用viewport的两个单位vw、vh

vw的兼容性如何呢?

在这里插入图片描述

4.vw 和 rem 的对比

rem事实上是作为一种过渡的方案,它利用的也是vw的思想。

  • 前面不管是我们自己编写的js,还是flexible的源码;
  • 都是将1rem等同于设计稿的1/10,在利用1rem计算相对于整个屏幕的尺寸大小;
  • 那么我们来思考,1vw不是刚好等于屏幕的1/100吗?
  • 而且相对于rem还更加有优势;

vw相比于rem的优势:

  • 优势一:不需要去计算html的font-size大小,也不需要给html设置这样一个font-size;
  • 优势二:不会因为设置html的font-size大小,而必须给body再设置一个font-size,防止继承;
  • 优势三:因为不依赖font-size的尺寸,所以不用担心某些原因html的font-size尺寸被篡改,页面尺寸混乱;
  • 优势四:vw相比于rem更加语义化,1vw刚才是1/100的viewport的大小;
  • 优势五:可以具备rem之前所有的优点;

vw 我们只面临一个问题,将尺寸换算成vw的单位即可;

所以,目前相比于rem,更加推荐大家使用 vw(但是理解rem依然很重要)

5.vw的单位换算

方案一:手动换算

  • 比如有一个在375px屏幕上,100px宽度和高度的盒子;

  • 我们需要将100px转成对应的vw值;

  • 100/3.75=26.667,其他也是相同的方法计算即可;

方案二:less/scss函数

在这里插入图片描述

方案三:postcss-px-to-viewport-8-plugin(后续学习)

  • 和rem一样,在前端的工程化开发中,我们可以借助于webpack的工具来完成自动的转化;

方案四:VSCode插件

  • px to vw 的插件,在编写时自动转化;

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法笔记:球树

1 KD树的问题 算法笔记&#xff1a;KD树_UQI-LIUWJ的博客-CSDN博客 在kd树中&#xff0c;导致性能下降的最核心因素是因为kd-tree中被分割的子空间是一个个的超方体&#xff0c;而求最近邻时使用的是欧式距离&#xff08;超球&#xff09;。超方体与超球体相交的可能性是极高…

【VsCode】SSH远程连接Linux服务器开发,搭配cpolar内网穿透实现公网访问(1)

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

SpringBootWeb案例 Part3

目录 1. 新增员工 1.1 需求 1.2 接口文档 1.3 思路分析 PostMapping RequestBody //把前端传递的JSON数据填充到实体类中 1.4 功能开发 1.5 功能测试 1.6 前后端联调 2. 文件上传 2.1 文件上传简介 Spring中提供了一个API&#xff1a;MultipartFile&#xff0c;使…

爬虫逆向实战(二十一)-- 某某点集登录与获取数据

登录 一、数据接口分析 主页地址&#xff1a;某某点集 1、抓包 通过抓包可以发现登录接口是phonePwdLogin 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有pwd和sig两个加密参数 请求头是否加密&#xff1f; 无响应是否加密&#x…

144. 二叉树的前序遍历-C++

题目来源&#xff1a;力扣 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 代码实现&#xff1a; class Solution { public:vector<int> preorderTraversal(TreeNo…

深入理解linux内核--程序的执行

可执行文件 在第一章中我们把进程定义为“执行上下文”。这就意味着进行特定的计算需要收集必要的信息&#xff0c;包括所访问的页&#xff0c;打开的文件&#xff0c;硬件寄存器的内容等等。 可执行文件是一个普通文件&#xff0c;它描述了如何初始化一个新的执行上下文&…

飞腾FT-2000/4、D2000 log报错指导(1)

在爱好者群中遇见了很多的固件问题,这里总结记录了大家的交流内容和调试心得。主要是飞腾桌面CPU FT-2000/4 D2000相关的,包含uboot和UEFI。希望对大家调试有所帮助。 这个专题会持续更新,凑够一些就发。 1 UEFI启动时报错: ASSERT_EFI_ERROR (Status = Not Found) ASS…

ubuntu20.04 直接安装vpp23.06 测试双 VPP Tunnel Ike2

环境信息&#xff1a;VMware Workstation 17 Pro ubuntu20.04 (清华源) ubuntu 源点进去选&#xff1a;ubuntu-22.04.3-desktop-amd64.iso 如果之前装过VPP&#xff0c;用以下命令确定是否卸载干净&#xff1a; dpkg -l | grep vpp dpkg -l | grep DPDK 卸载&#xff1a; …

【springboot】WebScoket双向通信:

文章目录 一、介绍&#xff1a;二、案例&#xff1a;三、使用&#xff1a;【1】导入WebSocket的maven坐标【2】导入WebSocket服务端组件WebSocketServer&#xff0c;用于和客户端通信【3】导入配置类WebSocketConfiguration&#xff0c;注册WebSocket的服务端组件【4】导入定时…

DevOps系列文章 之 Python基础

Python语法结构 语句块缩进 1.python代码块通过缩进对齐表达代码逻辑而不是使用大括号 2.缩进表达一个语句属于哪个代码块 3.缩进风格 &#xff1a; 建议使用四个空格 如果是Linux系统的话&#xff0c;可以这样做&#xff0c;实现自动缩进 &#xff1a; vim ~/.vimrc set ai…

中国芯,寻找新赛道迫在眉睫

北京华兴万邦管理咨询有限公司 商瑞 陈皓 近期国内半导体行业的热点可以用两个“有点多”来描述&#xff0c;一个是中国芯群体中上市公司股价闪崩的有点多&#xff0c;另一个是行业和企业的活动有点多。前者说明了许多国内芯片设计企业&#xff08;fabless商业模式&#xff09;…

编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。

环境&#xff1a; CentOS 7 Linux 3.10.0-1160.el7.x86_64 具体要求如下&#xff1a; &#xff08;1&#xff09;基于centos基础镜像&#xff1b; &#xff08;2&#xff09;指定作者信息&#xff1b; &#xff08;3&#xff09;安装nginx服务&#xff0c;将提供的dest目录…

计算机安全学习笔记(I):访问控制安全原理

访问控制原理 从广义上来讲&#xff0c;所有的计算机安全都与访问控制有关。 RFC 4949: Internet Security Glossary, Version 2 (rfc-editor.org) RFC 4949 定义的计算机安全&#xff1a;用来实现和保证计算机系统的安全服务的措施&#xff0c;特别是保证访问控制服务的措施…

学信息系统项目管理师第4版系列03_文件与标准

审核未通过&#xff0c;删除文件部分&#xff0c;仅保留标准化相关内容&#xff0c;重发 12. 标准化 12.1. 采用国际标准和国外先进标准的程度分为等同采用、修改采用和等效采用 3 种 12.1.1. 【高21上选20】 12.1.2. 采用指与国际标准在技术内容和文本结构上相同,或者与国…

8.7.tensorRT高级(3)封装系列-调试方法、思想讨论

目录 前言1. 模型调试技巧总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-调试方法、思想讨论 课程大纲可看…

Sping源码(七)— 后置处理器(自定义后置处理器)

上一篇中简单介绍了Spring中invokeBeanFactoryPostProcessors方法的执行流程&#xff0c;以及BFPP和BDRPP类的介绍&#xff0c;这篇文章我们来自定义实现一个类的后置处理器。 自定义PostProcessor 自定义PostProcessor的方式一共两种&#xff0c;都是根据invokeBeanFactoryPo…

2023年高教社杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…

软件工程(十八) 行为型设计模式(四)

1、状态模式 简要说明 允许一个对象在其内部改变时改变它的行为 速记关键字 状态变成类 类图如下 状态模式主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。比如订单从待付款到待收货的咋黄台发生变化,执行的逻辑是不一样的。 所以我们将状态抽象为一…

电商项目part05 分布式ID服务实战

背景 日常开发中&#xff0c;需要对系统中的各种数据使用 ID 唯一表示&#xff0c;比如用户 ID 对应且仅对应一个人&#xff0c;商品 ID 对应且仅对应一件商品&#xff0c;订单 ID 对应且仅对应 一个订单。现实生活中也有各种 ID&#xff0c;比如身份证 ID 对应且仅对应一个人…

openCV实战-系列教程9:傅里叶变换(傅里叶概述/频域变换结果/低通与高通滤波)、原理解析、源码解读

OpenCV实战系列总目录 打印图像直接用这个函数&#xff1a; def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows()1、傅里叶变换 在生活中&#xff0c;我们的大部分事情都是以时间为参照的&#xff0c;用时间为参照的为时域分析&#xff0c;在频…