一.css部分

1.meta标签

<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>

移动端加上这个标签才是真正的自适应,不加的话,假如你把一个980px宽度(手机端常规是980)的PC网页 放在手机上显示,倒也能正常显示不出现滚动条,不过是移动设备对页面 做了缩小优化,所以字体等都相应缩小了 (980px是相对于手机像素的,我的是超过1000px多一些就出现滚动条了,这个没具体研究)。

关于 initial-scale=1 ,这个参照iphone5的尺寸320568,如果你页面按照6401136做的话,scale就设为0.5

<meta content="yes" name="apple-mobile-web-app-capable">   IOS中safari允许全屏浏览
<meta content="black" name="apple-mobile-web-app-status-bar-style">  IOS中Safari顶端状态条样式
<meta content="telephone=no" name="format-detection">  忽略将数字变为电话号码
<meta content="email=no" name="format-detection">   忽略识别email

2.图片尺寸 做全屏显示的图片时,一般为了兼容大部分的手机,图片尺寸一般设为640*960(我是觉得这个尺寸好,也看不少的图片也是这个尺寸,视情况而定)

3.去除webkit的滚动条

element::-webkit-scrollbar{
display: none;
}

如果要去除全部的,就把element去掉 同时这个属性可让在div里的滚动如丝般顺滑:-webkit-overflow-scrolling:touch;

4.去除buttonios上的默认样式

-webkit-appearance: none;
border-radius: 0 

5. placeholder元素样式的修改

input::-webkit-input-placeholder{color:red;}
input:focus::-webkit-input-placeholder{color:green;}

6.不想让按钮touch时有蓝色的边框或半透明灰色遮罩(根据系统而定)

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

7.在移动端做动画效果的话,如果通过改变绝对定位的top,或者margin的话做出来的效果很差,很不流畅,而使用css3transitiontransform或者animation的效果将会非常棒(这一方面IOSandroid又要好不少)。 如果用**3dtranslate3d来实现动画,会开启GPU加速,动画会更加流畅,但硬件配置差的安卓用起来会耗很多性能

8.使用图片时,会发现图片下总是有大概4px的空白,(原因据说图片是inline,触发baseline什么的。。。)常用解决方法有

img{display:block};
img{vertical-align:top}

也可取其他几个值,视情况而定

9.关于使用弹性盒子box布局 暂时有三种方案:

display:-webkit-box; // 早期的版本
display:-webkit-box-flex; // 过渡版本
display:-webkit-flex; // 最新的版本

我暂时使用的是display:-webkit-box;暂时只有这个的兼容性最好,flex是最好用,还可以如float一样排多个元素时自动换行,只是兼容性还太差,(即使是第一种,在火狐下兼容性也不是很好) 对于第一种常见用法是:

<ul class="box"><li class="box_flex">1</li><li class="box_flex">2</li><li class="box_flex">3</li>
</ul>
.box {display: -webkit-box;-webkit-box-align: center; // 设置里面的元素垂直居中 -webkit-box-pack: center; // 设置水平居中
}
.box .box_flex1 {box-flex: 1;-webkit-box-flex: 1;-moz-box-flex: 1;display: block;width: 0;
}

要想三个li元素平分box的宽度,width:0是关键(在这个坑里陷了好久,直到偶然的一次设置了width0突然就好了,后来在天猫上也看到了同样的设置width:0

10.使用a标签的话,尽量让a标签block,尽量让用户可点击区域最大化

11.对两个div使用了transform之后,div下的z-index有时就会失效,我遇到过,但没去认真探究,只是把z-index提高就好了

12.iOS中,当你点击比如input准备输入时,虚拟键盘弹出,整个视窗的 高度 就会变为 减去键盘 的高度,加入你在底部有fixed的元素比如btn,这个元素就会跑上来,一般都不会太美观。我是当focus时就把它设为absolute,视情况而定,也有比如显示一个新的层,将含有fixed按钮的那一层隐藏的情况等等。 另外一种情况(一般在页面内容很少时iphone5及以上常发生),当输入框弹出时fixed元素挤到输入框上,当输入框消失时,fixed元素并没有随着输入框的消失而回到底部,这是因为整个视窗的高度还保持在 减去键盘的 高度,需要手动去触发让视窗高度回到正常,然后试了很多方法都没成功,后来的方案是输入框消失时给页面加隐形的很大的padding比如1000px并在30ms后改为正常

13.禁止用户选中文字-webkit-user-select:none

14.当把input设为width:100%时,有时可能会遇到input的宽度超出了屏幕,这时可对input加一个属性box-sizing:border-box

关于box-sizing:border-box,此属性是把边框的宽度和padding包含在盒子的高宽中,假如你设置两个元素float且各占50%,又都有border时,用这个属性就可以完美地让它们能显示在同一行

15.做一个方向箭头比如 “>” 时,可以用一个正方形的div,设置border:1px1px00;然后rotate(45deg),这样就省去了一个图片

16. CSS权重:style1000id100class10,普通如lidiv和伪类是1,通用如*0

17.使用rem时,设某个div比如的height:3rem;line-height:1.5rem;overflow:hidden;时,在某些android手机上可能会出现显示不止两行,第三行会显示点头部。 解决:利用js获取文字line-height再去设置div高度

18.使用background时,background-position里使用了比如center left后不能再加具体的数值去定位,比如center10pxleft(暂时兼容性差)

19.使用rem布局时,由于webkit支持的最小字体大小是12px,所以使用html使用62.5%实际是12px,这样很难计算,我的做法是设置成625%100px,然后1rem就相当于100px

20.移动端字体使用font-family:Helvetica,sans-serif;我看这也是天猫使用的

21.iphone原生键盘上用keyup统计字符数时,系统不会自动监控你选择文字的事件,比如打了多个拼音,可能选择的实际文字比输入的字符数多或者少,但无法在用户确定自己的输入时监控到keyup(其他事件也一样)判断字符数。 改成input事件就可以了

22.实现毛玻璃效果,透过背景看其他元素模糊,自身元素不模糊。

-webkit-backdrop-filter: saturate(180%) blur(20px);
background: rgba(0,0,0,0.5);

这个效果暂时只有IOS9上的safari可以。 用css3blur效果的话,是整层元素全部模糊,而透过模糊层看其他的元素不模糊

23.如果需要展示小于12px的文字,用transform:scale(%);它将元素缩小,但本身应该占的空间并不会变小,所以比如要元素居左对齐的话,还需设置translateX

24.在移动端对input框使用disabled属性,会导致元素里面value值在页面上被隐藏看不见,可以对元素使用css3效果pointer-event:none,意思就是此元素对鼠标事件无效

二.js部分

1.如果使用jquery绑定touch事件的话,获取touchstarttouchmove的触点坐标用e.originalEvent.targetTouches[0].pageX,获取touchend则用e.originalEvent.changedTouches[0].pageX

2.利用style获取获取transformrotate

parseInt(/rotateX\((.*?)\)/.exec(getALL.style.webkitTransform)[1])
如果页面一开始没有`style`值,`rotate`是写在`CSS`里的,需要用到`getComputedStyle`,具体请看[这里][5]

3.有些版本的 iphone4中, audio和 video默认播放事件不会触发,比如使用 window.onload或计时器等都不能触发播放,必须用 JS写事件让用户手动点击触发才会开始播放,比如


  1. $(document).one('touchstart',function(){

  2. audio.play();

  3. })

4.想要在 touchmove:function(e,参数一)加一个参数,结果直接使用 e.preventDefault()就会 e 报错,处理方法为


  1. touchmove:function(e,参数一){

  2.   var e=arguments[0]

  3. e.preventDefault()

  4. }

5.移动端的一些小页面可能没必要用到 zepto.js 这些工具库,就可以使用一些新一点的 api ,比如选取元素用 querySelector(".class #id") querySelectorAll(".class element") ,操作 class 可以用 classList

6.点击一个元素时,使用 touchstart会立即触发,而使用 click则用有大概 0.3s的延迟 想模拟一个立即触发的点击事件有两种方法, fastclick.js和 zepto.js里的 tap事件。

不过 zepto的 tap事件有一个事件穿透的问题。假如你 tap一个弹出层元素(这个元素遮罩了一个 a标签),这个元素立即消失,这样由于上述的 0.3s延迟 tap事件就会传递给 a标签成 click事件造成a标签跳转。 以上面的例子来说,解决方案视情况而定:

① tap时让遮罩渐隐消失,这个过程超过 400ms就不会穿透到下一层去了

② 在 touchend事件回调中加入 preventDefault, 并在下一层中加上 pointer-events:none。(这个没用过)

③ 有的时候比如弹出一个 iphone上滑动出来的层,点击黑色半透明区域弹出层消失,这种可以在黑色区域绑定 touchend也是和 tap差不多的效果

7.当弹窗出现时,想禁止屏幕的滑动,给那个遮罩层添加 touchmove事件即可,用 e.preventDefault()会阻止的 scroll, click等事件,消失时再 off掉,


  1. $(".body_cover").on("touchmove", function(e) {

  2. e.preventDefault();

  3. });

8.使用 input file 上传文件时,可以指定接受的类型, accept="image/png,image/jpeg,image/gif" ,同时在 android 上默认不能使用相机,可以加 capture="camera" 同时,由于原生的样式不好看,可以通过设置input的display:none,然后使用id.click()去触发input元素的点击。

9.给元素加:active伪类时,如果要求高,兼容性好的话,就得用js监控touchstart然后加相应的class


  1. $(document).on("touchstart", function(e) {

  2. var target = $(e.target);

  3. if (target.hasClass("is_hover")) {

  4. target.addClass("hover_css");

  5. }

  6. });

三、微信部分

1.判断是否来自微信浏览器

function isFromWeiXin() {var ua = navigator.userAgent.toLowerCase();if (ua.match(/MicroMessenger/i) == "micromessenger") {return true;}return false;
}

2.判断手机的类型

var user="";
if (/android/i.test(navigator.userAgent)){//  androiduser="1";
}
if (/ipad|iphone|mac/i.test(navigator.userAgent)){//  iosuser="0";}

3.如果在网页里嵌套一个iframesrc为其他的网址等,当在微信浏览器打开时,如果iframe里的页面过大,则iframesrc不能加载(具体多大不知道,只是遇到过)。

4.微信jssdk里预览图片接口,图片的url不能填base64编码,ios上会很卡,估摸着微信得卡个5秒左右才打得开,而android上压跟就卡住或者一直卡在读取图片界面

5.微信当在输入框里输入消息时,会提示警示框不要输入qq密码等,这个可以在公众平台的功能设置的业务域名设置

6.微信里假如页面一使用ajax获取数据,当你进入下一页面再按返回键返回页面一的时候,有些情况不会去请求ajax数据,会使用缓存,然而ajax来的数据又并没有存在缓存里。要设置cache:false(iphone、android的某些手机都可能出现)

7.在微信js config的时候,如果URL的参数有如?a={"param":"1"},会导致签名失败。给参数用encodeURIComponent编码后再传过去也是失败!研究了好久。(后台代码没做任何修改,只在我前端修改代码)。所以最后还是使用了?param=1这样的格式

web前端 —— 移动端知识的一些总结相关推荐

  1. web前端 — 移动端知识的一些总结

    一.css部分 1.用transition做动画时,变形尽量通过transform来实现,而不是用height,width等属性.transform可明显减少重绘.重画 meta标签 <meta ...

  2. web前端移动端项目测试的几种方法

    web前端移动端项目测试的几种方法 本人只是个做前端刚刚半年的小白 技术还不熟练  见识也不够广   希望大家不喜勿喷 如果有不对的地方欢迎大家指出  我更加会努力的学习  提高自己的水平! 本人只是 ...

  3. 阿里云视频直播 web前端[移动端] Aliplayer的简单案例

    阿里云视频直播 web前端[移动端] Aliplayer的简单案例 最近做了一个功能就是播放后台提供的各种直播视频,格式在未确定的情况下,刚开始以为简单的一个video标签就能播放视频,后面才发现各种 ...

  4. 千锋教育Web前端——PC端企业类型整页制作

    千锋教育Web前端--PC端企业类型整页制作 文章目录 千锋教育Web前端--PC端企业类型整页制作 一.PC端的布局 二.源码 1.CSS源码 2.HTML源码 三.运行结果 一.PC端的布局 通栏 ...

  5. web前端/移动端H5博客专家博客大全--值得收藏的前端技术大牛博客地址

    web前端/移动端H5博客专家博客大全--值得收藏的前端技术大牛博客地址   Huang Jie Blog .Com-前端开发  http://www.huangjieblog.com/?feed=r ...

  6. 好程序员web前端教程分享web前端入门基础知识

    好程序员web前端教程分享web前端入门基础知识,作为合格的Web前端工程师必须得掌握HTML.CSS和JavaScript.只懂其中一两个还不行,必须对这三门语言都要熟悉.下面我们一起来看一看吧! ...

  7. web前端开发基础知识整理以及前端视频教程

    随着移动互联网的发展和越来越多创业公司的加入,Web前端工程师的岗位空缺越来越大,薪资迅速上涨.Web前端工程师比以往更具有号召力. 想要自学成为炙手可热的Web前端工程师?靠零碎化的短视频可不行,你 ...

  8. web前端-移动端HTML5微商城项目实战分享案例

    HTML5+css3移动端H5项目案例实战.web前端开发移动端webApp案例源码.H5爆款试客商城.手机商城网站实例源码模板!!!             主张原创设计,拒绝数量.追求质量,100 ...

  9. 网页编程从入门到精通 杨凡_干货 | web前端入门基础知识

    一名合格的web前端工程师必须得掌握HTML.CSS和JavaScript. 只懂其中一个或两个还不行,你必须对这三门语言都很熟悉. 也不是说必须对这三门语言都非常精通,但你至少要能够运用它们完成大多 ...

最新文章

  1. 游戏开发--开源21---CroftSoft Code Library |Gibdo|JOGR...
  2. 【c语言】求n个整数的和
  3. CTF---密码学入门第一题 这里没有key
  4. android热更新插件,与Android热更新方案Amigo的再次接触
  5. 全球及中国本质安全校准器行业销售前景与竞争规模预测报告2022-2027年
  6. 牛客题霸 NC17 最长回文子串
  7. 有一个1,2,3....49 的数组,通过控制台显示为7行7列的,并且里面的数据时随机的代码...
  8. TypeScript里对数组元素的自定义属性排序的实现原理
  9. flex布局_flex布局的 flex(felx-grow、flex-shrink、flex-basis)详解
  10. leetcode python3 简单题83. Remove Duplicates from Sorted List
  11. 天堂2单机版服务器时间修改,L2Jserver版本天堂2进游戏公告的修改
  12. 如何更改html的默认应用,win10如何修改默认应用
  13. Markdown常用字体 大小 颜色和背景设置
  14. 从零开始搭建腾讯云服务器
  15. keyboard ios 虚拟键盘 删除键的响应
  16. SSM 电影后台管理项目
  17. JVM总结之垃圾回收详解
  18. 全国22家奶粉企业69批次产品检出三聚氰胺
  19. 推荐几款好用的VsCode色彩主题
  20. Hadoop-2.5.2集群安装配置详解

热门文章

  1. java byte array_Java IO: ByteArray和Filter
  2. 使用lucce分词怎么_真小叮当深度学习:自然语言处理(三)文本处理之分词专题...
  3. vary渲染图没了_云渲染哪个好用?云渲染平台对比
  4. linux apache 文件服务器,Linux下搭建Apache服务器全过程详解
  5. 如何将两个集合合并_如何将剪切的音频文件进行合并
  6. java个人所得税计算_java个人所得税计算器 | 学步园
  7. Linux中如何使用mysql和php_hi 感恩节——Linux基础教程之mysql和php
  8. python软件安装及设置_入门Python——1.软件安装与基础语法
  9. kafka教程视频百度网盘下载,聊一聊-MySQL-数据库中的那些锁
  10. 机器学习(MACHINE LEARNING)MATLAB进行概率统计分析