移动端适配方案小结

简介:

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


流式布局

流式布局是一套典型的弹性布局,它的关键特点是:页面中的关键(布局)元素的宽高和位置都不会变化,只有容器元素在做拉伸变化,简单来说就是宽度的拉伸,快级盒子默认就能适应容器的宽度。这种布局对于页面简单的web app是足够了,比如拉钩的页面:

1

2

从上面的图片我们可以看到:

  • 顶部与底部的bar不管分辨率怎么变,它的高度和位置都不变
  • 中间每条招聘信息不管分辨率怎么变,招聘公司的图标等信息都位于条目的左边,薪资都位于右边,且高度也没有变化。

因此,对于这类简单的web app页面,我们如果要使用流式布局的话,只需要记住一个开发原则就可以了:文字流式、控件弹性,图片有需要等比缩放。 这种布局适配屏幕尺寸大于设计稿的设备是没有问题的,但是如果对于屏幕分辨率小于设计稿的设备,那么容器盒子里的内容可能放不小,需要媒体查询单独适配下。

rem布局

rem布局,开发过web app页面的童鞋,应该都很熟悉了。当分辨率变化的时候,我们通过js来改变html的font-size,然后我们就可以使用rem代替px了。

我们可以看到淘宝的页面在不同的屏幕下,页面有明显的等比变化。

3

4

直接上操作:

  • 先拿设计稿竖着的横向分辨率除以100(这个基数是为了计算方便而自己设定的,或者postcss-plugin-px2rem自动转换)得到body元素的宽度
  • 盒子高度为210px,写样式的时候css应该这么写:height: 2.1rem
  • 在header标签中加入,下面代码
var deviceWidth = document.documentElement.clientWidth
// 大于设计稿的横向分辨率时,始终按设计稿的宽来
if(deviceWidth > 750) deviceWidth = 750;

document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px';

这里写这么多,其实有个更好的方案,那就是

  font-size: 100vw / 750 * 100;
}

某些情况font-size不能使用rem,需要额外的媒介查询单独设置

    .m-navlist{font-size:15px}
}

@media screen and (min-width:321px) and (max-width:400px){
    .m-navlist{font-size:16px}
}

@media screen and (min-width:400px){
    .m-navlist{font-size:18px}
}

flexible

flexible实现web app布局的前提是viewport的scale根据devicePixelRatio动态设置:

  • devicePixelRatio为2的时候,scale为0.5
  • devicePixelRatio为3的时候,scale为0.33333

这样设好了之后,页面的大小和设计稿上保持一致了,以设计稿为750为例,iphone6的devicePixelRatio为2,所以此时它的布局视口就是750px,我们就可以设定一个基数把页面尺寸转成rem了

var scale = 1 / window.devicePixelRatio;
document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale='+scale+',maximum-scale='+scale+',minimum-scale='+scale+',user-scalable=no')

// 动态计算html的font-size
var baseFontSize = document.documentElement.clientWidth / 10;
document.documentElement.style.fontSize =  baseFontSize + 'px'
// 这样设置后,布局的时候css 的rem计算公式: css尺寸=设计稿标注尺寸/baseFontSize

less 函数转换rem

.px2rem(@name,@px) {
  @{name}: @px / @baseFontSize * 1rem
}

scale的处理

    var isAndroid = win.navigator.appVersion.match(/android/gi);
    var isIPhone = win.navigator.appVersion.match(/iphone/gi);
    var devicePixelRatio = win.devicePixelRatio;
    if (isIPhone) {
        // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案
        if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {                
            dpr = 3;
        } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){
            dpr = 2;
        } else {
            dpr = 1;
        }
    } else {
        // 其他设备下,仍旧使用1倍的方案
        dpr = 1;
    }
    scale = 1 / dpr;
}

对安卓设备默认按dpr为1处理,而ios设备这样设置后,可以使用布局视口的宽度等于物理的分辨率,这意味着布局视口中的像素单位是和物理像素一一对应的,解决了 1px border 问题和高清图片的问题。另外淘宝的方案将 body 的 width 设为 100% 并对 overflow 进行 hidden,这个 100% width 会计算为布局视口的宽,也是 10rem,那么 body 内布局超出 10rem 的元素不会导致布局视口出现滚动条。

字体处理

字体使用px单位,需要对不同的视口宽度(dpr)的设备适配,flexible是将dpr 数值设置为 html 的 data-dpr 属性,通过css选择器选择不同 dpr 设备下的元素

    width: 1rem; 
    height: 0.4rem;
    font-size: 12px; // 默认写上dpr为1的fontSize
}
[data-dpr="2"] div {
    font-size: 24px;
}
[data-dpr="3"] div {
    font-size: 36px;
}

less 简写方案

  font-size: @fontSize
  [data-dpr="2"] & {
    font-size: @fontSize * 2;
  }

  [data-dpr="3"] & {
    font-size: @fontSize * 3;
  }
}

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-04-17
本文作者:前端小闲鱼
本文来自:“掘金”,了解相关信息可以关注“掘金”

相关文章
|
10月前
|
机器学习/深度学习 人工智能 搜索推荐
用户画像系统技术实现原理深度解析
本文摒弃空泛AI术语,聚焦用户画像系统落地实践,详解“图像采集→基础识别→特征提取→数据关联”全链路。复用现有视觉分析能力,通过设备兼容、模型优化、数据绑定等手段,实现低成本、高精度、结构化画像生成,助力技术从业者快速掌握真实可用的视觉智能应用方案。
736 1
|
PHP Go
CTF---Web入门第二题 上传绕过
上传绕过分值:10 来源: Justatest 难度:易 参与人数:5847人 Get Flag:2272人 答题人数:2345人 解题通过率:97% bypass the upload 格式:flag{} 解题链接:http://ctf5.
2355 0
|
8天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
3734 37
|
8天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
3303 10
|
3天前
|
云安全 人工智能 安全
|
9天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1705 6
|
9天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
2036 4
|
云安全 安全 网络安全