028-86261949.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FFB700;}.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#F5F5F5;}
只需要将画笔根据像素比缩放即可
经研究发现是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页字会非常小,所以苹果就把iPhone4的960640分辨率在网页里只显示了480320,这样devicePixelRatio=2;现在android比较乱,有1.5/2/3等,想让图片在手机里显示更为清晰必须使用2x的背景图来代替img标签(一般情况都是用2倍),例如一个div的宽高是100100,背景图必须得200200,然后background-size:contain;,这样显示出来的图片就比较清晰了;代码如下:
background:url(../images/icon/all.png)no-repeatcentercenter;-webkit-background-size:50px50px;background-size:50px50px;display:inline-block;width:100%;height:50px;复制代码
h5网页input的type设置为number一般会产生三个问题:
去除input默认样式的方法:
input,textarea{border:0;-webkit-appearance:none;//可同时屏蔽输入框怪异的内阴影,解决iOS下无法修改按钮样式,测试还发现,加了此属性后,iOS下默认还是有圆角的,不过可以用border-radius属性修改}复制代码
问题1:右对齐实现
设置如下属性
selectoption{direction:rtl;}复制代码
::-ms-expand修改表单控件下拉箭头,设置隐藏并使用背景图片来修饰select::-ms-expand{display:none;}复制代码
由于自动播放网页中的音频或视频会给用户带来困扰或不必要的流量消耗,所以苹果系统和安卓系统通常都会禁止自动播放和使用JS的触发播放,必须由用户来触发才播放;解决方法思路:先通过用户touchstart触碰触发播放并暂停(让音频开始加载),后面用JS再操作就没问题了;解决代码:
1.尽可能地使用合成属性transform和opacity来设计CSS3动画,不使用position的left和top来定位
2.开启硬件加速
-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0);复制代码
解决方法如下:
1.父元素设置为overflow:hidden;
2.父元素设置为display:inline-block;等
这里两种方法都是通过设置css属性将浮动元素的父元素变成BFC(块级格式化上下文)元素,使子元素高度可以撑开父元素;不过最好使用方法1,因为inline-block元素本身会自带一些宽高度撑开其本身
点击浏览器的回退有时候不会自动执行js,特别是在mobilesafari中;这与往返缓存(bfcache)有关系,解决方法:
window.onunload=function(){};复制代码
在IOS下fixed定位在软键盘顶起时会失效,所以我们在开发时统一使用absolute代替
这个是苹果系统限制默认不允许自动播放音频/视频,需要点一下触发play()事件才能播放;那么我们可以在页面onload后触发播放事件:
小结:
1.audio元素的autoplay属性在IOS及Android上无法使用,在PC端正常
2.audio元素没有设置controls时,在IOS及Android会占据空间大小,而在PC端Chrome是不会占据任何空间
问题4:Safari浏览器自动播放
H5页面一般都会有BGM,也会提供一个旋转的音乐图标供用户开启关闭音乐;我们希望当用户点击音乐按钮时图标停止旋转,再点图标顺着之前停止的位置继续跑动画;animation-play-state是最简便的方式,然而ios不支持
目前的解决方案是:音乐图标负责跑动画,图标父级元素负责记录停止时的转动值
解决:加入样式可禁止用户进行复制,ios和一般的安卓都可以解决
-webkit-touch-callout:none;//系统默认菜单被禁用;可以实现页面因为长按弹出各种操作窗口-webkit-user-select:none;//webkit浏览器-khtml-user-select:none;//早期浏览器-moz-user-select:none;//火狐-ms-user-select:none;//IE10user-select:none;复制代码
添加完这段代码后在IOS上会有问题,这时发现input框无法正在输入内容了;造成这个原因是-webkit-user-select:none;这个属性,解决方法就是在css文件中同时设置一下input的属性,如下:
input{-webkit-user-select:auto;//webkit浏览器}复制代码
首先你可能会给页面的html和body增加了height:100%,然后就可能造成IOS上页面滑动的卡顿问题。
解决方案是:1.让html和body固定100%(或者100vh),2.然后再在内部放一个height:100%的div,设置overflow-y:auto;和-webkit-overflow-scrolling:touch;
overflow-x:auto在iOS有兼容问题,解决方法:
.scroll-box{/*模态框之类的div不能放在这个容器中,否则关闭模态框有时候关闭不了*/height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;overflow-scrolling:touch;}复制代码
a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-modify:read-write-plaintext-only;//-webkit-user-modify有个副作用,就是输入法不再能够输入多个字符}或a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0);}
这种情况是以前遇到的,这里也说下;主要会发生在webview里多一点,当点击后退时页面以缓存形式出现,而不是刷新后的,很多情况下这不是你预期的效果,解决方法是用js:
window.onpageshow=function(evt){if(evt.persisted){document.body.style.display="none";location.reload();}};复制代码
onpageshow每次页面加载都会触发,无论是从缓存中加载还是正常加载,这是他和onload的区别;persisted判断页面是否从缓存中读出
input的placeholder会出现文本位置偏上的情况:PC端设置line-height等于height能够对齐,而移动端仍然是偏上,解决方案时是设置cssline-height:normal;
-webkit-transform-style:preserve-3d;//设置内嵌的元素在3D空间如何呈现:保留3D-webkit-backface-visibility:hidden;//设置进行转换的元素的背面在面对用户时是否可见:隐藏-webkit-perspective:1000;复制代码