打个招聘广告: 杭州 阿里巴巴B2B 招前端(想去西溪的也可帮引荐),比较缺人,时机多多!广告位长期有效,有兴致简历我邮箱:854936875@qq.com
个人在挪动端的一些总结归结,有新的知识点会一向更新
一.css部份
1.用transition做动画时,变形只管经由历程transform来完成,而不是用height,width等属性。transform可显著削减重绘、重画
1.meta标签
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>
挪动端加上这个标签才是真正的自适应,不加的话,假如你把一个980px宽度(手机端通例是980)的PC网页
放在手机上显现,倒也能平常显现不涌现转动条,不过是挪动装备对页面 做了减少优化,所以字体等都响应减少了
(980px是相关于手机像素的,我的是凌驾1000px多一些就涌现转动条了,这个没细致研讨)。
关于 initial-scale=1 ,这个参照iphone5的尺寸320*568,假如你页面依据640*1136做的话,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.去除button
在ios
上的默许款式
-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
的话做出来的效果很差,很不流通,而运用css3
的transition
、transform
或许animation
的效果将会异常棒(这一方面IOS
比android
又要好不少)。
假如用**3d(translate3d)
来完成动画,会开启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
是症结(在这个坑里陷了良久,直到偶然的一次设置了width:0
倏忽就好了,厥后在天猫上也看到了一样的设置width:0
)
弹性规划其他详解可见此
- 运用
a
标签的话,只管让a
标签block
,只管让用户可点击地区最大化 - 对两个
div
运用了transform
以后,div
下的z-index
偶然就会失效,我碰到过,但没去仔细探讨,只是把z-index
进步就好了,假如碰到这个题目的,细致能够 看这 - 在
iOS
中,当你点击比方input
预备输入时,假造键盘弹出,全部视窗的 高度 就会变成 减去键盘 的高度,到场你在底部有fixed
的元素比方btn
,这个元素就会跑上来,平常都不会太雅观。我是当focus
时就把它设为absolute
,视状况而定,也有比方显现一个新的层,将含有fixed
按钮的那一层隐蔽的状况等等。
别的一种状况(平常在页面内容很少时iphone5
及以上常发作),当输入框弹出时fixed
元素挤到输入框上,当输入框消逝机,fixed
元素并没有跟着输入框的消逝而回到底部,这是因为全部视窗的高度还保持在 减去键盘的 高度,须要手动去触发让视窗高度回到平常,然后试了许多要领都没胜利,厥后的计划是输入框消逝机给页面加隐形的很大的padding
比方1000px
并在30ms
后改成平常,细致可看这挪动端IOS关于fixed元素的题目
- 制止用户选中笔墨
-webkit-user-select:none
- 当把
input
设为width:100%
时,偶然能够会碰到input
的宽度超出了屏幕,这时刻可对input
加一个属性box-sizing:border-box
关于box-sizing:border-box
,此属性是把边框的宽度和padding
包含在盒子的高宽中,假如你设置两个元素float
且各占50%
,又都有border
时,用这个属性就能够完美地让它们能显现在统一行
- 做一个方向箭头比方 “>” 时,能够用一个正方形的
div
,设置border:1px 1px 0 0
;然后rotate(45deg)
,如许就省去了一个图片 -
CSS
权重:style
是1000
,id
是100
,class
是10
,一般如li
、div
和伪类是1
,通用如*
是0
; - 运用
rem
时,设某个div
比方的height:3rem;line-height:1.5rem;overflow:hidden;
时,在某些android
手机上能够会涌现显现不止两行,第三行会显现点头部。 处置惩罚:应用js
猎取笔墨line-height
再去设置div
高度 - 运用
background
时,background-position
里运用了比方center left
后不能再加细致的数值去定位,比方center 10px left
(临时兼容性差)
19.运用rem
规划时,因为webkit
支撑的最小字体大小是12px
,所以运用html
运用62.5%
现实是12px
,如许很难盘算,我的做法是设置成625%
即100px
,然后1rem
就相当于100px
20.挪动端字体运用 font-family: Helvetica,sans-serif
;我看这也是天猫运用的
- 在
iphone
原生键盘上用keyup
统计字符数时,体系不会自动监控你挑选笔墨的事宜,比方打了多个拼音,能够挑选的现实笔墨比输入的字符数多或许少,但没法在用户肯定自身的输入时监控到keyup
(其他事宜也一样)推断字符数。 改成input
事宜就能够了
22.完成毛玻璃效果,透过背景看其他元素隐约,自身元素不隐约。
-webkit-backdrop-filter: saturate(180%) blur(20px);
background: rgba(0,0,0,0.5);
这个效果临时只要IOS9
上的safari
能够。
用css3
的blur
效果的话,是整层元素悉数隐约,而透过隐约层看其他的元素不隐约
- 假如须要展现小于
12px
的笔墨,用transform:scale(%)
;它将元素减少,但自身应当占的空间并不会变小,所以比方要元素居左对齐的话,还需设置translateX
- 在挪动端对
input
框运用disabled
属性,会致使元素内里value
值在页面上被隐蔽看不见,能够对元素运用css3
效果pointer-event:none
,意义就是此元素对鼠标事宜无效
二.js部份
- 假如运用
jquery
绑定touch
事宜的话,猎取touchstart
,touchmove
的触点坐标用e.originalEvent.targetTouches[0].pageX
,
猎取touchend
则用 e.originalEvent.changedTouches[0].pageX
- 应用
style
猎取猎取transform
的rotate
值parseInt(/rotateX((.*?))/.exec(getALL.style.webkitTransform)[1])
假如页面一最先没有
style
值,rotate
是写在CSS
里的,须要用到getComputedStyle
,细致请看这里 有些版本的
iphone4
中,audio
和video
默许播放事宜不会触发,比方运用window.onload
或计时器等都不能触发播放,必须用JS
写事宜让用户手动点击触发才会最先播放,比方$(document).one('touchstart',function(){ audio.play(); })
想要在
touchmove:function(e,参数一)
加一个参数,效果直接运用e.preventDefault()
就会e
报错,处置惩罚要领为touchmove:function(e,参数一){
var e=arguments[0]e.preventDefault()
}
- 挪动端的一些小页面能够没必要用到
zepto.js
这些东西库,就能够运用一些新一点的api
,比方拔取元素用querySelector(".class #id")
和querySelectorAll(".class element")
,操纵class
能够用classList
- 点击一个元素时,运用
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
差不多的效果
当弹窗涌现时,想制止屏幕的滑动,给谁人遮罩层增加
touchmove
事宜即可,用e.preventDefault()
会阻挠的scroll
,click
等事宜,消逝机再off
掉,$(".body_cover").on("touchmove", function(e) { e.preventDefault(); });
- 运用
input file
上传文件时,能够指定接收的范例,accept="image/png,image/jpeg,image/gif"
,同时在android
上默许不能运用相机,能够加capture="camera"
同时,因为原生的款式不好看,能够经由历程设置input的display:none,然后运用id.click()去触发input元素的点击。
9.给元素加:active伪类时,假如要求高,兼容性好的话,就得用js监控touchstart然后加响应的class
```
$(document).on("touchstart", function(e) {
var target = $(e.target);
if (target.hasClass("is_hover")) {
target.addClass("hover_css");
}
});
```
三、微信部份
推断是不是来自微信阅读器
function isFromWeiXin() { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == "micromessenger") { return true; } return false; }
推断手机的范例
var user=""; if (/android/i.test(navigator.userAgent)){ // android user="1"; } if (/ipad|iphone|mac/i.test(navigator.userAgent)){ // ios user="0"; }
3.假如在网页里嵌套一个iframe
,src
为其他的网址等,当在微信阅读器翻开时,假如iframe
里的页面过大,则iframe
的src
不能加载(细致多大不知道,只是碰到过)。
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
如许的花样