移动端页面适配方案

rem适配两种方案——实战篇 用屏幕总宽度/划分等份数=html字体大小1rem=html字体大小页面元素rem计算公式:页面元素的px / html字体大小。 阅读详情

最近有同学问我关于移动端的适配方案,正好在这里总结下,顺便自己也温故一下。

rem是什么?

rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过一个计算的规则是依赖根元素一个是依赖父元素计算。

为什么要使用rem

之前有些适配做法,是通过js动态计算viewport的缩放值(initial-scale)。

例如以屏幕320像素为基准,设置1,那屏幕375像素就是375/320=1.18以此类推。

但直接这样强制页面缩放过于粗暴,会导致页面图片文字失真模糊。

Px是相对固定单位,字号大小直接被定死,所以用户无法根据自己设置的浏览器字号而缩放,em和rem虽然都是相对单位,但em是相对于它的父元素的font-size,页面层级越深,em的换算就越复杂,而rem是直接相对于根元素,这就避开了很多层级关系。移动端新型浏览器对rem的兼容很好,可以放心使用。

通用换算和一些坑

有时我们会看到有些使用rem的页面里会先给页面根元素一个样式:

html {font-size: 62.5%; /10 ÷ 16 × 100% = 62.5%/}
为什么是62.5%?

大多数浏览器的默认字号是16px,因此1rem=16px,这样不方便我们px和rem的换算,假设1rem=10px,那么100px=10rem,25px=0.25rem。这样就好换算很多,于是就有了上面的10/16。

如果是640的设计稿,需要除以2转化为和iphone5屏幕等宽的320。所以设计稿px单位/2/10转为rem。之后再媒体查询设置每个屏幕大小的font-size百分比,页面会根据上面设置的根font-size适配。

看到这里是不是觉得一切很完美?然而,这里面有两个深坑:

1.我看了网上很多关于rem的资料,基本都说浏览器的默认字号就是16px,然后直接定义font-size:62.5%。但是,rem属于css3的属性,有些浏览器的早期版本和一些国内浏览器的默认字号并不是16px,那么上面的10/16换算就不成立,直接给html定义font-size: 62.5%不成立。

2.chrome强制字体最小值为12px,低于12px按12px处理,那上面的1rem=10px就变成1rem=12px,出现偏差(下面给demo)。

解决方案: 将1rem=10px换为1rem=100px(或者其它容易换算的比例值);不要在pc端使用rem。

那么上面的页面根元素样式要改为:

html {font-size: 625%; /100 ÷ 16 × 100% = 625%/}
再用本工厂总结得出的各分辨率媒体查询换算:

@media screen and (min-width:360px) and (max-width:374px) and (orientation:portrait) {
html { font-size: 703%; }
}
@media screen and (min-width:375px) and (max-width:383px) and (orientation:portrait) {
html { font-size: 732.4%; }
}
@media screen and (min-width:384px) and (max-width:399px) and (orientation:portrait) {
html { font-size: 750%; }
}
@media screen and (min-width:400px) and (max-width:413px) and (orientation:portrait) {
html { font-size: 781.25%; }
}
@media screen and (min-width:414px) and (max-width:431px) and (orientation:portrait){
html { font-size: 808.6%; }
}
@media screen and (min-width:432px) and (max-width:479px) and (orientation:portrait){
html { font-size: 843.75%; }
}

至此,坑填完。设计稿px换算直接/100即可得到rem值。

更精准健壮的换算

然而,上面的625%大法除了有兼容性问题,也无法很好地根据不同设计稿精准适配,不是我们的最佳选择。网易和淘宝分别有自己的一套适配方法,适配性也很完美。

网易手机端:

技术分享技术分享技术分享基准值: 可以看到,无论页面以哪种手机比例缩放,body的width都是7.5rem。很明显,目前网易的手机端设计稿是基于iPhone6,750(设计师给的设计稿是物理分辨率,会是我们写样式的逻辑分辨率的两倍,如果给的设计稿是640,那么是基于iPhone5,320),且基准值是100px(750/7.5=100)。这个基准值很关键,后面的css换算,都和这个基准值有关。动态font-size: 我们看到图1、图2、图3的font-size都有根据屏幕大小而动态改变,可以推算出公式:

屏幕宽度/设计稿rem宽度=页面动态font-size值(如:375/7.5=50)

获取到这个值,再赋给html元素的style:

document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5 + ‘px‘;

这样就设置好了每个页面的根fonts-size,因为rem单位是基于根font-size,因此只要确定一种设计稿对应手机的换算,其余屏幕尺寸均可自动适配。

上面我们得出设计稿换算rem的基准值是100,因此只需要把设计稿上的px值除以100即为我们要的rem值。

 Px/100=rem,所以100px=1rem,25px=0.25rem

淘宝手机端: 大名鼎鼎的Flexible

资料引用

大漠:使用Flexible实现手淘H5页面的终端适配

齐神:flexible解读及应用

很多大神包括我们公司同事都有对此适配方案做了解析,所以我这边简单综述:

引入: 直接引用阿里的CDN文件(或下载到本地引入)

<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>

设定: 页面不要设定 。Flexible会自动设定每个屏幕宽度的根font-size、动态viewport、针对Retina屏做的dpr。

换算: 假设拿到的设计稿和上述网易的一样都是750,Flexible会把设计稿分为10份,可以理解为页面width=10rem,即1rem=75px,所以根font-size(基准值)=75px。

之后的css换算rem公式为:

px/75=rem,所以100px=100/75=1.33rem,50px=50/75=0.66rem

上述三种换算方案的步骤和优劣

通用方案
1、设置根font-size:625%(或其它自定的值,但换算规则1rem不能小于12px)

2、通过媒体查询分别设置每个屏幕的根font-size

3、css直接除以2再除以100即可换算为rem。

优:有一定适用性,换算也较为简单。

劣:有兼容性的坑,对不同手机适配不是非常精准;需要设置多个媒体查询来适应不同手机,单某款手机尺寸不在设置范围之内,会导致无法适配。

网易方案
1、拿到设计稿除以100,得到宽度rem值

2、通过给html的style设置font-size,把1里面得到的宽度rem值代入x document.documentElement.style.fontSize = document.documentElement.clientWidth / x + ‘px‘;

3、设计稿px/100即可换算为rem

优:通过动态根font-size来做适配,基本无兼容性问题,适配较为精准,换算简便。

劣:无viewport缩放,且针对iPhone的Retina屏没有做适配,导致对一些手机的适配不是很到位。

手淘方案
1、拿到设计稿除以10,得到font-size基准值

2、引入flexible

3、不要设置meta的viewport缩放值

4、设计稿px/ font-size基准值,即可换算为rem

优:通过动态根font-size、viewpor、dpr来做适配,无兼容性问题,适配精准。

引用链接
http://www.mamicode.com/info-detail-1816919.html

移动端h5自适应rem适配最佳方案 最佳移动端h5自适应rem适配方案,灵活主流做法 阅读详情

相关推荐

移动WEB开发之rem适配布局

我们要做的,就是确定好我们当前设备的html 文字大小就可以了,比如当前设计稿是 750px, 那么我们只需要把 html 文字大小设置为 75px(750px / 10) 就可以,里面页面元素rem值: 页面元素的px 值 / 75,剩余的,让flexible.js来去算。它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,Less 可以让我们用更少的代码做更多的事情。

weixin_50643611的博客 1315

前端页面适配的rem换算

为什么要使用rem 之前有些适配做法,是通过js动态计算viewport的缩放值(initial-scale)。 例如以屏幕320像素为基准,设置1,那屏幕375像素就是375/320=1.18以此类推。 但直接这样强制页面缩放过于粗暴,会导致页面图片文字失真模糊。 Px是相对固定单位,字号大小直接被定死,所以用户无法根据自己设置的浏览器字号而缩放,em和rem虽然都...

dengefu4541的博客 4356

深入理解HTTPS:从SSLHandshakeException到证书链验证的完整解析

本文深入解析了HTTPS握手过程中常见的SSLHandshakeException异常,特别是由证书链验证失败引发的CertPathValidatorException。文章从TLS握手流程、证书链验证的数学原理出发,详细剖析了Java中TrustManager的工作机制,并提供了针对证书链不完整、自签名证书等典型问题的系统化排查流程与实战解决方案。

weixin_29313423的博客 231

rem与px换算的计算方式

前言 这段时间的小项目中算是真正意义上使用了rem来进行移动端的页面布局,项目结束了我反思了一下之前的对于rem的使用...原来我以前对rem用法完全是在搞笑啊!!结合这次这个小项目,我觉得我也有必要对rem布局以及用法进行一次总结。 ps.文笔可能不太好... 1.什么是rem 来自于鹅厂ISUX团队的解释如下:rem(fontsizeoftherootelement)是指相...

weixin_30335353的博客 2245

maya权重拷贝一对一,一对多

是不是有时候盔甲很多很碎头很大,用代理一个个拷贝很麻烦吧 用下面代码直接运行进行一对多或者一对一拷贝 第一个先选择参考物体,加选其他一堆有的没的有权重或没权重的物体执行一键拷贝,就可以啦 以下是源码送上,带走吧 ------------------------ #! -*- coding:utf -8 -*- #author:liubingdong #date:20...

weixin_30852367的博客 1532

【题解】【中国大学MOOC】(北京大学)人工智能与信息社会考试——期末考试

1.在Alpha-Beta剪枝算法中,我们把一个结点可能取值的上界记作____值,下界记作____值。 编号 选项 A 以上都不对 B Beta,Alpha C Alpha,Beta D Max,Min 2.属于非完全信息博弈的游戏是 编号 选项 A 围棋 B 井字棋 C 军棋 D 黑白棋 3.图中的剪枝过程称为____剪枝 ...

葑鈊丶 1万+

【移动端】移动端页面适配方案

前言 以下文章是在设计稿尺寸为750 * 1340的基础上展开讨论的,如需参考,须根据实际尺寸作出相应更改。 一、使用rem适配的方案 (一)什么是rem 这是MDN上的解释: 这个单位代表根元素的 font-size 大小(例如 元素的font-size)。当用在根元素的font-size上面时 ,它代表了它的初始值 也就是说,rem单位取值的大小和根元素html的font-size取值直...

Liz's blog hut. 1470

【Unity】Unity性能分析解决方案——UPR

由Unity中国团队提供的一套性能优化解决方案,其是一系列性能工具的集合,并可将收集的数据进行可视化。

Davidorzs的博客 1008

移动端Web页面适配方案(整理版)

@(概述)[基本概念|百分比|rem|vw/vh|响应式设计] 移动端web页面的开发,由于手机屏幕尺寸、分辨率不同,或者需要考虑横竖屏问题,为了使得web页面在不同移动设备上具有相适应的展示效果,需要在开发过程中使用合理的适配方案来解决这个问题。 早期网页设计采用静态布局,通过<meta>标签中的applicable-device应用设备标识识别移动设备,即<meta name = 'applicable-device' content = 'mobile'>,在<meta&

s_156的博客 8360

用Python+NumPy手把手实现分数阶傅里叶变换(FRFT),搞定线性调频信号分析

本文详细介绍了如何使用Python和NumPy实现分数阶傅里叶变换(FRFT),特别针对线性调频信号(Chirp信号)分析。通过从零开始的代码实现和可视化案例,展示了FRFT在时变信号处理中的强大能力,帮助工程师和研究人员高效分析频率随时间变化的信号。

weixin_29062823的博客 218

OpenCV图像去畸变实战指南:从原理到参数调优(附完整代码与效果对比)

本文深入解析了OpenCV图像去畸变的原理与实战技巧,详细对比了标准透视、鱼眼及全能型omnidir三种校正函数的核心参数调优方法。通过分析alpha、balance、centerX/Y及focalScale四大参数对输出效果的影响,并结合完整代码与效果对比图,帮助开发者精准校正镜头畸变,提升计算机视觉任务精度。

weixin_29046611的博客 341

移动端Web页面适配方案

移动端Web页面,即常说的H5页面、手机页面、webview页面等。手机设备屏幕尺寸不一,本文针对移动端设备的页面,总结出在设计与前端实现上如何更好地适配不同屏幕宽度的移动设备。全文阅读请见:移动端Web页面适配方案...

u012996572的博客 743

生成模型实战 | ProGAN详解与实现

Progressive GAN (ProGAN) 是一种通过渐进式增长网络结构来生成高分辨率、高保真图像的技术。传统 GAN 难以直接生成超过 256x256 分辨率的图像,而 ProGAN 创新性地从低分辨率开始训练生成器和判别器,逐步添加网络层以提高分辨率,直至达到1024x1024。该方法结合了像素归一化、小批次统计信息和均衡化学习率等关键技术,并使用 WGAN-GP 损失函数确保训练稳定性。ProGAN 是首个能生成1024x1024高保真人脸图像的模型,但其训练耗时较长,且对计算资源要求较高。

盼小辉丶的博客 1435

CSS-移动端页面布局的适配方案总结

占坑,待续。。。 使用Flexible实现手淘H5页面的终端适配 https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html 再聊移动端页面的适配 https://www.w3cplus.com/css/vw-for-layout.html 如何在Vue项目中使用vw实现移动端适配 https://www.w3cp...

BigKongfuPanda的博客 2849

手把手教你学simulink(16.10)-- 基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目

基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目的详细实例介绍。这个项目将重点放在IIR滤波器的设计、实现和仿真上,帮助你理解和应用IIR滤波器在信号处理中的作用。

MHD0815的博客 706

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

移动端页面适配方案及原理

最近要接一个移动端的需求。 类似歌曲排行榜的H5页。 本人未雨绸缪,学习一波移动端适配方案。 0. 移动端 vs PC端区别 1. 页面的三个视窗和缩放 1.1 layout viewport和visual viewport: 1.2 ideal viewport: 1.3 页面的缩放 2. 移动端适配 2.1 使用meta标签控制viewport 0. ...

章鱼小丸子 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

PC端、移动端页面适配方案

  前言   页面自适应PC端、移动端大体上可以分为两种:   1、在同一个页面进行自适应布局,通常使用CSS3@media媒体查询器实现   2、两套页面,在后端进行统一适配,根据不同的浏览器UA返回对应的页面   本文记录在java后端进行PC端、移动端页面适配的方案   工程结构   想要实现后端统一适配,首先要规范好工程结构   后端代码,跟之前差不多,响应的...

a21700790yan的博客 5535

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

移动端H5页面高清多屏适配方案

背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿。 对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范往往会遵循以下两点: 1)首先,选取一款手机的屏幕宽高作为基准(以前是iPhone4的320×480,现在更多的是iphone6的375×6...

weixin_34138139的博客 113
上一篇: css BFC 原理
下一篇: JS 继承
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值