HTML5技术

H5项目常见问题汇总及解决方案 - kelly*(2)

字号+ 作者:H5之家 来源:H5之家 2017-02-16 11:03 我要评论( )

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

说明:retina屏是一种具备超高像素密度的液晶屏,同样大小的屏幕上显示的像素点由1个变为多个,如在同样带下的屏幕上,苹果设备的retina显示屏中,像素点1个变为4个。
在高清显示屏中的位图被放大,图片会变得模糊,因此移动端的视觉稿通常会设计为传统PC的2倍。
那么,前端的应对方案是:设计稿切出来的图片长宽保证为偶数,并使用backgroud-size把图片缩小为原来的1/2

//例如图片宽高为:200px*200px,那么写法如下 .css{width:100px;height:100px;background-size:100px 100px;} //其它元素的取值为原来的1/2,例如视觉稿40px的字体,使用样式的写法为20px .css{font-size:20px} //image-set设计Rentina背景图 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系统,点击标签产生的灰色半透明背景,能通过设置<meta content="no">去掉; //特殊说明:有些机型去除不了,如小米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下 <meta name="msapplication-tap-highlight" content="no">
  • 美化表单元素
  • //一、使用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下,输入的时候英文首字母的默认大写
  • <input autocapitalize="off" autocorrect="off" />
  • 手机拍照和上传图片
  • //IOS有拍照、录像、选取本地图片功能,部分Android只有选择本地图片功能。Winphone不支持 <input type="file" accept="images/*" /> <input type="file" accept="video/*" />
  • 屏幕旋转的事件和样式
  • //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中无法自动播放
  • //音频,写法一 <audio src="music/bg.mp3" autoplay loop controls>你的浏览器还不支持哦</audio> //音频,写法二 <audio controls="controls"> <source src="music/bg.ogg" type="audio/ogg"></source> <source src="music/bg.mp3" type="audio/mpeg"></source> 优先播放音乐bg.ogg,不支持在播放bg.mp3 </audio> //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 }
  • 微信浏览器用户调整字体大小后页面矬了,怎么阻止用户调整
  • //以下代码可使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](),如: <div id="wrapper"> <ul> <li></li> ..... </ul> </div> <script src="iscroll.js"></script> <script> var myscroll; function loaded(){ myscroll=new iScroll("wrapper"); } window.addEventListener("DOMContentLoaded",loaded,false); </script> //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" --> <video x-webkit-airplay="true" webkit-playsinline="true" preload="auto" autoplay src="http://"></video>
  • JS判断设备
  • function browserRedirect() { var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad = sUserAgent.match(/ipad/i) == "ipad"; var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os"; var bIsMidp = sUserAgent.match(/midp/i) == "midp"; var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4"; var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb"; var bIsAndroid = sUserAgent.match(/android/i) == "android"; var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce"; var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile"; document.writeln("您的浏览设备为:"); if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) { document.writeln("phone"); } else { document.writeln("pc"); } } browserRedirect();
  • 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.修改及时生效;

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 前端资源汇总 - 崔凯通

      前端资源汇总 - 崔凯通

      2017-01-21 13:02

    • 微信小程序开源项目库汇总 - OpenDigg

      微信小程序开源项目库汇总 - OpenDigg

      2017-01-14 13:03

    • SQL Server常见问题总结 - Double_K

      SQL Server常见问题总结 - Double_K

      2017-01-10 15:01

    • iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果 - mufc-go

      iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果 -

      2017-01-01 10:02

    网友点评