移动端适配理解收集

移动端相应式测试网站:http://kuapingce.com/

http://www.cnblogs.com/Charliexie/p/6900640.html

https://segmentfault.com/a/1190000008767416

移动前端开发之viewport的深入理解

https://www.cnblogs.com/2050/p/3877280.html

http://www.jianshu.com/p/84c5cb3a485a

一些基本概念

视窗viewport

物理像素

设备像素,它是显示设备中的一个最微小的物理部件。每个像素可以根据操作系统设置自己的颜色和亮度。
对于前端来说:假设设计稿为750px。如果这个设备正好能完整显示750px宽度的设计稿。那么设备像素或者称物理像素就是750px。但是可能这个设备的实际宽度就375px。

设备独立像素

也称密度无关像素。可以认为是计算机坐标系中的一个点,这个点代表一个可以由程序使用的虚拟像素(比如css像素),然后由相关系统转换为物理像素。
对于前端来说:比如ip6的设备独立像素是375px

css像素

css像素是一个抽象的单位。主要用在浏览器上。
对于前端来说:设计稿多少像素就是多少像素。

屏幕密度

指一个设备表面上存在的像素数量。一般是用一英寸有多少像素来计算(PPI)

设备像素比(device pixel ratio,dpr)

设备像素比 = 物理像素/设备独立像素
比如,iphone6的物理像素是750,设备独立像素是375,那么它的dpr是2

在javascript中,可以通过window.devicePixelRatio获取当前设备的dpr
在css中,可以通过-webkit-device-pixel-ratio,-webkit-min-device-pixel-ratio,-webkit-max-device-pixel-ratio来进行媒体查询

柠檬俱乐部前端适配方案

以iPhone6为处理标准。
视觉稿的宽度为750px
把根元素html的font-size设置为50px,这样1rem=50px(设为50是为了便于计算)
html{font-size:50px;}
那么页面的宽度为15rem
以这样的规则去计算页面各元素的宽高
比如一个图片的宽高为100*100
那么样式写为

img{width:2rem; height:2rem;}

即以iphone6为基准计算出各元素的rem。

前端适配

关于字体大小的处理,用了以设备独立像素为判断准则的媒体查询

@media screen and (min-width:320px) {
html {
  font-size: 21.33px
}
body {
  font-size: 12px
}
}

@media screen and (min-width:360px) {
html {
  font-size: 24px
}
body {
  font-size: 12px
}
}

@media screen and (min-width:375px) {
html {
  font-size: 25px
}
body {
  font-size: 12px
}
}

@media screen and (min-width:384px) {
html {
  font-size: 25.6px
}
body {
  font-size: 14px
}
}

@media screen and (min-width:400px) {
html {
  font-size: 26.67px
}
body {
  font-size: 14px
}
}

@media screen and (min-width:414px) {
html {
  font-size: 27.6px
}
body {
  font-size: 14px
}
}

@media screen and (min-width:424px) {
html {
  font-size: 28.27px
}
body {
  font-size: 14px
}
}

@media screen and (min-width:480px) {
html {
  font-size: 32px
}
body {
  font-size: 15.36px
}
}

@media screen and (min-width:540px) {
html {
  font-size: 36px
}
body {
   font-size: 17.28px
}
}

@media screen and (min-width:720px) {
html {
  font-size: 48px
}
body {
  font-size: 23.04px
}
}

@media screen and (min-width:750px) {
html {
  font-size: 50px
}
body {
  font-size: 24px
}
}

在以上媒体查询处理中,对应宽度下的根元素html都设置了不一样的font-size
比如当width为550px的时候,font-size为36px。那么在这样的情况下,刚刚在上面举例的那个img元素在页面宽度为550px的情况下显示出来的真是宽度应该是72px。
这个方案里,处理方式与dpr无关
这个方案的缺点是,用媒体查询去决定html的font-size,在这样的情况下,计算是不精确的,只能保证大体上按比例正常显示页面。这样并不是完全按照以iphone6为基准的按比例计算。
比如,550px页面宽度的时候,font-size,如果按照比例来说应该是50/750*550约等于36.67
600px页面宽度的时候,font-size应该为40px
而按照这套方案来看页面宽度为540px至719px的时候font-size都为36px
这只能保证在某范围内大致的展示,并不精确,而这个大致的值的选取也是各有各的看法。
所以,以上代码中给出的11个范围下的font-size不一定是合适的,这11个width范围也不一定合适,实际有可能不需要这么多,所以找出这些个范围,以及每个范围最合适的font-size也很麻烦。

网易的适配方案

首先网易使用的是640px的设计稿
应该是以iphone4或者iphone5为基准来设计的
网易用来算rem的基准是100
所以当宽度是640px=6.4rem

网易的适配方案中,动态计算了html的font-size
deviceWidth=320,font-size=320/6.4=50px---即
320/640*100pxdeviceWidth=375,
font-size=375/6.4=58.5975px
以此类推的计算
通过document.documentElement.clientWidth取得deviceWidth,然后动态计算html的font-size

如果采用这种方法,注意

<meta name="viewport" content="initial-scale=1,maximum-scale=1, minimum-scale=1">

因为这个方法与dpr无关,只是根据设备独立像素来计算了当前的基准font-size

lib-flxible 前端开发终端适配方案--手淘的适配方案

手淘的lib-flexible库

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

实现思路
执行这个js后,会在html(也就是document.documentElement)上增加一个data-dpr属性,以及font-size样式。页面初始时会给meta的viewport动态的给定scale

之后页面中的元素,都可以用rem单位来设置。html上的font-size就是rem的基准像素。

flexible将设计稿分成100份,即100a,10a=1rem。
比如,页面宽度为750px,那么一份为75px,1rem=75px。
这样将html的样式设置为

<html style=‘font-size:75px;‘>

font-size的计算方法:根元素html的font-size的计算方式是物理像素/10。

所以它的计算方式是与dpr有关,也就能比较精确的计算出当前宽度下的根元素html的font-size。能保证比较精确的按比例去展示页面。
比如iphone 6 plus,其dpr为3,设备独立像素为414,所以,在iphone 6 plus下,html的font-size应该为,414*3/10=124.2px

字体大小不用rem,而是根据dpr来设置px

div{font-size:12px;}
[data-dpr=‘2‘]div{font-size:24px;}
[data-dpr=‘3‘]div{font-size:36px;}

如果在,meta viewport中手动设置了initial-dpr,那么不管js获取到的dpr是多少,都会强制认为dpr是手动设置的值
所以不建议手动设置dpr的值

切图(这里指的图真的是图,需要被缩放的)的时候,要放大1.5倍切,因为现在市面上也有不少像魅蓝note这种超高清屏幕,devicePixelRatio已经达到3了,这个切图保证在所有设备都清晰显示。

作者:SuperSnail
链接:http://www.jianshu.com/p/84c5cb3a485a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间: 2024-08-19 11:50:05

移动端适配理解收集的相关文章

移动端适配方案研究

初次接触移动端的时候,以为终于可以不用像pc那样考虑令人头疼的ie浏览器兼容问题,有强大的css3的帮助,可以随心所欲..可是后来才发现原来移动端各种层次不齐的终端更会让人抓耳挠腮,同样的页面在不同的手机上显示的完全不一样的效果,于是抛开功能,页面适配性也成了一个大的课题. 说到移动端,下面这一行代码大家一定不陌生: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-s

移动端适配之雪碧图(sprite)背景图片定位

为了减少网络请求个数量,提高网站的访问速度,我们一般都会把一些小的图片合并成一张sprite图,然后根据background-position来进行定位.在web端由于是固定的大小与left .top,所以定位起来会比较准确.简单.但是在移动端就不一样了,各种手机的屏幕大小不一样,很难做到使用sprite图然后根据background-position来定位.所以普遍的做法都是使用单张图片,然后使用background-size: cover|100%|contain来控制背景图的大小.其实这样

移动端适配难点

1.移动端开发通常都会在html中写下以下的meta标签 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> 需要注意的是无论是这样写还是用淘宝flexible.js动态生成meta头,目的只有一个,那就是让布局视口等于苹果手机的分辨率宽高/设备像素比后的宽高.苹果手机的分辨率是指以下所示 而不

前端开发知识之前端移动端适配总结

meta标签到底做了什么事情 做过移动端适配的小伙伴一定有遇到过这行代码: <meta name="viewport" content="width=device-width, initial-scale=1.0"> 但是,很多小伙伴只是感性的认识:噢,我加了这行代码,然后页面的宽度就会跟我的设备宽度一致.然而,这种理解是很片面的.那么,这句话的本质到底是什么呢? 不急,我们先往下面看,这里先留个悬念. 几个专有名词和单位 这里,我们先来辨析一下在适配的

如何在Vue项目中使用vw实现移动端适配

https://www.w3cplus.com/mobile/vw-layout-in-vue.html  原文网址 如何在Vue项目中使用vw实现移动端适配 作者:大漠 日期:2018-01-25 点击:10362 vw Layout 布局 Vue mobile 编辑推荐:使用 Coding.net 搭建静态博客,自定义域名,全站 HTTPS 加密,自动实时部署, 立即托管您的网站! 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页

手淘H5移动端适配方案flexible源码分析

移动端适配一直是一个值得探讨的问题,在业余时间我找了一些页面,查看了一些厂商对于移动端H5页面的适配方案,看到了几个典型的例子,今天就来记录一下我看到的第一个典型的例子,也是我们公司目前普通H5项目正在使用的适配方案. 这个适配方案是lib-flexible,在看这个源码的同时,我想先来回顾一下几个概念: 1.  viewport 在移动设备上,viewport是设备屏幕用来显示我们网页的那一块区域,或者说是浏览器(或者Hybird App内的webview)用来展示我们网页的那部分区域,vie

移动端适配方案

Flexible适配方案 最早的文章,是15年阿里手淘团队的移动端适配方案. 设计师常选择iPhone6作为基准设计尺寸,交付给前端的设计尺寸是按750px * 1334px为准(高度会随着内容多少而改变). 前端开发人员通过一套适配规则自动适配到其他的尺寸. 先了解一些基本概念 视窗viewport 简单理解,viewport是严格等于浏览器的窗口,在桌面浏览器中,viewport就是浏览器窗口的宽度高度. 但是在移动端的viewport太窄,为了能更好的为css布局服务,所以提供了两个vie

(html+css)_移动端适配方案一(流式布局)

一.前言 二.主要内容 1.移动端面对的问题:因为手机屏幕和尺寸不一样,当我们用不同手机设备浏览的时候为了提高用户体验必须要做移动端适配 2.解决方案一: 流式布局 + viewport视口进行设置 流式布局:就是百分比布局,非固定像素,内容向两侧填充,理解成流动的布局,称为流式布局*/ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <

适配方案(一)之移动端适配

老版常规做法 方案一:Meida Queries媒体查询 meida queries 主要是通过查询设备的宽度来执行不同的 css 代码,最终达到界面的配置.核心语法是: @media screen and (max-width: 600px) { /*当屏幕尺寸小于600px时,应用下面的CSS样式*/ /*你的css代码*/ } 需要添加meta设置 <meta name="viewport" content="width=device-width, user-sc