浏览器兼容

Css兼容问题

  • 样式在各浏览器中解析不一致的情况,或者说CSS样式在浏览器中不能正确显示的问题称为CSS bug.
  • CSS Hack: CSS中,Hack是指一种兼容CSS在不同浏览器中正确显示的技巧方法,修补bug的方法
  • Filter:表示过滤器的意思,它是一种对特定的浏览器或浏览器组显示或隐藏规则或声明的方法。本质上讲,Filter是hack方法中的一种;
IE6常见CSS解析Bug及hack(解决方法)

1.默认高度(IE6)

描述:在IE6及以下版本中,部分块元素拥有默认高度(低于18px高度)
hack1:给元素添加声明:font-size:0;
hack2:给元素添加声明:overflow:hidden;

2.图片间隙
div中的图片间隙

bug:在块元素中插入图块状元素片时,有时图片会将块元素下方撑大三像素。
Hack:将<img>转为,给<img>添加声明:display:block;

3.双倍浮向(双倍边距)
描述:当Ie6及更低版本浏览器在解析浮动元素时,会错误地把浮向边的边界加倍显示。

hack:给浮动元素添加声明:display:inline;

4.表单元素行高不一致(IE,MOZ,C,O,S)

bug:表单元素行高对齐方式不一致
hack:给表单元素添加声明:float:left;

5.按钮元素默认大小及样式不一 致

hack1: 统一大小及样式/(用a标记模拟)
hack2:如果这个按钮是一个图片,直接把图片作为按钮的背景图即可。

6.百分比bug
描述:在IE6及以下版本中在解析百分比时,会按四舍五入方式计算从而导致50%加50%大于100%的情况。

hack:给右面的浮动元素添加声明:clear:right;     意思:清除右浮动。     
clear:left:清除左浮动
clear:both:清除两边的浮动

7.鼠标指针bug
描述:cursor属性的hand属性值只有IE8浏览器识别;

hack:如统一某元素鼠标指针形状为手型,应添加声明:cursor:pointer;
- auto默认
- crosshair加号
- text文本
- wait等待
- help帮助
- progress过程
- inherit继承
- move移动
- ne-resize向上或向右移动
- pointer手形

8.透明属性

IE浏览器写法:filter:alpha(opacity=数值);取值范围 1-100(IE8以下)
兼容其他浏览器写法:opacity:数值;(数值的取值范围0-1,0.1,0.2,0.3-----0.9)

9.当li里的A加display:block或float:left时,出现行高不一致,有的会多出3像素

hack1:给a加display:inline-block;
hack2:给a加display:inline;
Hack3:给li加float,并加宽度;

10.当li加float属性,并且li里的A转换成块元素,并给a加了高度时,IE6里会出现每个LI单独占一行或阶梯状的情况

hack1:不给a标签加高度;
Hack2:给a标签也添加float;

11.父元素里有块元素,如果给子元素添加添加margin-top,父元素会下来

Hack1:给父元素添加overflow:hidden;
Hack2:给子元素添加float;
Hack3:给父元素加边框;

或者用其他的方法达到我们想要的效果:如给父元素加padding-top.
12.Fliter(过滤器)方法兼容浏览器

- _下划线:IE6浏览器的兼容符号; (只有IE6浏览器识别此符号,其他浏览器不识别)
        语法:选择器{_属性:属性值;}

- *或+:兼容所有IE7以下浏览器;(只有IE7及以下版本浏览器识别此符号,其他浏览器不识别)
        语法:选择器{*属性:属性值; +属性:属性值; }

- \0:IE8及以上浏览器的兼容符号;
        语法:选择器{属性:属性值\0;}

- \9:兼容所有IE浏览器;
        语法:选择器{属性:属性值\9}(只有IE浏览器识别此符号,其他浏览器不识别)

js兼容问题

1.各浏览器下 scrollTop的差异
IE6/7/8:
对于没有doctype声明的页面里可以使用 document.body.scrollTop 来获取 scrollTop高度 ;
对于有doctype声明的页面则可以使用 document.documentElement.scrollTop;
Safari:
safari 比较特别,有自己获取scrollTop的函数 : window.pageYOffset ;
Firefox:
火狐等等相对标准些的浏览器就省心多了,直接用 document.documentElement.scrollTop ;
*完美的获取scrollTop 赋值短语 :

var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;*

2.关于使用 firstChild,lastChild 等,获取第一个/最后一个元素节点时产生的问题
--IE6-8下: firstChild,lastChild,nextSibling,previousSibling,获取第一个元素节点
--高版本浏览器下: firstElementChild,lastElementChild,nextElementSibling,previousElementSibling

var firstChild = oBox.firstChild || oBox.firstElementChild;

3.**获取样式 currentStyle 和 getComputedStyle **
IE: currentStyle
Chrome: getComputedStyle

function getStyle(obj,attr){
    if(window.getComputedStyle){
        return getComputedStyle(obj,null)[attr];
    }
    return obj.currentStyle[attr];
}

4.事件对象
ie低版本:window.event

var evt = e || window.event;

5.获取事件源
ie : event.srcElement
firefox : event.target

var _target = evt.target || evt.srcElement;

6.添加事件监听器attachEvent/attachEventLister
IE8以下用: attachEvent
Chrome,IE9-10用: attachEventLister

           //添加事件
           function addEvent(obj,type,fn){
               if(obj.addEventListener){
                   obj.addEventListener(type,fn,false);
               }else{
                   obj.attachEvent("on"+type,fn);
               }
           }
           //移除事件
           function removeClass(obj,type,fn){
               if(obj.removeEventListener){
                   obj.removeEventListener(type,fn)
               }else{
                   obj.detachEvent("on"+type,fn);
               }
           }

7.document.getElementByClassName():根据类名查找元素,返回集合(IE9及以上版本支持)

function getByClassName(className, context) {
         context = context || document;
         if (document.getElementsByClassName) // 浏览器支持使用 getElementsByClassName
                return context.getElementsByClassName(className);
         /* 不支持使用 getElementsByClassName */
         // 保存查找到的元素的数组
         var result = [];
         // 查找 context 后代的所有元素
         var allTags = context.getElementsByTagName("*");
         // 遍历所有的元素
         for(var i = 0, len = allTags.length; i < len; i++) {
              // 获取当前遍历元素使用的所有 class 类名
              var classNames = allTags[i].className.split(" ");
              // 遍历当前元素的所有类名,和待查找的类名比较
              for (var j = 0, l = classNames.length; j < l; j++) {
                     if (classNames[j] == className) { // 当前所在遍历的元素是要查找出来的其中一个
                            result.push(allTags[i]);
                            break;
                     }
              }
       }
       // 返回查找结果
       return result;
}

8.阻止事件冒泡
stopPropagation()和cancelBubble,前者是方法,是标准的写法,后者是属性,赋值true表示阻止,是IE的写法。

if(evt.stopPropagation){
    evt.stopPropagation();
}else{
    evt.cancelBubble = true;
}

9.阻止默认行为兼容
ie : returnValue
其他浏览器:preventDefault

event.preventDefault?event.preventDefault():event.returnValue=false;
或者直接在事件处理程序中return false;

10.获取用户按下的键值

console.log(evt.keyCode || evt.which);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容

  • 序章 谈谈“浏览器兼容性”的问题?很多前端的面试或笔试中,都有比较笼统的“说说你所知道的各浏览器存在的兼容问题”,...
    麻辣小隔壁阅读 3,046评论 1 57
  • 一、如何调试 IE 浏览器 IE7以上版本自带的开发者工具,IE6可以用border的方法;例:IE11的开发者工...
    __Qiao阅读 1,127评论 2 17
  • 一、问答部分 1. 如何调试 IE 浏览器 IE7及以上版本有调试台,可以按F12启动。Paste_Image.p...
    _hello__world_阅读 464评论 0 1
  • 什么是 CSS hack CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什...
    怎么昵称阅读 387评论 0 1
  • 一 细雨微风迷树,碎萍枯叶衰池。 露华凝涩暮钟迟,一盏孤灯谁记。 几瓣花妆随梦,半庭残色成灰。 无言苦笑任低眉,仰...
    笔墨从容阅读 358评论 0 2