话题起因:

这个话题应该能聊的东西挺多的,从16年做手机端开始就研究,也写了两篇博客来记录过(但是受限于但是的经验和认知,现在看起来不是特别清晰)。

为什么今天会继续这个话题呢,在做了reactnative和之前小游戏横屏页面后,我觉得有必要总结一下。

本篇博客,最终针对wap横屏竖屏给出两个通用的适配方案,rn上面可能实现方式和web的不大一样,但是思路逻辑是一样的。

从生产流程说起:

从生产流程来考虑,适配这个东西,产品经理和设计都是需要考虑的,相对传统pc设计,移动端能展示的区域比较小。

这个就要求设计出来的产品(后面都简称[产品]),必须要简单明了,突出重点,让用户一目了然,让目标用户一眼就能找到自己要的东西。

简单明了:不能更pc那样堆叠内容,必须让用户能够轻松愉悦的状态,打开产品就能看到我们推送给用户的东西

移动设备尺寸丰富,特别是安卓上面更新一个品牌好几个屏幕尺寸,这要求设计必须流出来足够的空间来做适配,否者东西可能会挤成一团无法阅读。

可能有人会说,对一个技术来说,有必要对产品经理和设计提需求么?

调教产品经理和激射师就这么来劲?

并不是的,在生产line上面,每个步骤的很重要。

一步出错,步步错。

初次进入公司时候,可能会拿到一些很”糟糕“的设计稿,这个可以忍,毕竟之前也没有共同工作过。

但是,之后呢?即使为了自己,也有必要和设计师沟通,告诉他我们的期待,以及这样做的好处。

这是利人利己的事情。

我们:收获一个舒服的工作环境,不必要搞奇奇怪怪的适配。

设计:收获一个好的建议,对他来说也是一个成长。

产品:收获一个良好的作品

及时沟通,及时表达我们的需求,这个非常重要!!

总结上面:

  1. 我们的设计稿需要扁平化、有适配的空间
  2. 及时加入项目(最好在立项到出设计稿过程中能和设计师沟通),提出我们的需求

下面进入技术环境:

首先在页面头部加入这个头部信息:

<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>

它在wap环境下会把页面强制缩放等同设备屏幕可见网页【宽度】

竖屏设计稿

使用rem,根据设计稿的宽度和屏幕的宽度得到缩放比例

思路:我们希望html的字体大小为100px,

手机端默认字体大小为16px,(100%16)*100%等于625%,

假如当前设备网页可见宽度为640:

(( 640/750)*625%=533.3333333333333%

所以设置html的font-size为625%,这里是拿设备的网页可视跨度和设计稿的宽度来做比例后,得到100px缩放后的实际大小,就是默认字体大小的533%

如果我们还有一个期待,如果设备的网页可视宽度大于设计稿的宽度时候,还是期待按照设计稿的大小来,那我们就把拿到的设备网页可视宽度替换为设计稿的宽度

代码如下:

(function() {var designW=750;function setFontSize(k) {document.documentElement.style.fontSize =((((k / designW) * 100) / 16) * 100) + '%';}function initRem() {var W = document.documentElement.clientWidth;var H = document.documentElement.clientHeight;if(W < H) {// console.log("竖屏");W=W>designW?designW:w;setFontSize(W);} else {// console.log("横屏");H=H>designW?designW:H;setFontSize(H);}}window.addEventListener('orientationchange' in window ? 'orientationchange' : 'resize', initRem, false);document.addEventListener('DOMContentLoaded', initRem, false);})();

Css 代码:设计稿上面的10px,写成0.1rem;就可以了,因为1rem等于100

那如果是横屏设计是否可以使用rem么?

不合适

  • 因为横屏需要考虑宽高,而不只是设计稿的宽度和设备网页可视区的宽度
  • rem是依赖html字体的,他是有限制的,移动端字体最小12,设置小于12的值,最终渲染也会是12px,在只考虑宽度比例下问题不大,及时有问题也可以用css缩放来取巧处理。横屏设计下,12px限制带来的问题会无限的放大(只有亲自去试过才知道,这里不举例);
  • 上面说得`12px限制`,是指你给html设置了11px时候,你使用2rem,实际上得到的是12px*2,而不是11px*2

Css变量做适配的好处:

1.不受限字体12px限制

2.同一个页面的html标签可以挂载多个不同的css变量

横屏设计相对竖屏设计需要考虑宽高两个条件限制

  1. 按照宽去计算比例,这个比例
  2. 如果1的比例去计算实际的高如果大于设备网页可见高度的高,那就用高去算比例

另外:

  • 在横竖屏两种情况下需要对内容容器做旋转处理,需要考虑节流(快速旋转手机方向,只处理最后一次)
  • 竖屏下,网页内容的高并不是设备网页可见高度而是设备网页可见宽度
  • input获取焦点,键盘推出后,设备网页可见高度的宽高比变了吗,是否需要做适配

基于以上考虑我提供了一个vue开发的横屏适配包vue-horizontal-screen,这里就不讲述实现了,可以对着以上的需求去看这个包的github代码

react的话可以参考后面从vue-horizontal-screen移植过来的 react-horizontal-screen

在线demo

更新 2022-2-8

因为没有时间分别维护vue和react两个版本,我抽离了核心代码后,把vue和react合并到了同一个库 horizontal-screen-web 并且改成了组件的方式。因为这样可以抹平vue和react的接口差异

再次总结:

1.竖屏使用rem通用方案

2.横屏设计稿,使用css变量通用方案,vue和react横屏可以使用博主提供的第三方包,它的实现代码并不难,也可以自己手写

3.这里的通用方案的意思是:可以像传统开发pc,使用px那样的思路去做布局和适配,思维上不需要作出太大的变化

wap 横屏适配和竖屏适配的通用方案相关推荐

  1. 【Android 屏幕适配】异形屏适配 ② ( 需要异形屏适配情况 | 需要异形屏适配的 Android 系统版本 | 刘海屏状态判定 | 异形屏适配调试 - 华为云调试 )

    文章目录 一.需要异形屏适配情况 1.需要异形屏适配的 Android 系统版本 8.0 2.正常有状态栏的界面竖屏不需要适配 3.正常有状态栏的界面横屏需要适配 4.刘海屏状态判定 二.异形屏适配调 ...

  2. Android开发之强制横屏和强制竖屏

    原文地址:https://blog.csdn.net/qq_37219980/article/details/71194313 强制竖屏设置 1.代码在Activity的onResume方法中添加如下 ...

  3. 有将视频横屏改为竖屏的方法吗?

    在遇到想要将横屏的视频画面改为竖屏的时候,大家都是用什么方法进行操作的呀?下面小编就来教大家一个可以简单操作的方法,有需要的小伙伴们可以看过来哦! 首先给大家看一下小编用这个方法操作出来的效果,可以看 ...

  4. 【Android 屏幕适配】异形屏适配 ① ( 异形屏类型:刘海屏、水滴屏、挖孔屏 | 沉浸式布局刘海屏适配 | 华为手机异形屏适配注意点 )

    文章目录 一.异形屏类型:刘海屏.水滴屏.挖孔屏 二.沉浸式布局刘海屏适配 三.华为手机异形屏适配注意点 屏幕适配参考文档 : 设备兼容性概览 屏幕兼容性概览 支持不同的像素密度 声明受限屏幕支持 异 ...

  5. iOS的横屏(Landscape)与竖屏(Portrait)InterfaceOrientation

    转自:http://www.molotang.com/articles/1530.html 接着上篇写的触摸事件,这次借机会整理下iOS横屏和竖屏的翻转方向支持,即InterfaceOrientati ...

  6. ios中html怎么横屏,iOS如何实现强制转屏、强制横屏和强制竖屏的实例代码

    本文介绍了iOS如何实现强制转屏.强制横屏和强制竖屏的实例代码,分享给大家 今天项目中遇到正在看视频的时候账号被挤,如果当时是横屏的情况下,需要强制竖屏.真头疼,网上找了好多方法,终于解决啦.O(∩_ ...

  7. 关于iphone和ipad横屏竖屏 适配问题

    首先 先在viewWillAppear 里面 注册通知 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; ...

  8. h5锁屏提醒-锁横屏和锁竖屏

    移动端开发,我们一般是只做一套适配,但是拿手机来说,它又分横屏和竖屏:这两种屏幕要求的适配是完全不一样的.当我们只做了其他一种,不想做另外一种的话,屏幕使用提示就很重要了. 比如我们只做了竖屏的适配, ...

  9. Android 屏幕适配之刘海屏适配(notch 适配)

    引言 首先先翻译一下 notch 即 凹痕 的意思,那我们就认为是 "刘海" 就可以了. 目前,市场手机的潮流就是推出 全面屏.齐刘海 的手机,比如现在的华为.oppo .vivo ...

  10. html把横转为竖,爱剪辑将横屏视频转为竖屏教程 爱剪辑视频怎么横竖屏转换

    如果是经常玩抖音.玩快手的用户,应该都发现这么一个现象,就是它们的视频都是竖屏展示的.可是,我们在拍摄视频的时候,往往是没有办法都采用竖屏拍,那么如何把横屏视频剪辑成竖屏?其实,可以用爱剪辑来解决这一 ...

最新文章

  1. IOSUIcontrol事件
  2. mysql Tablespace exists解决
  3. 2019牛客多校第一场
  4. Strut2开发经验总结
  5. upper_bound 和lower_bound彻底搞懂
  6. 关于easyui还有一个问题:easyui的开发者是国人?
  7. Transformer-M:一个能理解2D和3D分子的Transformer
  8. 计算机桌面任务栏为白色,电脑中锁定在任务栏的图标无法正常显示变成白色如何解决...
  9. 斗鱼直播与熊猫直播竞品分析
  10. jquery ui和easy ui联合使用
  11. 瑰珀翠全新伊芙琳玫瑰系列全球首发
  12. The server time zone value ‘乱码‘ is unrecognized or represents more than one time zone.
  13. python和C++
  14. linux 服务器CPU被挖矿的一个解决方法
  15. cudnn下载解压后的文件应该放到CUDA文件中的位置
  16. magical_spider远程采集方案
  17. 国内最美最豪华图书馆!我一定要考上!
  18. 使用librosa进行语音情感识别
  19. 【数据库】SQL Server知识点总结
  20. C 获取时间 之 timeb.h

热门文章

  1. 迅为iTOP-4418开发板Android系统网络测速工具iPerf-TCP测试
  2. jq的模拟点击脚本实践---关于阿里月饼事件的一些思考
  3. 操作系统-------------------内存空间的分配方式(连续分配和非连续分配和虚拟存储技术)
  4. mysql查看列名_MySQL:从查询中获取列名或别名
  5. DataFrame 修改列名
  6. 编译报错【error】dexpreopt.sh:23 exited with status 1
  7. 干货满满的深度强化学习综述(中文)
  8. windows设置定时自动关闭应用
  9. Java类型转换简单运用
  10. 常微分二阶线性齐次微分方程的通解推导