澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站手提式有线电话机端事件,

2019-11-10 作者:澳门新萄京赌场网址   |   浏览(120)

5个常见响应式设计陷阱及解决方案

2015/09/18 · HTML5, JavaScript · 响应式

原文出处: 王海庆   

http://www.cnblogs.com/mq0036/p/3934821.html
移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成。但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件。处理touch事件能跟踪到屏幕滑动的每根手指。
以下是四种touch事件

                                                                                                                                                                    移动端复习

继最近写移动端H5项目不断踩坑之后,决定找一些对自己后续开发有帮助的大总结博客来看看,但是个人很懒,所以将浏览过的众多博客中,认为较有价值的摘抄进来,以备后用。

移动端html touch事件,端htmltouch事件

诸如智能手机和平板电脑一类的移动设备通常会有一(capacitive touch-sensitivescreen),以捕捉用户的手指所做的交互。随着移动网络的发展,其能够支持越来越复杂的应用,web开发者需要一种方法来处理这些事件。例如,几乎所有的快节奏游戏都需要玩家一次按下多个按钮,这种方式,在触摸屏情况下,意味着多点触摸。

     Apple在iOS 2.0中引入了触摸事件API,Android正迎头赶上这一事实标准,缩小差距。最近一个W3C工作组正合力制定这一触摸事件规范。

     在本文深入研究iOS和Android设备提供的触摸事件API,探索一下可以构建哪些类型的应用,给出一些最佳做法,并论及一些使得可触控应用(touch-enabled application)的开发变得更加容易的有用技术。

 

触摸事件 

三种在规范中列出并获得跨移动设备广泛实现的基本触摸事件:
     1. touchstart:手指放在一个DOM元素上。
     2. touchmove:手指拖曳一个DOM元素。
     3. touchend:手指从一个DOM元素上移开。
     每个触摸事件都包括了三个触摸列表:
     1. touches:当前位于屏幕上的所有手指的一个列表。
     2. targetTouches:位于当前DOM元素上的手指的一个列表。

3. changedTouches:涉及当前事件的手指的一个列表。
     例如,在一个touchend事件中,这就会是移开的手指。
     这些列表由包含了触摸信息的对象组成:
     1. identifier:一个数值,唯一标识触摸会话(touch session)中的当前手指。
     2. target:DOM元素,是动作所针对的目标。
     3. 客户/页面/屏幕坐标:动作在屏幕上发生的位置。
     4. 半径坐标和 rotationAngle:画出大约相当于手指形状的椭圆形。

 

 

可触控应用  
     touchstart、touchmove和touchend事件提供了一组足够丰富的功能来支持几乎是任何类型的基于触摸的交互——其中包括常见的多点触摸手势,比如说捏缩放、旋转等待。    下面的这段代码让你使用单指触摸来四处拖曳一个DOM元素:复制代码

  var obj = document.getElementByIdx_x_x_x_x_x_x('id');

  obj.addEventListener('touchmove', function(event) 

  { // 如果这个元素的位置内只有一个手指的话

        if (event.targetTouches.length == 1) 

  {

    var touch = event.targetTouches[0];

      // 把元素放在手指所在的位置

      obj.style.left = touch.pageX   'px';

         obj.style.top = touch.pageY   'px';

    }

}, false);

 

      下面是一个示例,该例子显示了屏幕上当前所有的触点,它的作用就是用来感受一下设备的响应性。
      // 设置画布并通过ctx变量来暴露上下文复制代码

 canvas.addEventListener('touchmove',     

 function(event) {

       for (var i = 0; i < event.touches.length; i ) {

 var touch = event.touches;

    ctx.beginPath();

       ctx.arc(touch.pageX, touch.pageY, 20, 0, 2*Math.PI, true);

       ctx.fill();

       ctx.stroke();

      }

   }, false);

 

演示
      到处都有着许多有意思的多点触摸演示,比如说这个由Paul Irish和其他人实现的基于画布的绘画演示。

      还有Browser Ninja,一个技术演示,是一个使用了CSS3的转换、过渡和画布的Fruit Ninja克隆。

 

最佳做法 

 

阻止缩放
     缺省的多点触摸设置不是特别的好用,因为你的滑动和手势往往与浏览器的行为有关联,比如说滚动和缩放。

     要禁用缩放功能的话,使用下面的元标记设置你的视图区(viewport),这样其对于用户来说就是不可伸缩的了:

     content="width=device-width, initial-scale=1.0, user-scalable=no">
     看看这篇关于移动HTML 5的文章,了解更多关于视图区设置的信息。

 

 

阻止滚动
     一些移动设备有缺省的touchmove行为,比如说经典的iOS overscroll效果,当滚动超出了内容的界限时就引发视图反弹。这种做法在许多多点触控应用中会带来混乱,但要禁用它很容易。
     document.body.addEventListener('touchmove', function(event) {
        event.preventDefault();
     }, false); 

 

 

细心渲染
     如果你正在编写的多点触控应用涉及了复杂的多指手势的话,要小心地考虑如何响应触摸事件,因为一次要处理这么多的事情。考虑一下前面一节中的在屏幕上画出所有触点的例子,你可以在有触摸输入的时候就立刻进行绘制:
澳门新萄京官方网站手提式有线电话机端事件,5个不以为奇响应式设计陷阱及施工方案。    canvas.addEventListener('touchmove', function(event) {
      renderTouches(event.touches);
    },
    不过这一技术并不是要随着屏幕上的手指个数的增多而扩充,替代做法是,可以跟踪所有的手指,然后在一个循环中做渲染,这样可获得更好的性能:
    var touches = []
    canvas.addEventListener('touchmove', function(event) {
        touches = event.touches;
    }, false);
    // 设置一个每秒60帧的定时器
    timer = setInterval(function() {
      renderTouches(touches);
    }, 15);
     提示:setInterval不太适合于动画,因为它没有考虑到浏览器自己的渲染循环。现代的桌面浏览器提供了requestAnimationFrame这一函数,基于性能和电池工作时间原因,这是一个更好的选择。一但浏览器提供了对该函数的支持,那将是首选的处理事情的方式。

使用targetTouches和changedTouches
    要记住的一点是,event.touches是与屏幕接触的所有手指的一个数组,而不仅是位于目标DOM元素上的那些。你可能会发现使用 event.targetTouches和event.changedTouches来代替event.touches更有用一些。

    最后一点,因为你是在为移动设备做开发,因此你应该要留心移动的最佳做法,这些在Eric Bidelman的文章中有论及,以及要了解这一W3C文档。

 

 

设备支持     

    遗憾的是,触摸事件的实现在完备性和质量方面的差别很大。我编写了一个诊断脚本来显示一些关于触摸API实现的基本信息,其中包括哪些事件是支持的,以及 touchmove事件触发的解决方案。我在Nexus One和Nexus S硬件上测试了Android2.3.3,在Xoom上测试了Android 3.0.1,以及在iPad和iPhone上测试了iOS 4.2。

    简而言之,所有被测试的浏览器都支持touchstart、touchend和touchmove事件。

    规范提供了额外的三个触摸事件,但被测试的浏览器没有支持它们:
      1. touchenter:移动的手指进入一个DOM元素。
      2. toucheleave:移动手指离开一个DOM元素。
      3. touchcancel:触摸被中断(实现规范)。

     被测试的浏览器还在每个触摸列表内部都提供了touches、targetTouches和changedTouches列表。不过,被测试的浏览器没有支持radiusX、radiusY或是rotationAngle属性,这些属性指明触摸屏幕的手指的形状。在一次touchmove期间,事件大约一秒钟触发60次,所有的被测试设备都是这样。

Android 2.3.3 (Nexus)
     Android的Gingerbread浏览器(在Nexus One和Nexus S上测试)不支持多点触摸,这是一个已知的问题。

Android 3.0.1 (Xoom)
      Xoom的浏览器对多点触摸有一个基本的支持,不过只能是在单个的DOM元素上起作用。浏览器不能正确响应同时发生在不同DOM元素上的两处触摸,换句话说,下面的代码会对两个同时发生的触摸的给出反应:复制代码

   obj1.addEventListener('touchmove', function(event) {

      for (var i = 0; i < event.targetTouches; i ) {

         var touch = event.targetTouches;

         console.log('touched '   touch.identifier);

       }

    }, false);

但下面的代码则不会:复制代码

 var objs = [obj1, obj2];

 for (var i = 0; i < objs.length; i ) {

     var obj = objs;

     obj.addEventListener('touchmove', function(event) {

         if (event.targetTouches.length == 1) {

         console.log('touched '     

          event.targetTouches[0].identifier);

     }

  }, false);

}

 

iOS 4.x (iPad, iPhone)
     iOS设备完全支持多点触摸,能够跟踪多个手指,并在浏览器中提供一个非常敏感的触摸体验。

开发者工具 

     在移动开发中,一种较为容易的做法是,先在桌面上开始原型设计,然后再在打算要支持的设备上处理移动特有的部分。多点触摸正是难以在PC上进行测试的那些功能之一,因为大部分的PC都没有触摸输入。

     不得不在移动设备上进行的测试有可能会拉长你的开发周期,因为你所做的每项改变都需要提交代码到服务器上,接着再加载到设备上。然后,一旦运行后,对应用也就没有太多的调试了,因为平板电脑和智能手机都很缺乏web开发者所用的工具。

     这个问题的一个解决方案是在开发机器上模拟触发事件。对于单点触摸,触摸事件可以基于鼠标事件来模拟。如果你有触摸输入设备的话,比如说现代的App MacBook,那么多点触摸也可以被模拟。

单点触摸事件
     如果你想在桌面上模拟单点触摸事件的话,试一下Phantom Limb,该程序在网页上模拟触摸事件并提供一只巨手来引导。
     另外还有Touchable这一jQuery插件,该插件跨平台地统一了触摸和鼠标事件。

多点触摸事件
     为了能够让你的多点触摸web应用在你的浏览器或是多点触摸控板(比如说Apple MacBook或是MagicPad)上起作用,我创建了这一个MagicTouch.js填充工具,其捕捉来自触控板的触摸事件,然后把它们转换成标准兼容的触摸事件。

     1. 下载npTuioClient NPAPI插件并把它安装到~/Library/Internet Plug-Ins/目录下。
     2. 下载这一Mac MagicPad的TongSeng TUIO应用并启动这一服务器。
     3. 下载MagicTouch.js这一javascript库来基于npTuioClient回调模拟规范兼容的触摸事件
     4. 以如下方式把magictouch.js脚本和npTuioClient插件包含到你的应用中:复制代码

< head>

   ...   

<script src="/path/to/magictouch.js" 

kesrc="/path/to/magictouch.js">< /script>

 < /head>

 < body>

 ...

 < object id="tuio" type="application/x-  tuio" style="width: 0px; height: 0px;">

 Touch input plugin failed to load!

  < /object>

 < /body>

       我只在Chrome 10上测试了这一方法,不过只要稍做调整它应该能够在其他的现代浏览器上工作。

       如果你的计算机没有多点触摸输入的话,你可以使用其他的TUIO跟踪器,比如

说reacTIVision来模拟触摸事件。欲了解更多信息,请参阅TUIO项目页面。

 

       需要注意的一点是,你的手势可以是和OS层面的多点触摸手势相同的。在OS X上,你可以通过进入System Preferences中的Trackpad偏好设定版面来配置系统范围的事件。

       随着多点触摸功能逐渐得到跨移动浏览器的的广泛支持,我非常高兴地看到新的web应用充分利用了这一丰富的API。 

touch事件,端htmltouch事件 诸如智能手机和平板电脑一类的移动设备通常会有一(capacitivetouch-sensitivescreen),以捕捉用户的手指所...

1. 引言

澳门新萄京官方网站手提式有线电话机端事件,5个不以为奇响应式设计陷阱及施工方案。原文:Sitepoint的5 Responsive Design Pitfalls and How to Avoid Them
译言:希望能够对大家所有帮助。

touchstart:     //手指放到屏幕上时触发
touchmove:      //手指在屏幕上滑动式触发
touchend:    //手指离开屏幕时触发
touchcancel:     //系统取消touch事件的时候触发,这个好像比较少用

一、下面我将简单的介绍移动端布局的八种方式:
** 1.固定布局**
2.流动布局
3.浮动布局
4.定位布局
5.混合布局
6.flex布局
7.rem布局
8.响应式布局
** 9.****圣杯布局**
** 10.****双飞翼布局**

老规矩,感谢原文作者,贴链接:H5项目常见问题汇总及解决方案

2. 正文

每个触摸事件被触发后,会生成一个event对象,event对象里额外包括以下三个触摸列表


Meta基础知识:

2.1 引入

想象这样的场景: 您刚刚创建了一个杰出的响应式设计,然后准备在移动设备中测试一下。在您意想不到的地方产生了一些问题,文字乱糟糟的,动画波涛汹涌,表单没有呈现您设计的样式。然后花费N多时间修复这些问题,您可能抓狂地把电脑扔出窗外砸中邻居家的猫。

好消息是,我准备在本篇文章里介绍这些可能令您抓狂的问题,并讲解相应的解决方案。主要包括以下五个问题:

  1. 意外的文字改变
  2. 非期望的表单样式
  3. 误导的仿真器错误
  4. 桌面端表现良好动画的移动端呈现问题
  5. 触摸事件(Touch Event)的坐标注册问题

好的,言归正传。

本文假设您了解响应式网页开发的基础知识,否则您可能需要进行一下提升(简明教程)。

touches:     //当前屏幕上所有手指的列表
targetTouches:      //当前dom元素上手指的列表,尽量使用这个代替touches
changedTouches:     //涉及当前事件的手指的列表,尽量使用这个代替touches

1.固定布局 方法 <head>里把<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">加好,然后根据设计稿设定相应的宽度即可,其他地方类似于pc端。 优点 思路沿用pc端,上手比较快 缺点
大屏手机显示网页比较宽,而固定布局宽度参照永远是固定的宽度(设计稿的大小),导致左右两边会有空白。手机横屏的时候两边空白更亮。

H5页面窗口自动调整到设备宽度,并禁止用户缩放页面

2.1 意外的文字改变

ios设备的旋转将破坏布局、改变页面中的文字大小,当元素(例如导航条、菜单等)设置为固定定位时经常产生类似的问题,只有刷新页面才可以修复问题。幸运的是,有一个方法可以防患于未然。

在您的css中添加如下代码

CSS

html { /* 防止横屏时的文字缩放 */ -webkit-text-size-adjust: 100%; }

1
2
3
4
html {
    /* 防止横屏时的文字缩放 */
    -webkit-text-size-adjust: 100%;
}

该代码设置横屏时文字的缩放为100%,从而防止意外的文字改变发生。

这些列表里的每次触摸由touch对象组成,touch对象里包含着触摸信息,主要属性如下:

2.流动布局
方法
适用百分比(%)做单位。
优点 能更很好的适应各个屏幕分辨率的手机。 缺点
不够灵活,添加元素时,需要更改其他元素的值。

//一、HTML页面结构

// width 设置viewport宽度,为一个正整数,或字符串‘device-width’

// height 设置viewport高度,一般设置了宽度,会自动解析出高度,可以不用设置

// initial-scale 默认缩放比例,为一个数字,可以带小数

// minimum-scale 允许用户最小缩放比例,为一个数字,可以带小数

// maximum-scale 允许用户最大缩放比例,为一个数字,可以带小数

// user-scalable 是否允许手动缩放

//二、JS动态判断

var phoneWidth = parseInt(window.screen.width);

var phoneScale = phoneWidth/640;

var ua = navigator.userAgent;

if (/Android (d .d )/.test(ua)){

var version = parseFloat(RegExp.$1);

if(version>2.3) {

document.write('');

} else {

document.write('');

}

} else {

document.write('');

}

2.2 非期望的表单样式

平板或移动设备经常调用默认样式搞糟您的表单样式,我们可以使用如下的css代码阻止表单的默认样式。

CSS

input[type=text], button, select, textarea{ -webkit-appearance: none; -moz-appearance: none; border-radius: 0px; }

1
2
3
4
5
input[type=text], button, select, textarea{
    -webkit-appearance: none;
    -moz-appearance: none;
    border-radius: 0px;
}

您可以根据需要选择重置的表单,例如将 input[type=text] 改变为 input 会选择所有类型的input。

clientX / clientY:      //触摸点相对浏览器窗口的位置
pageX / pageY:       //触摸点相对于页面的位置
screenX  /  screenY:    //触摸点相对于屏幕的位置
identifier:        //touch对象的ID
target:       //当前的DOM元素

3.浮动布局 方法
float clearfix(清除浮动)
/--不需兼容老版本--/
.clearfix:after{
content:"";
display:block;
clear:both;
}
--需要兼容老版本--/
clearfix:after{
content:"";
display:block;
clear:both;
height:0;
visibility:hidden;
}

空白页基本meta标签

2.3 误导的仿真器错误(mulator Errors)

如果您使用基于浏览器的移动仿真器进行测试,有时会产生一些烦人的问题。在您代码没有问题的情况下抛出一个问题,令人纠结。

例如,有一次正在开发中的页面底部的导航条莫名其妙的消失了,正当我准备查找问题原因时,我发现Chrome模拟器的视窗底部被切掉一部分,当我在新tab中打开页面,然后切换移动视图刷新之后就解决了问题。

遇到类似的问题,最为重要的是,要保证您的代码没问题仅仅是模拟器的问题。您可以尝试隔离问题区域看看代码是否正常工作,然后在真正的移动设备上测试一下。

手指在滑动整个屏幕时,会影响浏览器的行为,比如滚动和缩放。所以在调用touch事件时,要注意禁止缩放和滚动。
1.禁止缩放
通过meta元标签来设置。

**优点**        这是传统的浮动方式,写法简单,实现效果起来干脆利落    **缺点**
    对浮动元素要求比较严格,布局也不太灵活

2.4 桌面端表现良好动画的移动端呈现问题

如果您在移动设备上使用动画,请一定要尤其注意动画的性能问题。一般来说,浏览器能够有效的动画以下属性translate、scale、rotate和 opacity等,例如下面的案例。

transform: translate(15px, 40px); /* shift left 15px and down 40px */ transform: scale(2); /* scale to 2 times original size */ transform: rotate(30deg); /* rotate 30 degrees */ opacity: 0.5; /* set opacity at 0.5 */

1
2
3
4
transform: translate(15px, 40px); /* shift left 15px and down 40px */
transform: scale(2); /* scale to 2 times original size */
transform: rotate(30deg); /* rotate 30 degrees */
opacity: 0.5; /* set opacity at 0.5 */

这些属性动画性能良好的原因是,这些属性位于浏览器渲染器的顶层。您可以把一个网页看成一个餐桌,动画这些属性就类似于移动一个调羹,动画底层属性类似于移动整个餐桌布,您需要同时移动上面的所有覆盖物,所以更加费劲一些(性能就会差一点)。

您可以通过阅读这篇文章,了解动画性能的更多信息。

为了最大化的支持您的动画,您可能需要加浏览器前缀(verdor prefix),您也可以到Caniuse了解更多的兼容情况。

另外注意,盒阴影(box-shadow)有时会影响动画性能,所以强烈建议使用盒阴影时注意移动设备的测试。

<meta name="viewport" content="target-densitydpi=320,width=640,user-scalable=no">```
**2.禁止滚动--很重要**
preventDefault是阻止默认行为,touch事件的默认行为就是滚动。

4.定位布局 方法 在布局当中很常用,利用position 四个方位的具体值(top/left/right/bottom)相互配合,实现起来也比较容易 优点
实现简单,在移动端中,定位很常用,尤其是弹窗,
.mask{
position:fixed;
left:50%;
top:50%;
-webkit-transform:translate3d(-50%,-50%,0);
transform:translate3d(-50%,-50%,0);
}
缺点
移动端中频繁的使用定位,会出现一些莫名的bug;
fixed input在ios上存在bug,会出现使用fixed布局的元素乱掉。在android手机上当input框获取焦点时,换气键盘,会出现定位的元素被抬升至手机键盘的上方。(了解)

其他meta标签

2.5 触摸事件(Touch Event)的坐标注册问题

触摸事件的坐标注册问题也比较微妙,因为坐标在不同设备中存储区域不同。一些设备(例如ios)的触摸坐标和单击坐标相同,而另一些(例如android)设备则不同。好消息是,在任何移动设备中都可以通过特定的触摸事件数据(touch event data)获取坐标。

对于触摸事件来说,使用e.touches[0].pageX而非e.pageX获取触摸点的x坐标,获取y坐标也是类似的道理。下面是一些可能实际应用的代码。

JavaScript

/* event */ document.onclick = function(e){ var x = e.pageX; // get x coordinate of click var y = e.pageY; // get y coordinate of click console.log('x = ' x ', y = ' y); // show coordinates in console } /* for touch event */ document.ontouchstart = function(e){ var x = e.touches[0].pageX; // get x coordinate of touch var y = e.touches[0].pageY; // get y coordinate of touch console.log('x = ' x ', y = ' y); // show coordinates in console }

1
2
3
4
5
6
7
8
9
10
11
12
/* event */
document.onclick = function(e){
    var x = e.pageX; // get x coordinate of click
    var y = e.pageY; // get y coordinate of click
    console.log('x = ' x ', y = ' y); // show coordinates in console
}
/* for touch event */
document.ontouchstart = function(e){
    var x = e.touches[0].pageX; // get x coordinate of touch
    var y = e.touches[0].pageY; // get y coordinate of touch
    console.log('x = ' x ', y = ' y); // show coordinates in console
}

大家不妨模拟器里测试下上面的代码。

event.preventDefault();

5.混合布局 方法 所谓混合布局,就是把所有学到的知识灵活运用在布局中。例如:rem 百分比(流动布局) flex rem等 优点 布局灵活,集合其他布局的优势达到自己的布局要求 缺点
代码有点累赘;代码不统一,维护困难

常见问题:

2.6 总结

本文罗列一些响应式网页开发中的一些常见陷阱,并指定了对应的解决方案,希望可以对您为您节省时间,少些麻烦。

欢迎通过评论讨论、指教。

2 赞 4 收藏 评论

澳门新萄京官方网站 1

####3.demo

6.flex布局(重点)
方法
也叫弹性布局。
/--只需父元素设置--/
{
display:-webkit-box; /android2.1-3.0 ios 3.2-4.3/
display:-moz-box; /firefox/
display:-webkit-flex; /chrome 21 /
display:-ms-flexbox; /wp ie 10/
display:flex; /android 4.4/
}
/--然后子元素设置相应的比例--/
{
-webkit-box-flex:1;
-webkit-flex:1;
-ms-flex:1;
flex:1;
}

移动端如何定义字体font-family

//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) {
//上下滑动
}
}

这个是最简单的flex布局了,其实弹性布局里面还有很多简单高效实用的属性,很方便移动端的布局。     **优点**        自适应很好,灵活性很强,目前在移动端应用的还是比较广泛。     **缺点**
    需要写很多兼容代码。

@ --------------------------------------中文字体的英文名称

@ 宋体      SimSun

@ 黑体      SimHei

@ 微信雅黑  Microsoft Yahei

@ 微软正黑体 Microsoft JhengHei

@ 新宋体    NSimSun

@ 新细明体  MingLiU

@ 细明体    MingLiU

@ 标楷体    DFKai-SB

@ 仿宋    FangSong

@ 楷体    KaiTi

@ 仿宋_GB2312  FangSong_GB2312

@ 楷体_GB2312  KaiTi_GB2312 

@@ 说明:中文字体多数使用宋体、雅黑,英文用Helvetica

body { font-family: Microsoft Yahei,SimSun,Helvetica; }

####demo2 学习了!!!

7.rem布局 方法 rem是通过根元素进行适配的,网页中的根元素指的是html我们通过设置html的font-size大小就可以控制rem的大小。有以下两种适配方式:
1.rem @media(通过媒体查询设置html的font-size值,达到自适应)
html{
-webkit-text-size-adjust:none;
font-size:10px;
}
@media screen and (min-width:321px) and (max-width:375px){
html{
font-size:10px;
}
}
@media screen and (min-width:376px) and (max-width:414px){
html{
font-size:10.25px;
}
}
@media screen and (min-width:415px) and (max-width:454px){
html{
font-size:10.5px;
}
}
@media screen and (min-width:455px) and (max-width:554px){
html{
font-size:10.75px;
}
}
@media screen and (min-width:455px){
html{
font-size:11px;
}
}

打电话发短信写邮件怎么实现

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" Content="text/html; charset=utf-8;">
<title>移动端触摸滑动</title>
<meta name="author" content="rainna" />
<meta name="keywords" content="rainna's js lib" />
<meta name="description" content="移动端触摸滑动" />
<meta name="viewport" content="target-densitydpi=320,width=640,user-scalable=no">
<style>
*{margin:0;padding:0;}
li{list-style:none;}

2.rem js(通过js自动获取设备宽度,计算得到相应设备下html的font-size值达到自适应)(了解)

// 一、打电话

.m-slider{width:600px;margin:50px 20px;overflow:hidden;}
.m-slider .cnt{position:relative;left:0;width:3000px;}
.m-slider .cnt li{float:left;width:600px;}
.m-slider .cnt img{display:block;width:100%;height:450px;}
.m-slider .cnt p{margin:20px 0;}
.m-slider .icons{text-align:center;color:#000;}
.m-slider .icons span{margin:0 5px;}
.m-slider .icons .curr{color:red;}
.f-anim{-webkit-transition:left .2s linear;}
</style>
</head>

!function(n) {
var e = n.document,
t = e.documentElement,
i = 720,
d = i / 100,
o = "orientationchange" in n ? "orientationchange": "resize",
a = function() {
var n = t.clientWidth || 320;
n > 720 && (n = 720),
t.style.fontSize = n / d "px"
};
e.addEventListener && (n.addEventListener(o, a, !1), e.addEventListener("DOMContentLoaded", a, !1))
} (window);

打电话给:0755-10086

<body>
<div class="m-slider">
<ul class="cnt" id="slider">
<li>

优点 在任何设备下都可以达到完全适配,页面布局样式完全自适应 缺点
rem @media这种方式不能所有设备全适配

//  二、发短信,winphone系统无效

澳门新萄京官方网站 2

8.响应式布局 方法 使用@media(媒体查询)设置页面在不同的屏幕宽度下达到自适应以及响应式(根据不同屏幕大小,页面布局,样式会做出相应的调整)典型案例(bootStrap官网) 优点 不仅在不同的屏幕下达到自适应,还会在相应的屏幕下对页面布局,样式做出相应的调整,达到更加的用户体验 缺点
兼容各种设备工作量大,效率低下;代码累赘,会出现隐藏无用的元素,加载时间过长;一定程度上改变了网站原有的布局结构,会出现用户混淆的情况;增加UI和开发的工作量。

发短信给: 10086

<p>20140813镜面的世界,终究只是倒影。看得到你的身影,却触摸不到你的未来</p>
</li>
<li>

9.圣杯布局
利用float来实现,首先将三列放到一个父元素内后左浮动,之后给左右中分别设置宽度200px,250px,100%。
之后给中间,右边分别设置margin-left为-200px,-250px。之后再将左右两列进行相对定位position:relative;并分别设置left:-200px;right:-250px;最后便是等高布局了,给左中右设置padding-bottom:2000px;margin-bottom:-2000px;给其父元素设置overflow:hidden即可。
[图片上传中。。。(1)]

// 三、写邮件

澳门新萄京官方网站 3

10.双飞翼布局
用float来实现,首先将左中右分别设置宽度为200px,100%,250px。中右分别设置margin-left为-200px和-250px.中间元素下有一个子元素,设置margin-left和margin-right分别为200px余250px。最后便是等高布局了,给左中右设置padding-bottom:2000px;margin-bottom:-2000px;给其父元素设置overflow:hidden即可。
[图片上传中。。。(2)]

//注:在添加这些功能时,第一个功能以"?"开头,后面的以"&"开头

<p>20140812锡林浩特前往东乌旗S101必经之处,一条极美的铁路。铁路下面是个小型的盐沼,淡淡的有了一丝天空之境的感觉。可惜在此玩了一个小时也没有看见一列火车经过,只好继续赶往东乌旗。</p>
</li>
<li>

[图片上传中。。。(3)]

//1.普通邮件

澳门新萄京官方网站 4

二、杂货
**手机端字体标准 ** font-family: Helvetica, "Microsoft Yahei", "Heiti SC", "Droid Sans", "Droidsansfallback", SimSun, sans-serif;

点击我发邮件

<p>20140811水的颜色为什么那么蓝,我也纳闷,反正自然饱和度和对比度拉完就是这个颜色的</p>

1.触摸事件touch
touchstart 手指放在屏幕上触发
touchmove 手指在屏幕上移动,连续触发
touchend 手指离开屏幕触发
touchcancel 当系统停止跟踪时触发,当一些更高级别的事件发生的时候(如电话接入或者弹出信息)会取消当前的touch操作,即触发ontouchcancel。一般会在ontouchcancel时暂停游戏、存档等操作。
注意:
移动端的事件会触发浏览器的默认行为,所以在调用事件的时候要把默认行为阻止了ev.preventDefault。

//2.收件地址后添加?cc=开头,可添加抄送地址(Android存在兼容问题)

</li>
<li>

document.addEventListener('touchstart',function(ev){
ev.preventDefault();
});
var box=document.getElementById("box");
box.addEventListener('touchstart',function(){
this.innerHTML='手指按下了';
});
box.addEventListener('touchmove',function(){
this.innerHTML='手指移动了';
});
box.addEventListener('touchend',function(){
this.innerHTML='手指离开了';
});

点击我发邮件

澳门新萄京官方网站 5

2.touch事件对象
ev.touches 当前屏幕的手指列表
ev.targetTouches 当前元素上的手指列表
ev.changedTouches 触发当前事件的手指列表
每个touch对象都包含了以下几个属性(打印ev.touches如下):

//3.跟着抄送地址后,写上&bcc=,可添加密件抄送地址(Android存在兼容问题)

<p>海洋星球3重庆天气热得我想卧轨自杀</p>
</li>
<li>

[图片上传中。。。(4)]
clientX //触摸目标在视口中的X坐标。 clientY //触摸目标在视口中的Y坐标。 Identifier //标示触摸的唯一ID。 pageX //触摸目标在页面中的X坐标。 pageY //触摸目标在页面中的Y坐标。 screenX//触摸目标在屏幕中的X坐标。 screenY //触摸目标在屏幕中的Y坐标。
target // 触摸的DOM节点目标。
代码:

点击我发邮件

澳门新萄京官方网站 6

var box=document.getElementById("box");
//相当于mousedown
box.addEventListener('touchstart',function(ev){
//console.log(ev.touches);
this.innerHTML=ev.touches.length;//按下手指数
});

//4.包含多个收件人、抄送、密件抄送人,用分号(;)隔开多个邮件人的地址

<p>以上这些作品分别来自两位设计师作为观者,您能否通过设计风格进行区分</p>
</li>
</ul>
<div class="icons" id="icons">
<span class="curr">1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
</div>
</div>

3.设备加速度事件devicemotion(了解:知道有这么个东西,面试移动端时项目会问到)
devicemotion 封装了运动传感器数据的事件,可以获取手机运动状态下的运动加速度等数据。
其中加速度的数据包含以下三个方向:
x:横向贯穿手机屏幕;
y:纵向贯穿手机屏幕;
z:垂直手机屏幕

点击我发邮件

<script>
var slider = {
//判断设备是否支持touch事件
touch:('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,
slider:document.getElementById('slider'),

[图片上传中。。。(5)]

//5.包含主题,用?subject=

//初始化
init:function(){
    var self = this;     //this指slider对象
    if(!!self.touch) self.slider.addEventListener('touchstart',events,false);    //addEventListener第二个参数可以传一个对象,会调用该对象的handleEvent属性
}

鉴于有些设备没有排除重力的影响,所以该事件会返回两个属性:
1、accelerationIncludingGravity(含重力的加速度)
2、acceleration(排除重力影响的加速度)
注意:这个事件只能放在window身上
demo1:显示重力加速度的值
代码:

点击我发邮件

},

window.addEventListener('devicemotion',function(ev){
var motion=ev.accelerationIncludingGravity;
box.innerHTML='x:' motion.x '
' 'y:' motion.y '
' 'z:' motion.z;
});
demo2:方块跟着重力左右移动
window.addEventListener('devicemotion',function(ev){
var motion=ev.accelerationIncludingGravity;
var x=parseFloat(getComputedStyle(box).left);//box目前的left值
box.style.left=x motion.x 'px';
});

//6.包含内容,用?body=;如内容包含文本,使用 给文本换行

//事件
events = {
index:0, //显示元素的索引
slider:this.slider.slider, //this为window对象,此处用来保存Id为slider的元素
icons:document.getElementById('icons'),
icon:this.icons.getElementsByTagName('span'),
startPos:{},
endPos:{},
handleEvent:function(event){
var self = this; //this指events对象
if(event.type == 'touchstart'){
console.log(event.type);
self.start(event);
}else if(event.type == 'touchmove'){
console.log(event.type);
self.move(event);
}else if(event.type == 'touchend'){
console.log(event.type);
self.end(event);
}
},
//滑动开始
start:function(event){

demo3:摇一摇应用原理
var box=document.getElementById('box');
var lastRange=0; //上一次摇晃的幅度
var isShake=false; //决定用户到底有没有大幅度摇晃

点击我发邮件

        console.log("start");
        var touch = event.targetTouches[0];    //touches数组对象获得屏幕上所有的touch,取第一个touch
        this.startPos = {x:touch.pageX,y:touch.pageY,time: new Date};    //取第一个touch的坐标值
        isScrolling = 0;   //这个参数判断是垂直滚动还是水平滚动
        this.slider.addEventListener('touchmove',this,false);
        this.slider.addEventListener('touchend',this,false);
    },
    //移动
    move:function(event){
        console.log("move");
        //当屏幕有多个touch或者页面被缩放过,就不执行move操作
        if(event.targetTouches.length > 1 || event.scale && event.scale !== 1) return;
        var touch = event.targetTouches[0];
        this.endPos = {x:touch.pageX - this.startPos.x,y:touch.pageY - this.startPos.y};
        isScrolling = Math.abs(this.endPos.x) < Math.abs(this.endPos.y) ? 1:0;    //isScrolling为1时,表示纵向滑动,0为横向滑动
        if(isScrolling === 0){
            event.preventDefault();      //阻止触摸事件的默认行为,即阻止滚屏
            this.slider.className = 'cnt';
            this.slider.style.left = -this.index*600   this.endPos.x   'px';
        }
    },
    //滑动释放
    end:function(event){
        console.log("end");
        var duration =  new Date - this.startPos.time;    //滑动的持续时间
        if(isScrolling === 0){    //当为水平滚动时
            this.icon[this.index].className = '';
            if(Number(duration) > 10){    
                //判断是左移还是右移,当偏移量大于10时执行
                if(this.endPos.x > 10){
                    if(this.index !== 0) this.index -= 1;
                }else if(this.endPos.x < -10){
                    if(this.index !== this.icon.length-1) this.index  = 1;
                }
            }
            this.icon[this.index].className = 'curr';
            this.slider.className = 'cnt f-anim';
            this.slider.style.left = -this.index*600   'px';
        }
        //解绑事件
        this.slider.removeEventListener('touchmove',this,false);
        this.slider.removeEventListener('touchend',this,false);
    }
};

window.addEventListener('devicemotion',function(ev){
var motion=ev.accelerationIncludingGravity;
var x=Math.abs(motion.x);
var y=Math.abs(motion.y);
var z=Math.abs(motion.z);

//7.内容包含链接,含http(s)://等的文本自动转化为链接

slider.init();

var range=x y z;            //当前摇晃的幅度
if(range-lastRange>100){
    //这个条件成立说明用户现在已经在大幅度摇晃
    isShake=true;
}

if(isShake && range<50){
    //这个条件成立,说明用户摇晃的幅度很小了就要停了
    box.innerHTML='摇晃了';
    isShake=false;
}

点击我发邮件

</script>
</body>
</html>

});

//8.内容包含图片(PC不支持)

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2061490-24430291c1948c9e.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

4.media

点击我发邮件

                    min-width:                                 当屏幕大小 大于等于 某个值的时候识别                                                 max-width:                                当屏幕大小 小于等于 某个值的时候识别 
                  关键字:and only not

                                                        @media all and (min-width: 500px) {
            #box{
                background-color: green;
            }
        }

//9.完整示例

5.引入方式

点击我发邮件

1.<link rel="stylesheet" href="01.css" media="all and (min-width:400px)"/>     2.@import url(01.css) (min-width:400px);     3.@media all and (min-width: 500px) {                #box{                        background-color: green;                }
    }

移动端touch事件(区分webkit和winphone)

6.关于bootstrap

/* 当用户手指放在移动设备在屏幕上滑动会触发的touch事件 */

1.栅格化系统 :将一行分为12列
容器:
container
固定宽度

// 以下支持webkit

    container-fluid
    百分比宽度

touchstart——当手指触碰屏幕时候发生。不管当前有多少只手指

行:row
列:lg 大屏幕 大桌面显示器 (≥1200px)
md 中等屏幕 桌面显示器 (≥992px)
sm 小屏幕 平板 (≥768px)
xs 超小屏幕 手机 (<768px)

touchmove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用event的preventDefault()可以阻止默认情况的发生:阻止页面滚动

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,user-scalable=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="bs/css/bootstrap.min.css"/>

touchend——当手指离开屏幕时触发

<style>
body{
margin: 0;
}
div{
height: 100px;
background-color: #f00;
font-size: 50px;
color: #fff;
}
.row div{
height: 100px;
background-color: yellow;
border: 1px solid #000;
}
</style>
</head>

touchcancel——系统停止跟踪触摸时候会触发。例如在触摸过程中突然页面alert()一个提示框,此时会触发该事件,这个事件比较少用

<body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
            <div class="col-lg-1 col-md-2 col-sm-4 col-xs-12"></div>
        </div>
    </div>
</body>

//TouchEvent说明:

</html>

touches:屏幕上所有手指的信息

2.col-md-offset-设置列偏移
<div class="container-fluid">
<div class="row">
<div class="col-md-2 col-md-offset-1">1</div>
<div class="col-md-2 col-md-offset-4">2</div>
</div>
</div>
3..col-md-push-
(往后) 和 .col-md-pull-*(往前) 列排序4. hidden-xs 超小屏幕消失
visible-xs 超小屏幕显示

targetTouches:手指在目标区域的手指信息

7.移动端适配

changedTouches:最近一次触发该事件的手指信息

1.百分比适配

touchend时,touches与targetTouches信息会被删除,changedTouches保存的最后一次的信息,最好用于计算手指信息

弊端:height无法设置
2.viewport 适配

//参数信息(changedTouches[0])

   原理:就是用js把所有设备的viewport设置成一样的

clientX、clientY在显示区的坐标

3.rem适配
1rem=根节点的字体大小
动态设置根节点的字体大小

target:当前元素

8.了解(meta)

//事件响应顺序

页面描述

ontouchstart  > ontouchmove  > ontouchend > onclick

 <meta name="description" content="不超过150个字符" />

// 以下支持winphone 8

页面关键词
<meta name="keywords" content="html5, css3, 关键字"/>

MSPointerDown——当手指触碰屏幕时候发生。不管当前有多少只手指


MSPointerMove——当手指在屏幕上滑动时连续触发。通常我们再滑屏页面,会调用css的html{-ms-touch-action: none;}可以阻止默认情况的发生:阻止页面滚动

为移动设备添加 viewport
<meta name ="viewport" content ="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">

MSPointerUp——当手指离开屏幕时触发

百度禁止转码
<meta http-equiv="Cache-Control" content="no-siteapp" />

移动端click屏幕产生200-300ms的延时响应

禁止数字自动识别为电话号码
<meta name="format-detection" content="telephone=no">

说明:移动设备上的web网页是有300ms延迟的,玩玩会造成按钮点击延迟甚至是点击失效。

禁止自动自动识别地址
<meta name="format-detection" content="address=no">

以下是历史原因,来源一个公司内一个同事的分享:

禁止自动自动识别日期
<meta name="format-detection" content="date=no">

2007年苹果发布首款iphone上IOS系统搭载的safari为了将适用于PC端上大屏幕的网页能比较好的展示在手机端上,使用了双击缩放(double tap to zoom)的方案,比如你在手机上用浏览器打开一个PC上的网页,你可能在看到页面内容虽然可以撑满整个屏幕,但是字体、图片都很小看不清,此时可以快速双击屏幕上的某一部分,你就能看清该部分放大后的内容,再次双击后能回到原始状态。

关闭电话号码的自动识别:
<meta name="format-detection" content="telephone=no" />
开启电话功能
<a href="tel:123456">123456</a>
开启短信功能:
<a href="sms:123456">123456</a>

双击缩放是指用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例。

禁止自动自动识别 Email
<meta name="format-detection" content="email=no">

原因就出在浏览器需要如何判断快速点击上,当用户在屏幕上单击某一个元素时候,例如跳转链接,此处浏览器会先捕获该次单击,但浏览器不能决定用户是单纯要点击链接还是要双击该部分区域进行缩放操作,所以,捕获第一次单击后,浏览器会先Hold一段时间t,如果在t时间区间里用户未进行下一次点击,则浏览器会做单击跳转链接的处理,如果t时间里用户进行了第二次单击操作,则浏览器会禁止跳转,转而进行对该部分区域页面的缩放操作。那么这个时间区间t有多少呢?在IOS safari下,大概为300毫秒。这就是延迟的由来。造成的后果用户纯粹单击页面,页面需要过一段时间才响应,给用户慢体验感觉,对于web开发者来说是,页面js捕获click事件的回调函数处理,需要300ms后才生效,也就间接导致影响其他业务逻辑的处理。

邮箱的自动识别:
<meta content="email=no" name="format-detection" />
同样地,我们也可以通过标签属性来开启长按邮箱地址弹出邮件发送的功能:
<a mailto:dooyoe@gmail.com">dooyoe@gmail.com</a>
<metahttp-equiv="X-UA-Compatible"content="IE=8">
<metahttp-equiv="X-UA-Compatible"content="IE=7">
还有一种情况,在IE8下只有不使用兼容模式页面才能显示正常,但是如果设定为IE8的模式,在IE9中却会导致CSS3失效。看来,需要针对 IE8、IE9 分别 禁用兼容模式。怎么办呢?可以在后台判断浏览器版本,如果是 IE8就输出content="IE=8",如果是IE9就输出 content="IE=9"。其实还可以单纯通过HTML来实现的,HTML代码如下:
<metahttp-equiv="X-UA-Compatible"content="IE=9; IE=8; IE=7; IE=EDGE">

//解决方案:

9.弹性盒子
** ** 1. box-sizing:border-box/ (没有继承) 给自己加
效果,压边框到盒子里
padding-box/content-box 没用

fastclick可以解决在手机上点击事件的300ms延迟

chrome51:padding-box不好使
FF47: padding-box好使

zepto的touch模块,tap事件也是为了解决在click的延迟问题

盒模型:width padding border

Rentina显示屏原理及设计方案

  border-box: width

                     代码:

                                           <html>
<head>
    <title>box-sizing</title>
</head>
<style>
  *{
      margin: 0;
      padding: 0;
  }
    .box{
        width: 100%;
        height: 100px;
        background: cornflowerblue;
        border:10px solid #000;
        padding: 0 10px;
        box-sizing: border-box;
    }
    nav{
        height: 100px;
        margin-top: 50px;
        background: #f60;
        width: 100%;
    }
    nav ul{
        width: 100%;
         display:-webkit-box;

    }
    .nav1{
        -webkit-box-direction:reverse;/*翻转*/
    }
    nav ul li{
          height: 100px;
          -webkit-box-flex:1;
          list-style: none;
          background:aqua;
    }
    .ben{
        width: 100px;
        height: 500px;
        background: red;
        display:-webkit-box;
    }
    .ben li{
        list-style: none;
        -webkit-box-flex:1;
    }
</style>
<body>
       <div class="box">aaaaaa--box-sizing:border-box; 对border和padding都有效果,
        都会压进去(没有继承)给自己加。ie8 ,chrome,ff。其他两个值不好用,
        padding-box在chrome5.1不好用ff47好用</div>
        <nav class="nav">
             <ul>
                 <li>1</li>
                 <li>2</li>
                 <li>3</li>
                 <li>4</li>
                 <li>5</li>
             </ul>
        </nav>
        <nav class="nav1">
             <ul>
                 <li>1</li>
                 <li>2</li>
                 <li>3</li>
                 <li>4</li>
                 <li>5</li>
             </ul>
        </nav>
</body>

说明:retina屏是一种具备超高像素密度的液晶屏,同样大小的屏幕上显示的像素点由1个变为多个,如在同样带下的屏幕上,苹果设备的retina显示屏中,像素点1个变为4个。

</html>

在高清显示屏中的位图被放大,图片会变得模糊,因此移动端的视觉稿通常会设计为传统PC的2倍。

内阴影:m
box-shadow:inset 0 2px 2px #ccc;
弹性盒子:
父级:
display:-webkit-box;

那么,前端的应对方案是:设计稿切出来的图片长宽保证为偶数,并使用backgroud-size把图片缩小为原来的1/2

-webkit-box-orient:vertical; 竖直方向

-webkit-box-direction:reverse; 翻转

-webkit-box-pack:center; 水平居中
  start/end

-webkit-box-align:center; 垂直居中
  start/end

//例如图片宽高为:200px*200px,那么写法如下

子级:
-webkit-box-flex:1;
1:占几份
<!DOCTYPE html>
<html>
<head>
<meta charset="{CHARSET}">
<title></title>
<style>
{margin: 0; padding: 0;}
div{
width: 200px;
height: 500px;
}
ul{
-webkit-box-orient:vertical; /
竖直方向*/
}
ul li{
-webkit-box-flex:1;
list-style: none;
background: red;
margin: 20px 0;
}
</style>
</head>
<body>
<div>
<ul>
<li>1</li>
<li>1</li>
<li>1</li>
<li>1</li>
<li>1</li>
</ul>
</div>

.css{width:100px;height:100px;background-size:100px 100px;}

</body>

//其它元素的取值为原来的1/2,例如视觉稿40px的字体,使用样式的写法为20px

</html>

.css{font-size:20px}

** bootstrap常用的东西自己下去了解**

//image-set设计Rentina背景图

** ** [图片上传中。。。(6)] [图片上传中。。。(7)] [图片上传中。。。(8)] [图片上传中。。。(9)] [图片上传中。。。(10)] [图片上传中。。。(11)] [图片上传中。。。(12)] [图片上传中。。。(13)] [图片上传中。。。(14)] [图片上传中。。。(15)]

image-set,webkit私有属性,也是CSS4的属性,为解决Rentina屏幕下的图像而生。

.css {

    background: url(images/bg.jpg) no-repeat center;

    background: -webkit-image-set(

    url(images/bg.jpg) 1x,    //支持image-set普通屏

    url(images/bg-2x.jpg) 2x); //支持image-set的Rentinan

}

点击元素产生背景或边框怎么去掉

/ios用户点击一个链接,会出现一个半透明灰色遮罩, 如果想要禁用,可设置-webkit-tap-highlight-color的alpha值为0去除灰色半透明遮罩;

//android用户点击一个链接,会出现一个边框或者半透明灰色遮罩, 不同生产商定义出来额效果不一样,可设置-webkit-tap-highlight-color的alpha值为0去除部分机器自带的效果;

//winphone系统,点击标签产生的灰色半透明背景,能通过设置去掉;

//特殊说明:有些机型去除不了,如小米2。对于按钮类还有个办法,不使用a或者input标签,直接用div标签

a,button,input,textarea {

    -webkit-tap-highlight-color: rgba(0,0,0,0);

    -webkit-user-modify:read-write-plaintext-only; //-webkit-user-modify有个副作用,就是输入法不再能够输入多个字符

// 也可以

* { -webkit-tap-highlight-color: rgba(0,0,0,0); }

//winphone下

美化表单元素

//一、使用appearance改变webkit浏览器的默认外观

input,select { -webkit-appearance:none; appearance: none; }

//二、winphone下,使用伪元素改变表单元素默认外观

//1.禁用select默认箭头,::-ms-expand修改表单控件下拉箭头,设置隐藏并使用背景图片来修饰

select::-ms-expand { display:none; }

//2.禁用radio和checkbox默认样式,::-ms-check修改表单复选框或单选框默认图标,设置隐藏并使用背景图片来修饰

input[type=radio]::-ms-check,

input[type=checkbox]::-ms-check { display:none; }

//3.禁用pc端表单输入框默认清除按钮,::-ms-clear修改清除按钮,设置隐藏并使用背景图片来修饰

input[type=text]::-ms-clear,

input[type=tel]::-ms-clear,

input[type=number]::-ms-clear { display:none; }

移动端字体单位font-size选择px还是rem

// 如需适配多种移动设备,建议使用rem。以下为参考值:

html { font-size: 62.5%; }  //10*16 = 62.5%

//设置12px字体  这里注意在rem前要加上对应的px值,解决不支持rem的浏览器的兼容问题,做到优雅降级

body { font-size:12px; font-size:1.2rem; }   

超实用的CSS样式

//去掉webkit的滚动条——display: none;

//其他参数

::-webkit-scrollba //滚动条整体部分

::-webkit-scrollbar-thumb  //滚动条内的小方块

::-webkit-scrollbar-track  //滚动条轨道

::-webkit-scrollbar-button  //滚动条轨道两端按钮

::-webkit-scrollbar-track-piece  //滚动条中间部分,内置轨道

::-webkit-scrollbar-corner      //边角,两个滚动条交汇处

::-webkit-resizer            //两个滚动条的交汇处上用于通过拖动调整元素大小的小控件

// 禁止长按链接与图片弹出菜单

a,img { -webkit-touch-callout: none }   

// 禁止ios和android用户选中文字

html,body {-webkit-user-select:none; user-select: none; }

// 改变输入框placeholder的颜色值

::-webkit-input-placeholder { /* WebKit browsers */

color: #999; }

:-moz-placeholder { /* Mozilla Firefox 4 to 18 */

color: #999; }

::-moz-placeholder { /* Mozilla Firefox 19 */

color: #999; }

:-ms-input-placeholder { /* Internet Explorer 10 */

color: #999; }

input:focus::-webkit-input-placeholder{ color:#999; }

// android上去掉语音输入按钮

input::-webkit-input-speech-button {display: none}

// 阻止windows Phone的默认触摸事件

/*说明:winphone下默认触摸事件事件使用e.preventDefault是无效的,可通过样式来禁用,如:*/

html { -ms-touch-action:none; } //禁止winphone默认触摸事件

取消input在ios下,输入的时候英文首字母的默认大写

手机拍照和上传图片

//IOS有拍照、录像、选取本地图片功能,部分Android只有选择本地图片功能。Winphone不支持

屏幕旋转的事件和样式

//JS处理

function orientInit(){

    var orientChk = document.documentElement.clientWidth > document.documentElement.clientHeight?'landscape':'portrait';

    if(orientChk =='lapdscape'){

        //这里是横屏下需要执行的事件

    }else{

        //这里是竖屏下需要执行的事件

    }

}

orientInit();

window.addEventListener('onorientationchange' in window?'orientationchange':'resize', function(){

    setTimeout(orientInit, 100);

},false)   

//CSS处理

//竖屏时样式

@media all and (orientation:portrait){  }

//横屏时样式

@media all and (orientation:landscape){  }

audio元素和video元素在ios和andriod中无法自动播放

//音频,写法一

你的浏览器还不支持哦

//音频,写法二

    优先播放音乐bg.ogg,不支持在播放bg.mp3

//JS绑定自动播放(操作window时,播放音乐)

$(window).one('touchstart', function(){

    music.play();

})

//微信下兼容处理

document.addEventListener("WeixinJSBridgeReady", function () {

    music.play();

}, false);

//小结

//1.audio元素的autoplay属性在IOS及Android上无法使用,在PC端正常

//2.audio元素没有设置controls时,在IOS及Android会占据空间大小,而在PC端Chrome是不会占据任何空间

重力感应事件

// 运用HTML5的deviceMotion,调用重力感应事件

if(window.DeviceMotionEvent){

    document.addEventListener('devicemotion', deviceMotionHandler, false)

var speed = 30;

var x = y = z = lastX = lastY = lastZ = 0;

function deviceMotionHandler(eventData){

    var acceleration = event.accelerationIncludingGravity;

    x = acceleration.x;

    y = acceleration.y;

    z = acceleration.z;

    if(Math.abs(x-lastX)>speed || Math.abs(y-lastY)>speed || Math.abs(z-lastZ)>speed ){

        //这里是摇动后要执行的方法

        yaoAfter();

    }

    lastX = x;

    lastY = y;

    lastZ = z;

}

function yaoAfter(){

    //do something

}

//说明:说见案例摇一摇效果中yao.js

微信浏览器用户调整字体大小后页面矬了,怎么阻止用户调整

//以下代码可使Android机页面不再受用户字体缩放强制改变大小,但是会有1S左右延时,期间可以考虑loading来处理

if (typeof(WeixinJSBridge) == "undefined") {

    document.addEventListener("WeixinJSBridgeReady", function (e) {

        setTimeout(function(){

            WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize':0}, function(res){

                alert(JSON.stringify(res));

            })

        }, 0)

    });

}else{ 

    setTimeout(function(){

        WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize':0}, function(res){

            alert(JSON.stringify(res));

        })

    }, 0) 

}

//IOS下可使用 -webkit-text-size-adjust禁止用户调整字体大小

body { -webkit-text-size-adjust:100%!important; }

//最好的解决方案:最好使用rem或百分比布局

定位的坑

//fixed定位

//1.ios下fixed元素容易定位出错,软键盘弹出时,影响fixed元素定位

//2.android下fixed表现要比iOS更好,软键盘弹出时,不会影响fixed元素定位

//3.ios4下不支持position:fixed

//解决方案:使用[Iscroll](

              .....

    var myscroll;

    function loaded(){

        myscroll=new iScroll("wrapper");

    }

    window.addEventListener("DOMContentLoaded",loaded,false);

//position定位

//Android下弹出软键盘弹出时,影响absolute元素定位

//解决方案:

var ua = navigator.userAgent.indexOf('Android');

if(ua>-1){

    $('.ipt').on('focus', function(){

        $('.css').css({'visibility':'hidden'})

    }).on('blur', function(){

        $('.css').css({'visibility':'visible'})

    })

}

播放视频不全屏

1.ios7 支持自动播放

2.支持Airplay的设备(如:音箱、Apple TV)播放

x-webkit-airplay="true"

3.播放视频不全屏

webkit-playsinline="true"

-->

JS判断设备

function deviceType(){

    var ua = navigator.userAgent;

    var agent = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];   

    for(var i=0; i

        if(ua.indexOf(agent[i])>0){       

            break;

        }

    }

}

deviceType();

window.addEventListener('resize', function(){

    deviceType();

})

JS判断微信浏览器

function isWeixin(){

    var ua = navigator.userAgent.toLowerCase();

    if(ua.match(/MicroMessenger/i)=='micromessenger'){

        return true;

    }else{

        return false;

    }

}

android 2.3 bug

//1.@-webkit-keyframes 需要以0%开始100%结束,0%的百分号不能去掉

//2.after和before伪类无法使用动画animation

//3.border-radius不支持%单位,如要兼容,可以给radius设置一下较大的值

//4.translate百分比的写法和scale在一起会导致失效,例如:

-webkit-transform: translate(-50%,-50%) scale(-0.5, 1)

android 4.x bug

//1.三星 Galaxy S4中自带浏览器不支持border-radius缩写

//2.同时设置border-radius和背景色的时候,背景色会溢出到圆角以外部分

//3.部分手机(如三星),a链接支持鼠标:visited事件,也就是说链接访问后文字变为紫色

//4.android无法同时播放多音频audio

消除transition闪屏

.css {

    -webkit-transform-style: preserve-3d;

    -webkit-backface-visibility: hidden;

    -webkit-perspective: 1000;

}

开启硬件加速

//目前,像Chrome/Filefox/Safari/IE9 以及最新版本Opera都支持硬件加速,当检测到某个DOM元素应用了某些CSS规则时就会自动开启,从而解决页面闪白,保证动画流畅。

.css {

    -webkit-transform: translate3d(0,0,0);

    -moz-transform: translate3d(0,0,0);

    -ms-transform: translate3d(0,0,0);

    transform: translate3d(0,0,0);

}

渲染优化

//1.禁止使用iframe(阻塞父文档onload事件)

//2.禁止使用gif图片实现loading效果(降低CPU消耗,提升渲染性能)

//使用CSS3代码代替JS动画;

//开启GPU加速;

//使用base64位编码图片(不小图而言,大图不建议使用)

    // 对于一些小图标,可以使用base64位编码,以减少网络请求。但不建议大图使用,比较耗费CPU。小图标优势在于:

    //1.减少HTTP请求;

    //2.避免文件跨域;

    //3.修改及时生效;

常用的移动端框架

zepto.js

官网

中文网

浏览器检测

tap事件

项目主页:http://www.open-open.com/lib/view/home/1449325854077

扩展阅读

Hybrid APP架构设计思路

H5 App开发框架汇总

H5性能优化方案

H5、React Native、Native应用对比分析

iOS开发者必备:自己总结的iOS、mac开源项目及库

为您推荐

用于转换PDF,TXT,HTML和图片的实用PHP代码片段

hackathon-starter - A boilerplate for Node.js web applications

实现Instagram的Material Design概念设计

HTML编辑器的CKeditor配置使用方法

基于jQuery的一个简单的图片查看器

更多

H5

HTML5

本文由澳门新萄京官方网站发布于澳门新萄京赌场网址,转载请注明出处:澳门新萄京官方网站手提式有线电话机端事件,

关键词: