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

谢谢你的浏览!


推荐阅读
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • feat: Enhances Jest Testing Capabilities with Snapshot Support ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 本文详细介绍了如何利用CSS技术对链接下划线进行个性化定制和美化,涵盖了多种实用技巧和方法。通过对CSS属性的灵活运用,可以实现不同风格的下划线效果,提升网页的视觉体验。文中不仅提供了基础的代码示例,还结合实际案例进行了深入解析,帮助读者更好地理解和应用这些技巧。此外,文章还引用了《CSS2.0中文手册》中的相关内容,增加了技术的权威性和实用性。 ... [详细]
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社区 版权所有