`

移动端

    博客分类:
  • WEB
web 
阅读更多

判断横竖屏 
window.onorientationchange = function(){ 
    switch(window.orientation){ 
        case -90: 
        case 90: 
        alert("横屏:" + window.orientation); 
        case 0: 
        case 180: 
        alert("竖屏:" + window.orientation); 
        break; 
    } 
}  
------------------------------------------------------------------------------------------------------------------ 


@media (device-width:375px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone 6 */ 
.class{} 

@media (device-width:414px) and (-webkit-min-device-pixel-ratio:3.0){/* 兼容iphone6 plus */ 
.class{} 

@media (device-height:480px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone4/4s */ 
.class{} 

@media (device-height:568px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone5 */ 
.class{} 


/* 上面的写法合并后 */ 
@media (device-height:480px) and (-webkit-min-device-pixel-ratio:2),(device-height:568px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone4/4s5/5 */ 
.class{} 


使用JS 

//通过高度来判断是否是iPhone 4还是iPhone 5 
isPhone4inches = (window.screen.height==480); 
isPhone5inches = (window.screen.height==568); 
------------------------------------------------------------------------------------------------------------------ 
viewport的使用 
viewport总共有5个属性,分别如下: 
<meta name="viewport" 
content=" 
height = [ pixel_value |device-height] , 
width = [ pixel_value |device-width ] , 
initial-scale = float_value , minimum-scale = float_value , maximum-scale = float_value , 
user-scalable =[yes | no] , 
target- densitydpi = [ dpi_value | device-dpi| high-dpi | medium-dpi | low-dpi] " /> 

极致完美 
<meta name="viewport"content="target- densitydpi =device-dpi, width=device-width " /> 
#header { 
background:url (medium-density-image.png); 

@media screen and (- webkit -device-pixel-ratio:1.5) { 
/* CSS for high-density screens */ 
#header { background:url (high-density-image.png);} 

@media screen and (- webkit -device-pixel-ratio:0.75) { 
/* CSS for low-density screens */ 
#header { background:url (low-density-image.png);} 




touchstart:  // 手指放到屏幕上的时候触发 
touchmove:  // 手指在屏幕上移动的时候触发 
touchend:  // 手指从屏幕上拿起的时候触发 
touchcancel:  // 系统取消touch事件的时候触发。至于系统什么时候会取消,不详 
client / clientY:// 触摸点相对于浏览器窗口viewport的位置 
pageX / pageY:// 触摸点相对于页面的位置 
screenX /screenY:// 触摸点相对于屏幕的位置 
identifier: // touch对象的unique ID 

http://blog.sina.com.cn/s/blog_65c2ec5e0101fexw.html 
处理Touch事件能让你跟踪用户的每一根手指的位置。你可以绑定以下四种Touch事件: 
    1.touchstart:  // 手指放到屏幕上的时候触发 
    2.touchmove:  // 手指在屏幕上移动的时候触发 
    3.touchend:  // 手指从屏幕上拿起的时候触发 
    4touchcancel:  // 系统取消touch事件的时候触发。至于系统什么时候会取消,不详 
属性 
    1.client / clientY:// 触摸点相对于浏览器窗口viewport的位置 
    2.pageX / pageY:// 触摸点相对于页面的位置 
    3.screenX /screenY:// 触摸点相对于屏幕的位置 
    4.identifier: // touch对象的unique ID 
//touchstart事件  
function touchSatrtFunc(e) {  
    //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
    var touch = e.touches[0]; //获取第一个触点  
    var x = Number(touch.pageX); //页面触点X坐标  
    var y = Number(touch.pageY); //页面触点Y坐标  
    //记录触点初始位置  
    startX = x;  
    startY = y;  
}  
//touchmove事件 
function touchMoveFunc(e) {  
    //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
    var touch = evt.touches[0]; //获取第一个触点  
    var x = Number(touch.pageX); //页面触点X坐标  
    var y = Number(touch.pageY); //页面触点Y坐标  
    var text = 'TouchMove事件触发:(' + x + ', ' + y + ')';  
    //判断滑动方向  
    if (x - startX != 0) {  
        //左右滑动  
    }  
    if (y - startY != 0) {  
        //上下滑动  
    }  
}  



下面是手机网页的一些认识: 

    一、<meta name="viewport" id="viewport" content="width=device-width, initial-scale=1"> 

    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放。    
<meta  name="viewport"  content="width=device-width,  initial-scale=1.0,  minimum-scale=1.0,  maximum-scale=1.0,  user-scalable=no">     
width  -  viewport的宽度  height  -  viewport的高度      
initial-scale  -  初始的缩放比例    
minimum-scale  -  允许用户缩放到的最小比例      
maximum-scale  -  允许用户缩放到的最大比例    
user-scalable  -  用户是否可以手动缩放 

二、<meta name="format-detection" content="telephone=no"> 

当该 HTML 页面在手机上浏览时,该标签用于指定是否将网页内容中的手机号码显示为拨号的超链接。 

在 iPhone 上默认值是: 

<meta name="format-detection" content="telephone=yes"/> 

如果你不希望手机自动将网页中的电话号码显示为拨号的超链接,那么可以这样写: 

<meta name="format-detection" content="telephone=no"/> 

三、<meta name=" apple-mobile-web-app-capable " content=" yes " /> 

说明:网站开启对web app程序的支持。 

四、<meta name=" apple-mobile-web-app-status-bar-style " content=" black " /> 

说明: 

在web app应用下状态条(屏幕顶部条)的颜色; 
默认值为default(白色),可以定为black(黑色)和black-translucent(灰色半透明)。 
注意:若值为“black-translucent”将会占据页面px位置,浮在页面上方(会覆盖页面20px高度–iphone4和itouch4的 Retina屏幕为40px )。 

!!!!苹果web app其他设置: 
当然,配合web app的icon 和 启动界面需要额外的两端代码进行设定,如下所示: 

<link rel="apple-touch-icon-precomposed" href="iphone_milanoo.png" /> 
说明:这个link就是设置web app的放置主屏幕上icon文件路径 
使用: 

该路径需要注意的就是放到将网站的文档根目录下但不是服务器的文档的根目录。 
图片尺寸可以设定为57*57(px)或者Retina可以定为114*114(px),ipad尺寸为72*72(px) 
<link rel="apple-touch-startup-image" href="milanoo_startup.png" /> 
说明:这个link就是设置启动时候的界面(图片五),放置的路劲和上面类似。 

使用: 

该路径需要注意的就是放到将网站的文档根目录下但不是服务器的文档的根目录。 
官方规定启动界面的尺寸必须为 320*640(px),原本以为Retina屏幕可以支持双倍,但是不支持,图片显示不出来。 
五、 <meta name="apple-touch-fullscreen" content="yes"> "添加到主屏幕“后,全屏显示 <meta name="apple-mobile-web-app-capable" content="yes" /> 
这meta的作用就是删除默认的苹果工具栏和菜单栏。content有两个值”yes”和”no”,当我们需要显示工具栏和菜单栏时,这个行meta就不用加了,默认就是显示。 
<meta content="telephone=no" name="format-detection" /> 
<meta content="email=no" name="format-detection" />//将不识别邮箱 
告诉设备忽略将页面中的数字识别为电话号码 
iOS用rel="apple-touch-icon",android 用rel="apple-touch-icon-precomposed"。这样就能在用户把网页存为书签时,在手机HOME界面创建应用程序样式的图标。 
<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=gbk" /> 
<meta name="viewport" id="viewport" content="width=device-width, initial-scale=1"> 
<meta name="apple-mobile-web-app-capable" content="yes"> 
<meta name="apple-touch-fullscreen" content="YES"> 
<meta name="apple-mobile-web-app-status-bar-style" content="black"> 

---------------------------------------------------------------------------------------------------------------------- 

<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" " http://www.wapforum.org/DTD/xhtml-mobile10.dtd "> 
<html xmlns=" http://www.w3.org/1999/xhtml "> 
<meta http-equiv="Content-Type" content="text/html; charset=gbk"> 
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"> 
<meta name="format-detection" content="telephone=no"> 
<meta name="keywords" content=""> 

---------------------------------------------------------------------------------------------------------------------------- 


<meta name="apple-mobile-web-app-capable" content="yes">   
<meta name="apple-mobile-web-app-status-bar-style" content="black" />   
<meta http-equiv="content-type" content="text/html; charset=gb2312">   
<meta name="HandheldFriendly" content="True">   
<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1, user-scalable=no">   
<meta name="apple-touch-fullscreen" content="YES" />   
<meta name="viewport" content="width=device-width,maximum-scale=1.0,initial-scale=1.0,user-scalable=no"/>   
<meta name="format-detection" content="telephone=no"/> 

iphone6及iphone6plus已经出来一段时间了。很多移动端网站,以前写死body为320px的,现在估计也忙着做适配了。 

大屏幕手机其实一直有,只是以前大家没怎么重视,移动端的H5页面大部分都以320px为基准宽度进行布局,那些大屏屌丝android用户也懒得去理,而现在iphone也搞起多屏幕,老板们重视程度就不一样了。 

回归正题,兼容iphone各版本机型最佳的方式就是自适应。 

1、viewport简单粗暴的方式: 

<metaname="viewport"content="width=320,maximum-scale=1.3,user-scalable=no"> 

直接设置viewport为320px的1.3倍,将页面放大1.3倍。 

为什么是1.3? 

目前大部分页面都是以320px为基准的布局,而iphone6的宽度比是375/320=1.171875,iphone6+则是414/320=1.29375 

那么以1.29倍也就约等于1.3了。 

2、ip6+的CSSmediaquery 

@media(min-device-width:375px)and(max-device-width:667px)and(-webkit-min-device-pixel-ratio:2){ 

/*iphone6*/ 



@media(min-device-width:414px)and(max-device-width:736px)and(-webkit-min-device-pixel-ratio:3){ 

/*iphone6plus*/ 



PS:也可以直接使用实际的device-width:如device-width:375px 

在原有页面的基础上,再针对相应的屏幕大小单独写样式做适配。 

3、REM布局 

REM是CSS3新增的一种单位,并且移动端的支持度很高,android2.x+,ios5+都支持。 

REM是相对于dom结构的根元素来设置大小,也就是html这个元素。相较于em单位,rem使用上更容易理解及运用。 

REM与PX的换算可以查看网址:https://offroadcode.com/prototypes/rem-calculator/ 

假设,html我们设置font-size:12px;也就是说12px相对于1rem,那么18px也就是18/12=1.5rem。 

那么我们以320px的设计布局为基准,将html设置为font-size:100px,即100px=1rem。(设置100px是为了方便计算)那么可以将大部分px单位除以100就可以直接改成rem单位了。 

REM如何做响应式布局? 

1、如果仅仅是适配ip6+设备,那么使用mediaquery就行。 

伪代码如下: 

/*320px布局*/ 

html{font-size:100px;} 

body{font-size:0.14rem/*实际相当于14px*/} 

/*iphone6*/ 

@media(min-device-width:375px)and(max-device-width:667px)and(-webkit-min-device-pixel-ratio:2){ 

html{font-size:117.1875px;} 



/*iphone6plus*/ 

@media(min-device-width:414px)and(max-device-width:736px)and(-webkit-min-device-pixel-ratio:3){ 

html{font-size:129.375px;} 



这样,在ip6下,也就将页面内的元素放大了1.17倍,ip6+下也就是放大了1.29倍。 

2、如果是完全自适应,那么可以通过JS来控制。 

(function(doc,win){ 

vardocEl=doc.documentElement, 

resizeEvt='orientationchange'inwindow?'orientationchange':'resize', 

recalc=function(){ 

varclientWidth=docEl.clientWidth; 

if(!clientWidth)return; 

docEl.style.fontSize=100*(clientWidth/320)+'px'; 

}; 

//AbortifbrowserdoesnotsupportaddEventListener 

if(!doc.addEventListener)return; 

win.addEventListener(resizeEvt,recalc,false); 

doc.addEventListener('DOMContentLoaded',recalc,false); 

})(document,window); 

页面初始化的时候计算font-size,然后再绑定resize事件。这种效果就和百分比布局一样了。 

那么用REM做单位与百分比做单位有什么优势? 

主要优势在于能更好的控制元素大小。(一般百分比应用在布局层,一般常见设置为50%,33.3%,25%之类的整数居多,难以运用在复杂的页面小部件内)。 

但是相比百分比布局,需要借助JS或mediaquery实现,略有一点瑕疵。 

DEMO地址 

4、图片自适应 

刚说完REM布局,那么用百分比布局也能实现一样的效果,但是用百分比布局,必须要面临一个问题:图片宽度100%,页面加载时会存在高度塌陷的问题。. 

那么可以用padding-top设置百分比值来实现自适应。 

公式如下: 

padding-top=(ImageHeight/ImageWidth)*100% 

原理:padding-top值为百分比时,取值是是相对于宽度的。 

相关代码实现: 

<divclass="cover"> 

<imgsrc="http://g.ald.alicdn.com/bao/uploaded/i1/TB1d6QqGpXXXXbKXXXXXXXXXXXX_!!0-item_pic.jpg_160x160q90.jpg"alt=""/> 

</div> 

.cover{position:relative;padding-top:100%;height:0;overflow:hidden;} 

.coverimg{position:absolute;top:0;width:100%;} 

DEMO地址,缩放浏览器窗口看看。 

5、图片高清化 

大家都知道,iphone6plus是3倍高清图了,它的devicePixelRatio=3。 

在ios8下,已经开始支持img的srcset属性了(目前移动端也就ios8开始支持),也就是说,可以对一张图片设置2个URL,浏览器自动加载对应的图片。 

黄色表示仅支持旧的srcset规范,绿色表示支持全新的srcset规范,包括sizes属性,w描述符。这里不展开,详细了解可自行google。 

不过目前前端这边图片的实现基本都用lazyload的方式实现。srcset的图片加载方式在实际项目中运用还比较少。 

6、背景图高清化 

mediaquery实现高清化 

img标签的高清化,可以通过JS判断devicePixelRatio的值来加载不同尺寸的图片,但是对于背景图,写在CSS中的,用JS来判断就略麻烦了,还好CSS通过mediaquery也能判断dpr。 

目前兼容性最好的背景图高清化实现方式,使用mediaquery的-webkit-min-device-pixel-ratio做判断: 

/*普通显示屏(设备像素比例小于等于1)使用1倍的图*/ 

.css{ 

background-image:url(img_1x.png); 



/*高清显示屏(设备像素比例大于等于2)使用2倍图 */ 

@mediaonlyscreenand(-webkit-min-device-pixel-ratio:2){ 

.css{ 

background-image:url(img_2x.png); 





/*高清显示屏(设备像素比例大于等于3)使用3倍图 */ 

@mediaonlyscreenand(-webkit-min-device-pixel-ratio:3){ 

.css{ 

background-image:url(img_3x.png); 





进一步,可以通过工具生成相应的3x,2x,1x的图片及css,在使用时直接引用即可。谁搞一个? 

关于移动设备的-webkit-min-device-pixel-ratio值,可以查看该网页的整理:http://bjango.com/articles/min-device-pixel-ratio/ 

image-set实现高清化 

image-set,它是Webkit的私有属性,也是Css4的一个属性,它是为了解决Retina屏幕下的图像显示而生。 

使用方式也很简单。伪代码如下: 

.css{ 

background-image:url(1x.png);   /*不支持image-set的情况下显示*/ 

background:-webkit-image-set( 

url(1x.png)1x,/*支持image-set的浏览器的[普通屏幕]下*/ 

url(2x.png)2x,/*支持image-set的浏览器的[2倍Retina屏幕]*/ 

url(3x.png)3x/*支持image-set的浏览器的[3倍Retina屏幕]*/ 

); 



目前移动端的支持程度来看,ios7+,android4.4+下已经支持了。如果仅仅是做ip6+的高清适配方案。image-set也是一种实现方案。 

使用image-set与mediaquery实现有什么区别及好处? 

这篇文章里面做了很详细的阐述,大家可以看看:http://blog.cloudfour.com/safari-6-and-chrome-21-add-image-set-to-support-retina-images/ 

大体的意思是:image-set不需要告诉浏览器使用什么图像,而是直接提供了图像让浏览器选择。这就意味着,如果在低网速下,浏览器可以选择加载低分辨率的图片。(PS:好智能的样子) 

但是相比如mediaquery的实现,image-set仅支持单个图片的高清化,不适合在csssprite下使用。并且兼容性也是一大硬伤。 

但是一般来说,用在LOGO区域,单个图片图标的区域下,也是个不错的选择。 

7、图片列表的自适应 

关于适配,也就是要让布局更灵活,在电商网站里面,商品列表是一个非常常见的结构。 

一种比较智能的列表方式是:两端对齐,间距自适应。 

那么可以使用FLEXBOX布局来实现两端对齐的效果,也可以使用text-align:justify的方式实现。 

先看个flex实现的例子,主要通过justify-content:space-between,来实现: 

flexbox的布局方式,在PC端就不合适了,ie9以下都不支持,那么更友好的方式可以使用text-align:justify来实现,兼容各大主流浏览器,包括IE6。 

但是这2种布局方式都有一定的局限性。就是列表个数必须凑整。目前还没找到一种能够兼容不限个数的实现方案,如果各位看官有更好的实现方式,也欢迎提出,一起交流。 

移动端ip6的适配方案有很多,没有固定的套路及方法,请根据自身业务的特点,选择其中的一些方法组合使用。 

 

本问转自:http://1185407601.iteye.com/blog/2249348

分享到:
评论

相关推荐

    15个axure移动端原型组件

    15个移动端原型组件15个移动端原型组件15个移动端原型组件15个移动端原型组件15个移动端原型组件15个移动端原型组件15个移动端原型组件15个移动端原型组件15个移动端原型组件15个移动端原型组件15个移动端原型组件15...

    vue实现移动端拖动排序

    在本篇文章中,作者将分享如何使用Vue.js来实现移动端拖动排序功能。这一技术在移动端的交互设计中非常常见,如在列表编辑、图片轮播、九宫格布局等场景中。Vue.js是一个构建用户界面的渐进式JavaScript框架,它提供...

    移动端网页开发可参考源代码

    在移动端网页开发中,开发者面临着一系列独特的挑战,如屏幕尺寸各异、触摸交互、网络环境不稳定等。本资源包“移动端网页开发可参考源代码”提供了一些开源框架和实用的源码示例,可以帮助开发者快速理解和掌握...

    hui移动端前端框架

    《HUI移动端前端框架详解与应用》 在数字化时代的洪流中,移动端应用开发日益重要,而优秀的前端框架则是构建高效、响应迅速的移动应用的关键。HUI移动端前端框架,作为一个专门为移动端设计的前端解决方案,它以其...

    基于Vue的RuoYi APP移动端框架设计源码

    RuoYi APP移动端框架:基于Java开发,包含349个文件,包括89个Markdown文档、88个Vue组件文件、80个JSON配置文件、53个JavaScript文件、16个SCSS样式文件、8个PNG图像文件、4个JPG图像文件、3个CSS样式文件、2个TTF...

    携程_携程移动端_移动端轮播图_源码

    【移动端轮播图实现原理与携程案例分析】 在移动互联网时代,用户界面的交互性和视觉效果成为了吸引用户的重要因素,而移动端轮播图作为一种常见的网页元素,被广泛应用于各种应用程序和网站,包括携程移动端。它...

    《移动应用开发》小组项目--网易云音乐播放器移动端项目源码.zip

    《移动应用开发》小组项目--网易云音乐播放器移动端项目源码《移动应用开发》小组项目--网易云音乐播放器移动端项目源码《移动应用开发》小组项目--网易云音乐播放器移动端项目源码《移动应用开发》小组项目--网易云...

    移动端流程自行开发指南.docx

    随着移动互联网技术的发展,企业办公场景逐渐向移动端迁移,提高工作效率成为企业信息化建设的重要方向之一。泛微OA作为国内领先的企业协同管理软件及云服务提供商,为满足企业在移动办公方面的需求,提供了丰富的...

    echart图表移动端应用

    在移动端,ECharts能够适应不同屏幕尺寸,为用户提供流畅的交互体验。 首先,我们要理解ECharts的基本使用方法。ECharts通过引入其JavaScript库文件,可以在HTML页面中创建图表。在移动端应用时,通常会将其与响应...

    Ant Design 风格 移动端 分享版

    《Ant Design风格移动端分享版——打造卓越的移动用户体验》 Ant Design,作为一款广受欢迎的前端UI框架,以其高效、可扩展和优雅的设计理念,在Web开发领域占据了一席之地。而今天我们要探讨的是其在移动端的延伸...

    h5移动端部门树展示

    在H5移动端开发中,部门树展示是一种常见的需求,它用于组织结构的呈现,比如公司内部的部门架构、员工层级关系等。这种功能通常应用于企业内部管理系统或者协作平台,便于用户快速查找和理解组织结构。下面我们将...

    ecology 移动端流程自行开发指南.docx

    《移动端流程自行开发指南》是一份详细指导文档,旨在帮助开发者在移动端进行流程自定义开发。这份文档由 Weaver Software China 上海耀华支路泛微软件大厦发布,提供了关于流程开发的重要信息,包括系统运行要求、...

    移动端日期时间选择控件

    在移动端应用开发中,日期时间选择控件是一个非常常见的组件,它允许用户方便地选取日期和时间,广泛应用于各种场景,如预约、日程安排、表单填写等。本话题将深入探讨移动端日期时间选择控件的设计原理、实现方式...

    一个基于canvas的移动端图片编辑插件

    【标题】:基于canvas的移动端图片编辑插件 在移动互联网时代,图片编辑已经成为许多应用程序不可或缺的功能,尤其在移动端H5页面和微信小程序中。基于canvas的图片编辑插件为开发者提供了一种轻量级、高效且灵活的...

    移动端H5商城模板源码-34个页面

    在IT行业中,移动端H5商城模板源码是开发者和设计师常用的一种资源,它能快速构建一个功能完善的在线购物平台。本资源"移动端H5商城模板源码-34个页面"是一个基于原生HTML和JavaScript技术开发的商城类H5应用模板,...

    一个移动端react的日期选择器

    在移动端应用开发中,UI组件的选择器扮演着至关重要的角色,特别是日期选择器,它能够帮助用户方便地选取和输入日期。React作为一个流行的JavaScript库,为开发者提供了丰富的组件生态系统,其中包括了专门用于...

    移动端HTML5登录注册精美界面

    在移动互联网快速发展的今天,HTML5技术已经成为构建跨平台、响应式网页应用的重要工具,尤其在移动端登录注册界面的设计上,HTML5提供了丰富的功能和出色的用户体验。本资源包含的"移动端HTML5登录注册精美界面...

    移动端、h5省市区三级联动

    在移动端和H5开发中,省市区三级联动是一种常见的功能需求,主要用于地址选择,提供用户一个方便快捷的方式来选择他们的详细地址。本示例提供了一款适用于这两种平台的三级联动组件,下面将详细介绍这个功能及其实现...

    vue开发移动端底部导航条功能

    在Vue.js中开发移动端底部导航条功能是一项常见的任务,它能提供用户友好的界面和流畅的导航体验。本文将深入探讨如何使用Vue实现这一功能,包括组件化设计、路由链接和样式布局。 首先,我们来看一下`app.vue`中的...

    html+css 移动端商城网页设计实现

    在整个移动端商城的开发过程中,性能优化也是不可忽视的。例如,使用懒加载(lazy loading)技术延迟加载非首屏图片,减少HTTP请求;通过设置合适的`viewport`元标签,确保网页在不同设备上正确缩放;应用CSS3的硬件...

Global site tag (gtag.js) - Google Analytics