热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

挪动端webapp自适应规划探究与总结

1、搅扰多时的题目在这之前做webapp开辟的的时刻,在自顺应方面平常都是宽度经由历程百分比,高度以iPhone6跟iPhone5之间的一个均衡值写死,我们的设想稿都是iPhone

1、搅扰多时的题目

在这之前做web app开辟的的时刻,在自顺应方面平常都是宽度经由历程百分比,高度以iPhone6跟iPhone5之间的一个均衡值写死,我们的设想稿都是iPhone5的640 * 1136规范,所以高度平常取个也许值,种种图标的宽高也是取均衡值写死,然后部份款式经由历程媒体查询来设置,比方背景图的多倍图、基本字体大小、图标宽高。

如许做的弊病很明显:

  1. 做出来的页面在种种手机端看起来的物理大小(高度)是一样的,所以在大屏手时机以为页面稍小,小屏手机页面稍大

  2. 如果要使高度能更好的顺应种种手机屏幕,须要写太多的媒体查询款式,效力低下

  3. 全屏背景图片跟页面元素须要耦应时,元素位置的一定尤其难题(能够须要经由历程百分比去一定元素的横向位置,但一直会有误差)

  4. …

最近在微博上看到流云诸葛总结的一篇文章《从网易与淘宝的font-size思索前端设想稿与工作流》,个中引见到的几种web app适配计划,我们如今的做法恰好是跟拉勾网相似的简朴计划,固然就会有上面我提到的一些题目,末了经由预研和demo测试,我们采取了网易跟淘宝的计划,实在这两者的计划是迥然不同,都是基于rem的适配计划。

2、处理题目标计划

网易跟淘宝的计划引见在上面流云诸葛的文章中已写的很清楚了,发起能够先看看那篇文章再浏览下面我所说的,能够会越发清楚。

(1)计划的简朴引见: 基于rem

条件:页面元素的规划尺寸全都以设想稿为基准等比例设置。

html根节点设置一个基本font-size值,然后页面的一切元素规划均相干于该font-size值采纳rem单元设定。那末基本的font-size值该怎样取呢?

如果经由历程媒体查询设置font-size,只能处理一部份的状况,而且并不能完成适配,因为手机屏幕宽度范例实在太多了,所以font-size的取值要经由历程js盘算,取当前viewport的deviceWidth设想稿的宽比例值,比方:我们的设想稿尺寸都是640px的,iphone5的deviceWidth320px,那末盘算出来的font-size值就是 320 / 640 = 0.5,因为得出的font-size太小,不方便盘算,且有的浏览器能够不兼容太小字号,所以将font-size放大100倍,所以终究盘算出来的font-size为 320 / 640 * 100 = 50(px); 固然,这个值是依据设想稿来盘算的,所以依据盘算划定规矩,下面列出几种罕见设想稿响应的font-size值:

deviceWidth = 320,font-size = 320 / 6.4 = 50px
deviceWidth = 375,font-size = 375 / 6.4 = 58.59375px
deviceWidth = 414,font-size = 414 / 6.4 = 64.6875px
deviceWidth = 500,font-size = 500 / 6.4 = 78.125px

可在script标签加上以下代码

(function () {
document.addEventListener('DOMContentLoaded', function () {
var html = document.documentElement;
var windowWidth = html.clientWidth;
html.style.fOntSize= windowWidth / 6.4 + 'px';
// 等价于html.style.fOntSize= windowWidth / 640 * 100 + 'px';
}, false);
})();
// 这个6.4就是依据设想稿的横向宽度来一定的,如果你的设想稿是750
// 那末 html.style.fOntSize= windowWidth / 7.5 + 'px';

至此,font-size的基本值就一定好了,而且晓得该font-size值是手机deviceWidth跟设想稿的比例值 的 100倍(主要)

(2)那末页面元素该怎样设置宽高、边距…

比方:一个设想稿宽高为140px的图标,左侧距为50px,那末它的css应当如许写

.icon {
width: 1.4rem; /* 像素换算rem:140px / 100 = 1.4rem */
height: 1.4rem;
margin: 0 0 0 .5rem;
}

因为html的font-size是放大了100倍,所以盘算rem时,要用设想稿的现实像素除以100,140px / 100 = 1.4rem; 末了现实的像素大小就会由deviceWidth跟设想稿的横向宽 的 比例 自动盘算出来。

如图iPhone5下面的结果:
《挪动端web app自适应规划探究与总结》

iphone6的结果:
《挪动端web app自适应规划探究与总结》

能够看出来:html的font-size动态依据deviceWidth转变,图标的宽高、边距等也依据font-size动态按比例变化,功德圆满了?不对,置信机灵的你已看到貌似在iPhone6的下有的图标背景错位了。。是的,这暴露出了一个背景运用雪碧图的一个弊病(因为font-size小数点太多,盘算涌现实背景图大小background-size跟背景图位置background-position时浏览器精度不够能够就会涌现位置的误差(我猜的),这个背面还会细致讲处理计划)

到这里,设置宽高、边距等都OK了,接下来…

(3)其他元素的字体大小该怎样设置?

在流云诸葛的文章中讲到,网易跟淘宝的做法都是运用分外的媒体查询设置几种字体大小,比方:

@media screen and (max-width: 320px) {
body{font-size: 14px;}
}
@media screen and (min-width: 321px) and (max-width: 413px) {
body{font-size: 16px;}
}
@media screen and (min-width: 414px) and (max-width: 639px) {
body{font-size: 17px;}
}
@media screen and (min-width: 640px) {
body{font-size: 18px;}
}

可为什么不必rem呢?后往来来往查了一番材料,发明有一种叫做点阵字体的存在(什么是点阵字体),也叫作位图字体,位图我们都晓得,跟矢量图是有区分的,就是放大会隐约,所以点阵字体也是放大会隐约的,如果依据rem设置字体大小,字体味自在缩放,能够就会致使点阵字体隐约,所以须要设定运用几种牢固大小的字体。不过,在一般状况下,体系自带的字体都是矢量字体,所以运用rem为单元是没有题目标,除非你的网页须要用到特别的点阵字体。

总结:如果网页没有用到特别的点阵字体,字体单元运用rem,如果用到了点阵字体,字体须要经由历程媒体查询设置几种牢固大小的字体

(4)关于背景图片的错位题目

上面已发明了,经由历程换算rem设置background-size跟background-position的时刻,在一些手机型号下会涌现背景图错位的状况,但是如果不必rem设置的话,又不能到达适配的目标。(background-size、background-position的rem换算要领跟前面讲的宽高设定一样,都是设想稿尺寸(这时候应当是雪碧图的原始尺寸)除以100倍)

末了经由尝试,得出了几种处理计划:
1、如图(引荐计划):
《挪动端web app自适应规划探究与总结》

图标的款式

.icon {
width: 1.4rem;
height: 1.4rem;
background-image: url(sprite.png);
background-repeat: no-repeat;
background-size: 1.4rem;
}
.icon3 {
background-position: 0 -2.8rem;
}

处理要领,如图:
《挪动端web app自适应规划探究与总结》

《挪动端web app自适应规划探究与总结》

代码以下:

.icon-fix {
background: none;
position: relative;
overflow: hidden;
}
.icon-fix:after {
content: '';
display: block;
width: 10000%;
height: 10000%;
position: absolute;
left: 0;
top: 0;
background-image: url(sprite.png);
background-repeat: no-repeat;
background-size: 140rem;
-webkit-transform-origin: 0 0;
-webkit-transform: scale(.01);
transform-origin: 0 0;
transform: scale(.01);
}
.icon3:after {
background-position: 0 -280rem;
}

一切相干代码 传送门

2、不运用雪碧图,运用单个背景图,这个时刻就不存在background-position的须要,只需设定background-size: contain;即可,如许做的弊病就在于没法运用雪碧图,图片要求增加,适用于页面图标较少的状况

3、运用嵌套img标签,经由历程相对定位模仿background-position,详细请看 responsive-sprites,这类做法须要更多的标签,且img图片只能放图标尺寸大小一样的雪碧图,而且不能经由历程媒体查询运用多倍图

以上3中处理计划第一种最优,固然有些特别状况能够须要按需挑选!

末了发明一篇研讨rem发生小数点像素的题目标文章,感兴趣的可戳 《rem 发生的小数像素题目》

3、写在末了

关于web app的探究之路还很长,以上地道个人在进修历程的一些探究和研讨,一定会有不足和讹夺的处所,只要在不停的实践中去修改。如果人人发明个中有错或不好的处所,迎接提出共同研讨,也迎接人人有更好的计划能够跟我分享研讨!

谢谢你的浏览!


推荐阅读
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
author-avatar
我叫柒薇安2001
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有