wap 横屏适配和竖屏适配的通用方案
话题起因:
这个话题应该能聊的东西挺多的,从16年做手机端开始就研究,也写了两篇博客来记录过(但是受限于但是的经验和认知,现在看起来不是特别清晰)。
为什么今天会继续这个话题呢,在做了reactnative和之前小游戏横屏页面后,我觉得有必要总结一下。
本篇博客,最终针对wap横屏和竖屏给出两个通用的适配方案,rn上面可能实现方式和web的不大一样,但是思路逻辑是一样的。
从生产流程说起:
从生产流程来考虑,适配这个东西,产品经理和设计都是需要考虑的,相对传统pc设计,移动端能展示的区域比较小。
这个就要求设计出来的产品(后面都简称[产品]),必须要简单明了,突出重点,让用户一目了然,让目标用户一眼就能找到自己要的东西。
简单明了:不能更pc那样堆叠内容,必须让用户能够轻松愉悦的状态,打开产品就能看到我们推送给用户的东西
移动设备尺寸丰富,特别是安卓上面更新一个品牌好几个屏幕尺寸,这要求设计必须流出来足够的空间来做适配,否者东西可能会挤成一团无法阅读。
可能有人会说,对一个技术来说,有必要对产品经理和设计提需求么?
调教产品经理和激射师就这么来劲?
并不是的,在生产line上面,每个步骤的很重要。
一步出错,步步错。
初次进入公司时候,可能会拿到一些很”糟糕“的设计稿,这个可以忍,毕竟之前也没有共同工作过。
但是,之后呢?即使为了自己,也有必要和设计师沟通,告诉他我们的期待,以及这样做的好处。
这是利人利己的事情。
我们:收获一个舒服的工作环境,不必要搞奇奇怪怪的适配。
设计:收获一个好的建议,对他来说也是一个成长。
产品:收获一个良好的作品
及时沟通,及时表达我们的需求,这个非常重要!!
总结上面:
- 我们的设计稿需要扁平化、有适配的空间
- 及时加入项目(最好在立项到出设计稿过程中能和设计师沟通),提出我们的需求
下面进入技术环境:
首先在页面头部加入这个头部信息:
<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的比例去计算实际的高如果大于设备网页可见高度的高,那就用高去算比例
另外:
- 在横竖屏两种情况下需要对内容容器做旋转处理,需要考虑节流(快速旋转手机方向,只处理最后一次)
- 竖屏下,网页内容的高并不是设备网页可见高度而是设备网页可见宽度
- 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 横屏适配和竖屏适配的通用方案相关推荐
- 【Android 屏幕适配】异形屏适配 ② ( 需要异形屏适配情况 | 需要异形屏适配的 Android 系统版本 | 刘海屏状态判定 | 异形屏适配调试 - 华为云调试 )
文章目录 一.需要异形屏适配情况 1.需要异形屏适配的 Android 系统版本 8.0 2.正常有状态栏的界面竖屏不需要适配 3.正常有状态栏的界面横屏需要适配 4.刘海屏状态判定 二.异形屏适配调 ...
- Android开发之强制横屏和强制竖屏
原文地址:https://blog.csdn.net/qq_37219980/article/details/71194313 强制竖屏设置 1.代码在Activity的onResume方法中添加如下 ...
- 有将视频横屏改为竖屏的方法吗?
在遇到想要将横屏的视频画面改为竖屏的时候,大家都是用什么方法进行操作的呀?下面小编就来教大家一个可以简单操作的方法,有需要的小伙伴们可以看过来哦! 首先给大家看一下小编用这个方法操作出来的效果,可以看 ...
- 【Android 屏幕适配】异形屏适配 ① ( 异形屏类型:刘海屏、水滴屏、挖孔屏 | 沉浸式布局刘海屏适配 | 华为手机异形屏适配注意点 )
文章目录 一.异形屏类型:刘海屏.水滴屏.挖孔屏 二.沉浸式布局刘海屏适配 三.华为手机异形屏适配注意点 屏幕适配参考文档 : 设备兼容性概览 屏幕兼容性概览 支持不同的像素密度 声明受限屏幕支持 异 ...
- iOS的横屏(Landscape)与竖屏(Portrait)InterfaceOrientation
转自:http://www.molotang.com/articles/1530.html 接着上篇写的触摸事件,这次借机会整理下iOS横屏和竖屏的翻转方向支持,即InterfaceOrientati ...
- ios中html怎么横屏,iOS如何实现强制转屏、强制横屏和强制竖屏的实例代码
本文介绍了iOS如何实现强制转屏.强制横屏和强制竖屏的实例代码,分享给大家 今天项目中遇到正在看视频的时候账号被挤,如果当时是横屏的情况下,需要强制竖屏.真头疼,网上找了好多方法,终于解决啦.O(∩_ ...
- 关于iphone和ipad横屏竖屏 适配问题
首先 先在viewWillAppear 里面 注册通知 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; ...
- h5锁屏提醒-锁横屏和锁竖屏
移动端开发,我们一般是只做一套适配,但是拿手机来说,它又分横屏和竖屏:这两种屏幕要求的适配是完全不一样的.当我们只做了其他一种,不想做另外一种的话,屏幕使用提示就很重要了. 比如我们只做了竖屏的适配, ...
- Android 屏幕适配之刘海屏适配(notch 适配)
引言 首先先翻译一下 notch 即 凹痕 的意思,那我们就认为是 "刘海" 就可以了. 目前,市场手机的潮流就是推出 全面屏.齐刘海 的手机,比如现在的华为.oppo .vivo ...
- html把横转为竖,爱剪辑将横屏视频转为竖屏教程 爱剪辑视频怎么横竖屏转换
如果是经常玩抖音.玩快手的用户,应该都发现这么一个现象,就是它们的视频都是竖屏展示的.可是,我们在拍摄视频的时候,往往是没有办法都采用竖屏拍,那么如何把横屏视频剪辑成竖屏?其实,可以用爱剪辑来解决这一 ...
最新文章
- IOSUIcontrol事件
- mysql Tablespace exists解决
- 2019牛客多校第一场
- Strut2开发经验总结
- upper_bound 和lower_bound彻底搞懂
- 关于easyui还有一个问题:easyui的开发者是国人?
- Transformer-M:一个能理解2D和3D分子的Transformer
- 计算机桌面任务栏为白色,电脑中锁定在任务栏的图标无法正常显示变成白色如何解决...
- 斗鱼直播与熊猫直播竞品分析
- jquery ui和easy ui联合使用
- 瑰珀翠全新伊芙琳玫瑰系列全球首发
- The server time zone value ‘乱码‘ is unrecognized or represents more than one time zone.
- python和C++
- linux 服务器CPU被挖矿的一个解决方法
- cudnn下载解压后的文件应该放到CUDA文件中的位置
- magical_spider远程采集方案
- 国内最美最豪华图书馆!我一定要考上!
- 使用librosa进行语音情感识别
- 【数据库】SQL Server知识点总结
- C 获取时间 之 timeb.h
热门文章
- 迅为iTOP-4418开发板Android系统网络测速工具iPerf-TCP测试
- jq的模拟点击脚本实践---关于阿里月饼事件的一些思考
- 操作系统-------------------内存空间的分配方式(连续分配和非连续分配和虚拟存储技术)
- mysql查看列名_MySQL:从查询中获取列名或别名
- DataFrame 修改列名
- 编译报错【error】dexpreopt.sh:23 exited with status 1
- 干货满满的深度强化学习综述(中文)
- windows设置定时自动关闭应用
- Java类型转换简单运用
- 常微分二阶线性齐次微分方程的通解推导