大家好,又见面了,我是你们的朋友全栈君。
这一篇文章主要对移动端开发相关的基础知识点,进行总结。从移动端开发的一些概念、专有名词、缩放、viewport移动端事件、适配问题以及一些工作中沟通经常会用到这些方面来说一下移动端
移动端与 PC 端网页有所不同,有以下几个特点
屏幕大小指屏幕的对角线的长度,单位一般是英寸。常见的手机屏幕大小 3.5、4、4.7、5.0、5.5、6.0等。常见手机屏幕查看网址 http://screensiz.es/
屏幕分辨率是指屏幕横纵向上的像素点数。一般表示形式 x * y 或者 y * x 表示。例如 IPhone 6 的屏幕分辨率为 750 * 1334,华为 P30 的分辨率为 2340 * 1080。
型号 | 分辨率 |
---|---|
IPhone 3GS | 320 * 480 |
IPhone 4 / 4s | 640 * 960 |
IPhone 5 / 5s | 640 * 1136 |
IPhone 6 / 7 / 8 | 750 * 1334 |
华为 P30 | 1080 * 2340 |
IPhone X | 1125 * 2436 |
Retina 是苹果公司 2010 年推出的一种显示标准,是把更多的像素点压缩至一块屏幕里,从而达到更高的分辨率并提高屏幕显示的细腻程度。
设备独立像素的出现,使得即使在高分辨率的屏幕下,也可以正常尺寸的显示元素,代码不受到设备的影响。
型号 | 设备像素总和 | 设备独立像素总和 |
---|---|---|
IPhone 3GS | 320 * 480 | 320 * 480 |
IPhone 4 / 4s | 640 * 960 | 320 * 480 |
IPhone 5 / 5s | 640 * 1136 | 320 * 568 |
IPhone 6 / 7 / 8 | 750 * 1334 | 375 * 667 |
HUAWEI P10 | 1080 x 1920 | 360 x 640 |
IPhone X | 1125 * 2436 | 375 * 812 |
CSS 像素是一个抽象的长度单位,单位 px,主要用来精确度量和控制 WEB 网页上的内容。
位图像素也是一个长度单位。位图像素是栅格图像(如:png,jpg,gif等)最小的数据单元。
1个位图像素对应于1个物理像素,图片才能得到完美清晰的展示
屏幕上每英寸可以显示的像素点的数量,单位是 ppi (pixels per inch ),这里还有另一个单位 dpi(dots per inch),两个值的计算方式都一样,只是使用的场景不同。 描述屏幕属性时使用 ppi,开发过程中描述屏幕设备使用 dpi。
苹果曾经给出个一个标准:手机屏幕达到 300PPI、平板屏幕达到 220PPI、笔记本电脑屏幕达到 200PPI 即可认为是 Retina 屏幕。
像素比(DPR dpr): 单一方向上设备物理像素和设备独立像素的比例。
像素比的作用 程序可以根据像素比来显示不同的图片,达到清晰显示网页的效果。
注意: 并不是所有的图片都这样处理,只需要处理那些页面布局需要的图片和图标即可
在 PC 端,视口指的是浏览器的可视区域。其宽度和浏览器窗口的宽度保持一致。在 CSS 标准文档中,视口也被称为初始包含块,它是所有 CSS 百分比宽度推算的根源。
移动端的视口与 PC 端不同,有三个视口
布局视口是用来放置网页内容的区域。
一般移动设备的浏览器都默认定义一个虚拟的布局视口(layout viewport),用于解决早期的页面在手机上显示的问题。 视口大小由浏览器厂商决定,大多数设备的布局视口大小为 980px。
视觉视口就是用户可见的区域。
获取方式
注:不缩放的情况下,视觉视口宽度 == 布局视口宽度。
宽度与屏幕同宽的布局视口称为理想视口。 理想视口的好处
注意:理想视口不是真实存在的视口
设置理想视口的方法
放大时
缩小时
放大时
缩小时
真机测试是项目测试必要的一个流程,一定要掌握!!!
viewport 标签是苹果公司在 2007 年引进的,用于移动端布局视口的控制。
使用示例
- width 布局视口宽度
- initial-scale 初始化缩放比例
- minimum-scale 最小缩放比例
- 这里通过微信来浏览器演示 苹果内置的和很多安卓的浏览器不可用 itools 实时屏幕
- maximum-scale 最大缩放比例
- user-scalable 设置是否允许用户缩放
- 苹果内置的浏览器不好使, 但是微信浏览器好使
- viewport-fit auto/contain/cover
width 值可以是数字,也可以是设备宽度表示 device-width,这样可以得到完美视口
是否允许用户通过手指缩放页面。苹果浏览器 safari 不认识该属性。
设置为 cover 可以解决『刘海屏』的留白问题
移动端事件列表
这几个事件最早出现于IOS safari中,为了向开发人员转达一些特殊的信息。
方式一
方式二
阻止当前元素事件的默认行为。
阻止顶级元素事件的默认行为,可以增加一个包裹元素绑定,也可以给 document 和 window 绑定,不过需要关闭被动模式
使用非链接的元素代替 a 标签,并绑定 touchstart 事件
延时隐藏遮盖元素
移动端页面跳转可以使用 a 链接,也可以使用 touchstart 事件来触发 JS 代码完成跳转
这里指的浏览器默认行为主要有两个
这样可以让网页在不同的浏览器都有一样的表现。
可以给 document 绑定 touchstart 事件,并阻止默认行为,不过需要关闭被动模式。这里推荐创建一个包裹元素,绑定 touchstart 事件并阻止默认行为。
CSS 代码
HTML 代码
JS 代码
最外层元素阻止了 touchstart 默认行为之后,会产生一些意外现象😭
产生『后遗症』的原因在于 touchstart 阻止了默认行为,后续所有的操作都已经失效。解决问题只需要给目标元素绑定 touchstart 事件并阻止事件冒泡,这样当前操作的默认行为仍然可用。👌
var link = document.getElementsByTagName('a')[0];
link.addEventListener('touchstart', function(e){
e.stopPropagation();
})
注: 不是非要阻止浏览器的默认行为,这是一种极端要求的应对方法,正常只需要设置完美视口即可。
touch 事件对象中有 3 个非常重要的属性
在 touchstart 事件中
在 touchend 事件中
每一个触点对象都包含一些位置信息,其中包括
移动端设备的屏幕尺寸繁多,要想让页面的呈现统一,需要对不同尺寸的设备进行适配。适配的方式主要有两种
拿到设计稿之后,设置布局视口宽度为设计稿宽度,然后量尺寸进行布局即可。
<meta name="viewport" content="width=375, user-scalable=no">
操作步骤:
em 和 rem 都是 CSS 中的长度单位。而且两个都是相对长度单位,不过两个有点区别
rem 适配的策略有以下几种
document.documentElement.style.fontSize = document.documentElement.clientWidth*100/375+'px';
document.documentElement.style.fontSize = document.documentElement.clientWidth*100/375+'px';
document.documentElement.style.fontSize = document.documentElement.clientWidth/10+'px';
高清屏幕下 1px 对应更多的物理像素,所以 1 像素边框看起来比较粗,解决方法如下
边框使用伪类选择器,或者单独的元素实现。例如底部边框
在高清屏幕下设置
rem 页面布局
元素的边框设置为 1px
通过 viewport 中的 initial-scale 将页面整体缩小
重新设置根元素字体
npm install less -g
ctrl + alt + s 打开设置 -> 搜索 watcher -> 点击右上角 + 号 -> 选择 less -> 确定👌
有时候你不努力一下,就不知道什么叫绝望。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152692.html原文链接:https://javaforall.cn