常見的各個瀏覽器的相容處理
列下常見的瀏覽器的相容處理
一、html的相容性
對於有的瀏覽器不支援HTML5的一些標籤我們可以使用html5shiv.js來進行處理,html5shiv
核心是 IE Trident;FF 是 Gecko;opera 是 presto;safari and chrome 是 webkit
二、css的相容性
條件註釋
<!--[if IE 6]>這裡的內容只有IE6.0才能看見<![endif]-->
<!--[if gt IE 7]>大於IE7<![endif]>
csshack
color:red;所有的瀏覽器都是可以識別的
_color:red;只有IE6可以識別
*color :red;+color:red;*+color:red;[color:red;IE6 7 識別
color:red\9 表示測試後發現IE678910都能識別
color:red\0 891011都能識別
color:!important表示最高的優先順序,然後IE6不支援
所以一般的順序是
\9(678910)*(減少範圍到67)_(只有6)
>2. css選擇符級hack
比如*html #demo{color:red;} 這是隻有IE6才識別
:root #demo{color:red\9}只有IE9識別
對於特定瀏覽器支援的樣式我們有時要加-ms- -webkit- -moz- -o-進行相容處理
注意的是IE10開始才支援animation
IE的透明效果
可以設定屬性filter:alpha(opacity=0-100)
IE9開始支援透明度opacity
ff透明加 -moz-opacity:0.10;
常見的問題
IE的浮動margin變成雙倍問題 解決新增display:inline;
新增clearfix 清除浮動
.clearfix{
*zoom:1;
}
.clearfix:before,.clearfix:after{
display:table;
line-height:0;
content:"";
}
.clearfix:after{
clear:both;
}
不同瀏覽器的對齊處理 使用margin:auto
使用reset.css相容
html, body, div, span, applet, object, iframe ,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
html {
font-family: sans-serif; /* 1 */
line-height: 1.15; /* 2 */
-ms-text-size-adjust: 100%; /* 3 */
-webkit-text-size-adjust: 100%; /* 3 */
}
body {
line-height: 1.618em;
}
audio,
canvas,
progress,
video {
display: inline-block;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
a {
background-color: transparent; /* 1 */
-webkit-text-decoration-skip: objects; /* 2 */
}
a:active,
a:hover {
outline-width: 0;
}
ol, ul {
list-style: none;
}
img {
border-style: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
button,
input { /* 1 */
overflow: visible;
outline: none;
padding: 0; /*完全清除input的樣式*/
border-style: none;
border:1px solid #ccc;
}
外部的容器不需要定義高度,自適應
height:auto表示根據元素中的內容來確定高度,height:100%是繼承父級元素的高度
!important 在IE6中不支援 在ff chrome 從IE7開始支援
!important 比內聯元素的優先順序高
\9(678910)不支援11
三、javascript的相容性
用addEventListener封裝函式,IE的事件處理方式有點不同,為了相容我們可以封裝一個事件處理的物件,記得要在封裝後呼叫
var eventUtil={
//新增控制代碼
addHandler:function(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if(element.attachEvent){
element.attachEvent("on"+type,handler);
}else{
element["on"+type]=handler;
}
},
//移除控制代碼
removeHandler:function(element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler,false);
}else if(element.detachEvent){
element.detachEvent("on"+type,handler);
}else{
element["on"+type]=null;
}
},
//獲得事件
getEvent:function(event){
return event?event:window.event;
},
//獲得事件的型別
getType:function(event){
return event.type;
},
//獲得事件來自哪個元素
getElement:function(){
return event.target||event.srcElement;
},
//阻止預設的行為
preventDefault:function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue=false;
}
},
//阻止事件的冒泡行為
stopPropagation:function(){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble();
}
}
}
小於8的IE瀏覽器不支援event
要使用window.event 傳遞的引數是event
所以一般我們會寫e = e||window.event;
我們獲取scrollTop的時候
如果是指定物件的scrollTop的話 監聽事件加在父元素上 以及獲取值全都是在父元素的基礎上
FF IE11中只支援document.documentElement.scrollTop
IE5 和chrome中支援document.body.scrollTop
使用document.documentElement.scrollTop||document.body.scrollTop相容性
var scrolltop = document.documentElement.scrollTop ||document.body.scrollTop;
var clientWid = document.documentElement.clientWidth;
var offsetWid = document.documentElement.offsetWidth
小於8的IE瀏覽器 不支援window.onclick 儘量都用document.onclick
實時監測input中輸入的值
使用onchange要經過1.值變化2.onblur失去焦點事件,但是要引入jquery
而使用bind(“input”,function(){})能夠實時監測
(“#text”).bind(“input propertychange”,function(){(“#show”).html($(“#text”).val())
})
input是常規的 propertychange是相容IE的
使用js的話 就oninput onpropertychange
js中給定數值時要加單位px