浏览器兼容性问题和解决方案

简述
    所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况。

常见的浏览器内核(渲染引擎)
    四种内核: Trident、Gecko、Blink、Webkit

浏览器内核
IE浏览器Trident 内核,也成为 IE 内核
Chrome浏览器Webkit 内核,现在是 Blink 内核
Firefox浏览器Gecko 内核,俗称 Firefox 内核
Safari浏览器Webkit 内核
Opera浏览器最初是自己的 Presto 内核,后来加入谷歌大军,从Webkit又到了Blink内核
360浏览器Trident + Blink 双内核
猎豹浏览器Trident + Blink 双内核
百度浏览器Trident 内核
QQ浏览器Trident(兼容模式)+ Webkit(高速模式)

CSS兼容性问题

1. 不同浏览器的标签默认的外边距 ( margin ) 和内边距 ( padding ) 不同

解决方案一: css 里增加通配符 * { margin: 0; padding: 0; }

解决方案二: body,h1,h2,h3,ul,li,input,div,span,a,form …… { margin: 0; padding: 0; }

2. 在 IE6及以下版本中设置了 float,同时又设置 margin,就会出现双边距浮动问题

问题描述:任何浮动的元素上的外边距加倍

解决方案:在 float 的标签样式控制中加入 display: inline; 将其转化为行内属性

3. IE6下默认有行高

解决方案:overflow: hidden;或 font-size: 0; 或 line-height: xx px;

4. 图片默认有间距

解决方案:使用 float 属性为 img 布局

5. IE6及以下版本,不支持最小高度 min-height
.
    问题描述:IE6不支持 min-height 属性。即使定义了元素高度,如果内容超过元素的高度,IE6在解析时,会自动延长元素的高度

解决方案:利用 IE6 不识别 !important,给元素设置固定高度,并且设置元素高度自动。height: auto !important; height: 300px; min-height: 300px; IE7 及其其他浏览器都识别 !important,虽然定义了 height: 300px,但是 !important 的优先级最高。所以内容超过 300px 时,还是会自动延长。

6. IE8及以下版本不支持 opacity

解决方案:opacity: 0.5; filter: alpha(opacity = 50); -ms-filter: “progid:DXImageTransform.Microsoft.Alpha(opacity = 80)”;

7. IE6以下的 3 像素问题

问题描述:两个相邻的 div 之间有3个像素的空隙,一个 div 使用了 float,而另一个没有使用产生的。

解决方案一:对另一个 div 也使用 float

解决方案二:给浮动的 div 添加属性 margin-right: –3px,但是这样写,在其他浏览器又会不正常,所以我们需要添加 IE6 的 hack,在属性 margin-right 前添加下划线 margin-right: –3px。( IE6 以及更低版本的 hack,是在属性前面添加下划线)

8. 块级元素上下边距合并问题

问题描述:当上下相邻元素都设置了 margin 边距时,margin 将取最大值,舍弃小值

解决方案:可以给子元素添加一个父元素,并设置该父元素:overflow: hidden;

9. IE9 以下浏览器不识别 HTML5 新增标签问题

解决方案:

<!--[if lt IE 9]>
 	<script type="text/javascript" src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<![endif]-->

10. margin 塌陷问题

问题描述:如果一个大盒子中包含一个小盒子, 给小盒子设置 margin-top 大盒子会一起向下平移

解决方案一:给父盒子加一个边框 border: 1px solid black;

解决方案二:给父盒子加 padding-top: xx px;

解决方案三:给父盒子设置属性 overflow: hidden;

解决方案四:给父盒子设置浮动 float: left;

解决方案五:给父盒子设置为行内块 display: inline-block;

11. 清除浮动

问题描述:浮动元素撑不开父级容器

解决方案一:额外标签法。在浮动的盒子内部最后,再放一个块级标签,在这个标签内使用 clear: both;

解决方案二:使用 overflow 清除浮动。在父元素中添加一个属性 overflow: hidden;

解决方案三:使用伪元素清除浮动。

.clearfix::after {
	content: "";      /* 伪元素必须给这个content='' */
    display: block;   /* 必须块级才能清除 */
    clear: both;      /* 核心代码 */
    /* 保证伪元素在页面中看不到 */
	height:0;
    line-height:0;
	visibility:hidden;
}
/* 兼容 IE 67 */
.clearfix {
  *zoom: 1;
}

解决方案四:给父盒子设置高度

IE属性过滤器(较为常用的hack方法)

字符例子说明
__height:100px;IE6可以识别
* 、+ 、!*height:100px;IE6 / IE7可以识别
\0/height:100px\0/;IE8可以识别
\9height:100px\9;IE6、7、8、9、10可以识别

浏览器CSS兼容前缀

-o-transform: rotate(7deg);        // Opera
-ms-transform: rotate(7deg);       // IE
-moz-transform: rotate(7deg);      // Firefox
-webkit-transform: rotate(7deg);   // Chrome
transform: rotate(7deg);           // 统一标识语句

JS兼容性问写法

1. 获取网页宽和高的兼容性问题

var winW = document.body.clientWidth || document.documentElement.clientWidth   // 网页可见区域宽
var winH = document.body.clientHeight || document.documentElement.clientHeight // 网页可见区域宽
// 以上为不包括边框的宽高,如果是 offsetWidth 或者 offsetHeight 的话包括边框

var winWW = document.body.scrollWidth || document.documentElement.scrollWidth   // 整个网页的宽
var winHH = document.body.scrollHeight || document.documentElement.scrollHeight // 整个网页的高

var screenH = window.screen.height // 屏幕分辨率的高
var screenW = window.screen.width  // 屏幕分辨率的宽
var screenX = window.screenLeft    // 浏览器窗口相对于屏幕的x坐标(除了Firefox)
var screenXX = window.screenX      // FireFox相对于屏幕的X坐标
var screenY = window.screenTop     // 浏览器窗口相对于屏幕的y坐标(除了Firefox)
var screenYY = window.screenY      // FireFox相对于屏幕的y坐标

2. 获取滚动条距离的兼容性问题

var scrollTop = document.body.scrollTop || document.documentElement.scrollTop // 网页被卷去的高
var scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft // 网页左卷的距离

3. 获取行外样式 currentStyle 和 getComputedStyle 的兼容性问题

function getStyle(el, name){
    if(el.currentStyle) {
        // IE
        return el.currentStyle[name]
    } else {
        // Chrom, Firefox
		return getComputedStyle(el, false)[name]
	}
}

4. 用 “索引” 获取字符串每一项的兼容性问题

var str = 'abcdefg'

alert(str[0])  // 低版本的浏览器IE6, 7不兼容
	
alert(str.charAt(0))  // 兼容所有浏览器

5. 使用 event 对象时的兼容性问题

document.oncilck = function(ev) {
    var e = ev || window.event
    alert(e.clientX)
}

6. 阻止事件冒泡的兼容性问题

document.oncilck = function(ev) {
    var e = ev || window.event
    if (e.stopPropagation) {
        e.stopPropagation()    // W3C标准
    } else {
    	e.cancelBubble = true  // IE..
    }
}

7. 阻止事件默认行为的兼容性问题

document.oncilck = function(ev) {
    var e = ev || window.event
    if (e.preventDefault) {
        e.preventDefault()      // W3C标准
    } else {
    	e.returnValue = false   // IE..
    }
}

8. 获取事件目标对象的兼容性问题

document.oncilck = function(ev) {
    var e = ev || window.event
    var target = e.target || e.srcElement         // 获取 target 的兼容写法,后面的为 IE
    var from = e.relatedTarget || e.formElement   // 鼠标来的地方,同样后面的为 IE...
    var to = e.relatedTarget || e.toElement       // 鼠标去的地方
}

9. 获取键盘按键码的兼容性问题

document.onkeydown = function(ev) {
	var e = ev || window.event
	var code = e.keyCode || e.which || e.charCode
	console.log(code)
}

10. 设置监听事件的兼容性问题

// 设置监听事件
function addEvent(el, type, fn) {        // 添加事件监听,三个参数分别为 对象、事件类型、事件处理函数,默认为 false
    if (el.addEventListener) {
        el.addEventListener(type, fn, false)    // 非IE
    } else {
        el.attachEvent('on' + type, fn)     // IE,这里已经加上on,传参的时候注意不要重复加了
    }
}
// 删除事件监听
function removeEvent(el, type, fn) {  
    if (el.removeEventListener) {
        el.removeEventListener(type, fn, false)    // 非IE
    } else { 
        el.detachEvent('on' + type, fn)    // IE,这里已经加上on,传参的时候注意不要重复加了
    }
}

11. 获取DOM节点的兼容性问题

// DOM节点相关,主要兼容IE 6 7 8

// 获取下一个兄弟节点
function nextnode(el) {
    if (el.nextElementSibling) {
        return el.nextElementSibling  // 非IE6 7 8 支持
    } else{
        return el.nextSibling  // IE6 7 8 支持
    }
}
// 获取上一个兄弟节点
function prenode(el) {
    if (el.previousElementSibling) {
        return el.previousElementSibling   // 非IE6 7 8 支持
    } else{
        return el.previousSibling     // IE6 7 8 支持
    }
}
// 获取第一个子节点
function firstnode(el) {
    if (el.firstElementChild) {
        return el.firstElementChild   // 非IE6 7 8 支持
    } else{
        return el.firstChild    // IE6 7 8 支持
    }
}
// 获取最后一个子节点
function lastnode(el) {
    if (el.lastElementChild) {
        return el.lastElementChild    // 非IE6 7 8 支持
    } else{
        return el.lastChild     // IE6 7 8 支持
    }
}

12. 监听鼠标的滑轮滚动事件的兼容性问题

// 给页面绑定鼠标滑轮滚动事件
var scrollFunc = function(e) {
	var e = e || window.event
    if (e.wheelDelta) {     // 判断浏览器 IE, Chrome滑轮事件
       	// 当滑轮向上滚动时
	    if (e.wheelDelta > 0) {
		    console.log("滑轮向上滚动")
		    console.log(e.wheelDelta)
	    }
	    // 当滑轮向下滚动时
	    if (e.wheelDelta < 0) {
	        console.log("滑轮向下滚动")
	        console.log(e.wheelDelta)
	    }
    } else if (e.detail) {   // Firefox滑轮事件
    	// 当滑轮向上滚动时
	    if (e.detail> 0) {  
		    console.log("滑轮向上滚动")
		    console.log(e.detail)
	    }
	    // 当滑轮向下滚动时
	    if (e.detail < 0) { 
			console.log("滑轮向下滚动")
			console.log(e.detail)
	    }
    }
}

// Firefox 使用 DOMMouseScroll 绑定滑轮事件
if(document.addEventListener) {
	document.addEventListener('DOMMouseScroll', scrollFunc, false)
}
// W3C标准   IE/Opera/Chrome 
window.onmousewheel = document.onmousewheel = scrollFunc
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值