移动端自适应解决方案

移动端自适应解决方案

谈到移动端自适应这个话题,如果要真正做好,那应该说是前端开发中的一个比较难以掌握的知识点了。甚至在很多项目中一些涉及到移动端自适应的特殊需求被当作不可实现而砍掉,以及在部份机型下则默认为不处理。今天,我们就来看看,我们应该如何来做好自适应?以及移动端乃至所有设备终端下的自适应至底可以做到什么极致?

一、什么是移动端自适应?

我们先来简单讲述一下什么是移动端自适应以及为什么前端要做移动端自适应。先看图片演示,如下图所示各种移动设备尺寸各有不同,即使是在同一设备,不同APP内打开也因为有的APP有顶栏或底栏,而有些APP没有顶栏或底栏,顶栏或底栏的尺寸也不同,所以页面的可视区也大小形状各不相同。正因为有这些千奇百怪的设备与应用程序,所以才需要我们的一套网页代码可以适应任何尺寸的设备或应用。这就是我们平时所说的移动端自适应。

1_1577331485743_fa9.gif

二、为什么要做移动端自适应?

上面讲到,因为网页所处的设备与应用的环境的可视区尺寸不同,所以我们要让一套代码适应各种环境。这就是为什么我们要做移动端自适应的原因。如果对这个概念仍然不是很清楚,我们可以先看一下如果不做自适应会是什么样子?

2_1577330881889_314.gif

如上图所示,当网页没有做好自适应时,不仅在某些设备中内容显示不全,而且连按钮都看不到交互更是无从谈起。这就是为什么我们要做好移动端自适应的原因。下面我们来看看如果上面所展示的网页做好了自适应,会是如何?

3_1577330904724_162.gif

三、如何做移动端自适应?

说到做移动端自适应,可能很多人都会想到淘宝的flexible.js移动端自适应方案。这几乎成为行业通用方案。但我在这里我想推荐另一个自适应方案@fekit/mc-ratio。如果你仅仅只是想做个基础的移动端自适应并且不打算追求极致的话。那你可以用flexible.js也可以用@fekit/mc-ratio。但是如果你想要的并不是一般的移动端自适应方案,一个可以达到极致体验的移动端解决方案那就请选择@fekit/mc-ratio。至于原因和效果,在下面的演示示你会知道。

现在我们将一步步从基础的移动端自适应讲到各种复杂的自适应需求。如果你对以下述语如果看不明白没关系,因为我一时想不到更准确的语来描述。查是看动态演示图片就可以理解啦!(本文仅提供各种场景需求下的自适应解决方案的演示效果和基本的代码说明,不做深入的代码教学体代码请大家移步到NPM或GIT文档查看技术API文档,插件将在文章结尾提供链接)

第一种场景:基础自适应,仅对宽度做自适应计算。高度不自适应,一般适用于有滚动条的页面。这也是移动态最常见的通用做法。(flexible.js也仅仅能做到宽度自适应计算)

import mcRatio from '@fekit/mc-ratio';
// 基本的自适应
mcRatio({
        size:  [750, 1334],  // 设计稿的尺寸,无论考虑设计稿是几倍图,按设计稿尺寸设置即可
});
4_1577332845488_ab6.gif

第二种场景:宽高双向自适应计算。当开启宽度高度双向自适应并设定可见区必需可见内容的尺寸时,无论尺寸大小。必需可见的内容按比例缩放保持在窗口区一定可见。见下图所示,设定的必需可见尺寸范围为750*1334。那无论窗口多大或多小这个区域都能保持可见的。

// 整个页面开启了双向自适应,宽高按比例缩放
mcRatio({
    size:  [750, 1334],  // 设计稿的尺寸
    full: true   // 开启双向自适应
});
![6_1577344328671_f80.gif](https://upload-images.jianshu.io/upload_images/3405243-666532417e3d8a3e.gif?imageMogr2/auto-orient/strip)

第三种场景:全屏宽高双向自适应+%单位做额外的全屏自适应增强,所有内容总是在一屏放下。无论宽高尺寸如何变化,也不论是横屏还是竖屏,总是保持全屏内容可见,并保持比例不变。同时又让一些额外的元素(比如说背景)总是充满整个屏幕。

// 主体内容开启了双向自适应,宽高按比例缩放
mcRatio({
    size:  [750, 1334],  // 设计稿的尺寸
    full: true   // 开启双向自适应
});
// 背景使用%做额外处理保持充满全屏
6_1577344328671_f80.gif

第四种场景:滚屏自适应+灵活阀值的宽高双向自适应计算,如下面两图所示,左边的宽高值比例是750/1334(弹框上面空余比较多) ,而右边的宽高值比例是750/1050(宽高值比例阀值设置的仅本弹框高一点,从而达到在小屏中的空间利用率最高)。这个高度阀值可以灵活运用。从而达到最佳体验。

左边的:

// 左边的
mcRatio({
    el: document.getElementById('layer'),   // 要缩放的元素(弹框)
    size:  [750, 1334],  // 窗口宽高比,高度小于1334时开始缩放高度。
    full: true   // 开启双向自适应
});

右边的:

// 右边的
mcRatio({
    el: document.getElementById('layer'),   // 要缩放的元素(弹框)
    size:  [750, 1050],  // 当窗口宽高比,高度小于1050时才开始缩放高度。
    full: true   // 开启双向自适应
});
8_1577428067288_9ff.gif

9_1577428091603_b52.gif

第五种场景:全局自适应+局部自适应多重自适应计算方案,如下图所示,页面仅根据宽度自适应,高度滚动不用做自适应,但是部份元素(比如下图所示的弹框)又脱离全局自适应可以独立的进行宽高双向自适应。这在众多项目中都非常有用。【推荐,成本性价比最高的方案】

// 全局的
mcRatio({
    size:  [750, 1050],  // 当窗口宽高比,高度小于1050时才开始缩放高度。
    full: flase   // 不开启双向自适应
});

// 局部的(弹框的)
mcRatio({
    el: document.getElementById('layer'),   // 不设置时默认为全局
    size:  [750, 1050],  // 当窗口宽高比,高度小于1050时才开始缩放高度。
    full: true   // 开启双向自适应
});
7_1577426879900_b5a (1).gif

第六种场景:基础自适应,通过%单位或样式做一些自适应增强可以做到全屏无滚动条,但是对设计与前端技术有双重高要求,可能需要前端懂设计并且懂得无界设计理念。(无界设计是指设计与开发时需要考虑到在任何尺寸下的形态及自适应过渡)

四、自适应解决方案@fekit/mc-ratio

看过上面从基本到复杂的移动端自适应场景需求与演示,现在我正式向大家推荐@fekit/mc-ratio,这个插件可以帮助你做到上面所演示的各种简单或复杂场景下的自适应。是一套可以吊打淘宝的flexible.js方案的自适应解决方案。

NPM: https://www.npmjs.com/package/@fekit/mc-ratio

GIT: https://gitlab.com/fekits/mc-ratio

如果在使用过程中遇到任何问题,可以留言交流,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268