杨梵
侠客
侠客
  • UID477
  • 粉丝0
  • 关注0
  • 发帖数12
阅读:5401回复:1

前端开发兼容注意事项

楼主#
更多 发布于:2019-05-20 23:11
前端浏览器兼容是前端必备的知识,我给大家分享一下我在工作中遇到兼容问题(常规浏览器、IE9及其以上浏览器)。
首先推介一个浏览器兼容检测网站。https://www.caniuse.com/
 

图片:}7WCOTIUZ}DB7%AALOD3C(J.png

红色表示不兼容,黄色表示兼容不是很好或者需要加浏览器前缀识别才能正常显示,绿色代表兼容。
一、HTML的兼容问题。
1.1 placeloder在IE9及其以下浏览器不兼容。
   

图片:H]ARWTFJV%`{5FE5M@}]2IR.png

 解决方法:通过js来解决。
1.2 在IEinput在输入内容的时候,后面自带X。
 解决方法:用css样式解决。
      input::-ms-clear,
         input::-ms-reveal{
         display: none;
      }
1.3 在IE9以下不兼容HTML5标签
使用HTML标签使网页结构更加清晰的布局,以下是HTML5标签;这些标签默认的时候是内联元      素,需要初始化css变成块级元素方便布局。
 headert;定义页面或区段的头部;
 footer;定义页面或区段的尾部;
 nav;定义页面或区段的导航区域;
 section;页面的逻辑区域或内容组合;
 article;定义正文或一篇完整的内容;
 asid;定义补充或相关内容;
解决方法:使用html5shiv包,以下是引入方法。
 <!--[if lt IE 9]><script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script><![endif]-->
 1.4 通过meta标签来定义网页各个内容它能实现网页到期时间、默认的脚本语言、默认的风格页语言、网页自动刷新时间等。
二:css的兼容问题。
2.1 PC端谨慎使用flex布局,IE9是完全不支持flex布局,ie10和ie11兼容也不是很好。PC端还是需要使用传统的float和relative布局,才能兼容所有浏览器。

图片:]IBFS68}$1QFS@@[XX97)]S.png

解决方法:假设前期很不幸的使用了flex布局,项目需要兼容IE9,只需要在子元素加浮动,如果使用了flex其 它功能,就需要对子元素重新加样式去兼容。
         <ul><li></li><li></li></ul>
   ul{
     display:flex;
     flex-wrap:wrap;
     justify-content:center;
    }
    ul li{
     float:left;/*为了兼容IE给li子元素加浮动*/
    }

2.2 在ie下面有图片边框
  解决方法:给图片加border:0或者border:0 none;

2.3 图片在div里面有间隙。
 解决办法:给图片转换为块级元素,display:block;

2.4 表单行高在不同浏览器下不一致。
 解决办法:给表单元素加float:left。

2.5 ipnutbutton在不同浏览器下面高度不同统一大小。
解决办法:加高度统一大小。
2.6 当前元素(父元素里面的第一个子元素)与父元素没有设置任何浮动的情况下,设 置margin-top后 会错误的把margin-top加在父元素上。
解决办法:给父元素添加声明overflow:hidden或者给父元素的子元素添加浮动。
2.7 透明度opacity属性在IE下面失效。
 解决办法:兼容其它浏览器写法:opacity:value;(value取值0-1)
        ie浏览器写法:filter:alpha(opacity=value);取值1-100(整数)
2.8 ie9中img只给width或者height失效。
 解决办法:二个属性都得设置。
2.9 ie9中特定条件下绝对定位失效。
 解决办法:相对定位内的绝对定位元素内部的相对定位元素,ie9下会嵌套异常。
三、js的兼容问题。
3.1 addEventListener监听事件在IE下面无效。
解决办法:
 var x = document.getElementById(&quot;myBtn&quot;);
if (x.addEventListener) {   //所有主流浏览器,除了 IE 8 及更早 IE版本              
 x.addEventListener(&quot;click&quot;, myFunction);
 } else if (x.attachEvent) {  // IE 8 及更早 IE 版本
 x.attachEvent(&quot;onclick&quot;, myFunction);
}
3.2 IE9不兼容event.preventDefault,禁止事件右键点击出默认浏览器菜单。
解决办法:
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
3.3 IE9及其以下浏览器不兼容event.stopPropagation冒泡事件。
解决办法:
event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = false);
   3.4 IE9不兼容event.preventDefault,禁止事件右键点击出默认浏览器菜单。
解决办法:
event.preventDefault ? event.preventDefault() : (event.returnValue = false)
   3.5 IE和主流浏览器的键盘事件需要兼容。
解决办法:
functiongetKeyCode(e) { e = e ? e : (window.event ? window.event : &quot;&quot;) return     e.keyCode ? e.keyCode : e.which }}
   3.6 获取窗口大小兼容写法。
解决办法:网页内容实际宽高(包括工具栏和滚动条等边线)

var scroll_w =
document.documentElement.scrollWidth || document.body.scrollWidth;
var scroll_h =
document.documentElement.scrollHeight || document.body.scrollHeight;  
3.7 new Date()构造函数的写法并不能被各个浏览器识别。
解决办法:new Date(str)来正确生成日期对象
四、移动端
4.1 border的1px在不同设备上面显示会不同,在2倍屏幕对应成2px多像素。
解决办法:css解决代码,文档底部贴出.
4.2 点击事件过300毫秒才执行(为了判断是否用户执行双击的默认事件)。
解决办法:使用fastclick.js.



解决移动端1px边框像素问题
@charset;utf-8;
.border,
.border-top,
.border-right,
.border-bottom,
.border-left,
.border-topbottom,
.border-rightleft,
.border-topleft,
.border-rightbottom,
.border-topright,
.border-bottomleft {
position: relative;
}
.border::before,
.border-top::before,
.border-right::before,
.border-bottom::before,
.border-left::before,
.border-topbottom::before,
.border-topbottom::after,
.border-rightleft::before,
.border-rightleft::after,
.border-topleft::before,
.border-topleft::after,
.border-rightbottom::before,
.border-rightbottom::after,
.border-topright::before,
.border-topright::after,
.border-bottomleft::before,
.border-bottomleft::after {
content: &quot;\0020&quot;;
overflow: hidden;
position: absolute;
}
/* border
 * 因,边框是由伪元素区域遮盖在父级
 * 故,子级若有交互,需要对子级设置
 * 定位 及 z轴
 */
.border::before {
box-sizing: border-box;
top: 0;
left: 0;
height: 100%;
width: 100%;
border: 1px solid #eaeaea;
transform-origin: 0 0;
}
.border-top::before,
.border-bottom::before,
.border-topbottom::before,
.border-topbottom::after,
.border-topleft::before,
.border-rightbottom::after,
.border-topright::before,
.border-bottomleft::before {
left: 0;
width: 100%;
height: 1px;
}
.border-right::before,
.border-left::before,
.border-rightleft::before,
.border-rightleft::after,
.border-topleft::after,
.border-rightbottom::before,
.border-topright::after,
.border-bottomleft::after {
top: 0;
width: 1px;
height: 100%;
}
.border-top::before,
.border-topbottom::before,
.border-topleft::before,
.border-topright::before {
border-top: 1px solid #eaeaea;
transform-origin: 0 0;
}
.border-right::before,
.border-rightbottom::before,
.border-rightleft::before,
.border-topright::after {
border-right: 1px solid #eaeaea;
transform-origin: 100% 0;
}
.border-bottom::before,
.border-topbottom::after,
.border-rightbottom::after,
.border-bottomleft::before {
border-bottom: 1px solid #eaeaea;
transform-origin: 0 100%;
}
.border-left::before,
.border-topleft::after,
.border-rightleft::after,
.border-bottomleft::after {
border-left: 1px solid #eaeaea;
transform-origin: 0 0;
}
.border-top::before,
.border-topbottom::before,
.border-topleft::before,
.border-topright::before {
top: 0;
}
.border-right::before,
.border-rightleft::after,
.border-rightbottom::before,
.border-topright::after {
right: 0;
}
.border-bottom::before,
.border-topbottom::after,
.border-rightbottom::after,
.border-bottomleft::after {
bottom: 0;
}
.border-left::before,
.border-rightleft::before,
.border-topleft::after,
.border-bottomleft::before {
left: 0;
}
@media (max--moz-device-pixel-ratio: 1.49), (-webkit-max-device-pixel-ratio: 1.49), (max-device-pixel-ratio: 1.49), (max-resolution: 143dpi), (max-resolution: 1.49dppx) {
/* 默认值,无需重置 */
}
@media (min--moz-device-pixel-ratio: 1.5) and (max--moz-device-pixel-ratio: 2.49), (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 2.49), (min-device-pixel-ratio: 1.5) and (max-device-pixel-ratio: 2.49), (min-resolution: 144dpi) and (max-resolution: 239dpi), (min-resolution: 1.5dppx) and (max-resolution: 2.49dppx) {
.border::before {
width: 200%;
height: 200%;
transform: scale(.5);
}
.border-top::before,
.border-bottom::before,
.border-topbottom::before,
.border-topbottom::after,
.border-topleft::before,
.border-rightbottom::after,
.border-topright::before,
.border-bottomleft::before {
transform: scaleY(.5);
}
.border-right::before,
.border-left::before,
.border-rightleft::before,
.border-rightleft::after,
.border-topleft::after,
.border-rightbottom::before,
.border-topright::after,
.border-bottomleft::after {
transform: scaleX(.5);
}
}
@media (min--moz-device-pixel-ratio: 2.5), (-webkit-min-device-pixel-ratio: 2.5), (min-device-pixel-ratio: 2.5), (min-resolution: 240dpi), (min-resolution: 2.5dppx) {
.border::before {
width: 300%;
height: 300%;
transform: scale(.33333);
}
.border-top::before,
.border-bottom::before,
.border-topbottom::before,
.border-topbottom::after,
.border-topleft::before,
.border-rightbottom::after,
.border-topright::before,
.border-bottomleft::before {
transform: scaleY(.33333);
}
.border-right::before,
.border-left::before,
.border-rightleft::before,
.border-rightleft::after,
.border-topleft::after,
.border-rightbottom::before,
.border-topright::after,
.border-bottomleft::after {
transform: scaleX(.33333);
}
}
[杨梵于2019-05-21 21:27编辑了帖子]
杨梵
侠客
侠客
  • UID477
  • 粉丝0
  • 关注0
  • 发帖数12
沙发#
发布于:2019-05-21 09:45
怎么删除???
游客

返回顶部