遇到的浏览器兼容问题及应对方法

前言:

上周天的时候有个学长找我帮忙做三张页面,因为没有数据交换之类的,只是单纯的前端页面,想着好久没做东西, 看书都看烦了,所以就接了也当是练手。之前因为没有系统的看书,所以其实很多问题都考虑的不全面,属于知其然不知其所以然的状态,虽然现在也还有很多要学的东西,但是知道自己的不足总比不知道强吧?而且这也算是一种进步?总之,遇到各种问题,然后我发现问题主要分为两类,一:我自己知识点不够所以不知道怎么解决的,这种问题大多求问度娘或者问大神是可以搞定的;二:属于确实是现阶段技术存在漏洞的,不论是还没能实现的、实现了但存在歧义或冲突的皆在此列。而就我这次做的页面我遇到最大的问题就是浏览器兼容性的问题,有了解决方法的就在此和大家分享,希望能够抛砖引玉,我也能学到更多的知识,谢谢。

正文:

1.遇到问题:当前浏览器为ie7及以下版本

 解决思路:用一个div覆盖,让用户不能看到正常页面呈现的内容

 实现方法:将正常是显示内容的div的display属性设置为none,将覆盖div的display属性设置为block(PS:在其中可以加入浏览器下载链接,让用户尽快正常浏览页面)

2.遇到问题:ie8中不能实现圆角,因为ie8不能很好的支持css3

 解决思路:下载PIE使得ie8支持css3中的圆角

 实现方法:这里的实现方法就不细说了,下载然后“behavior: url(path/PIE.htc);”把路径更改了就能够访问了,说一下需要注意的几点问题:

      (1)这个引用一定要放在html文件里面,而且路径也是相对于引用的html文件而言的,放在css文件里面不会有效果

      (2)如果发现引用成功之后,需要圆角的对象消失了,不要方,去洗个澡出来就好了,亲测

        开玩笑的,我确实去洗了个澡但是并没有出现,所以代码出现BUG什么的,求神拜佛到底是没用啊(摊手),从头调了一遍,又去百度了一下,发现问题了,是因为z-index的缘故,但只        设置一个z-index没有效果,哦~原来它的position属性不能是static即默认值,ok,设置position为relative就ok啦,完美的圆角在ie8就实现啦~(在此我真诚的感谢写出PIE的工程师        们确实是因为你们的努力才让我如此轻松的实现了我想要的效果,康桑阿米达~)

3.遇到问题:依然是ie8,不能支持css3中的@media screen and (....)实现响应式布局

 解决思路:没办法,谁让它是磨人的小妖精呢?(耸肩)单独写一个js文件获取屏幕宽度,然后再分别添加对应样式

 实现方法:“<!--[if lt ie9]><script type=‘text/javascript‘ src=‘path‘></script> <![endif]-->”放在html中,然后在引入的js文件中实现就ok了。说一个期间遇到的痛苦的事情给大家乐一乐,      我搞了半天,发现莫名其妙就是不行,去网上找了各个大神的代码来,一一对照就是不行!怎么能不行呢,这是多么伤自尊的事情啊。然后发现,居然是因为在"ie9"和“>”之间多了一个空

      (手动再见)。不过调出BUG之后那种成就感还是有的哈,就是知道是因为这个原因,有种“让我想先杀自己100遍好了”的感觉。

      js代码贴在下面,其实原理很简单。主要是其中有innerWidth和clientWidth的一些小区别,如果有疑问的话网上有很多大神的详细解析可以搜来看看。

/*用于兼容ie8实现不同宽度窗口的响应式布局*/
function getWidthHeight(){
    var wWidth,wHeight;
    //获取窗口宽度
    if(window.innerWidth){
        wWidth = window.innerWidth;

    }else if(document.body && document.body.clientWidth){
        wWidth = document.body.clientWidth;
    }
    //获取窗口高度
    if(window.innerHeight){
        wHeight = window.innerHeight;
    }else if(document.body && document.body.clientHeight){
        wHeight = document.body.clientHeight;
    }
    //通过深入Document内部对body进行检测,获取窗口大小
    if(window.documentElement && window.documentElement.clientWidth && window.documentElement.clientHeight){
        wWidth = window.documentElement.clientWidth;
        wHeight = window.documentElement.clientHeight;
    }

    return {"wWidth":wWidth,"wHeight":wHeight};
}

$(document).ready(function(){
    var wWidth = getWidthHeight().wWidth;
    if(wWidth <= 900){
        $("body").css("font-size","5px");
    }else if(wWidth > 900 && wWidth < 1200){
        $("body").css("font-size","8px");
    }else if(wWidth > 1200){
        $("body").css("font-size","10px");
    }
});

4.遇到问题:在ie11之前的版本,如果<img>在<a>标签中,则会出现奇怪的蓝色边框

 实现方法:给<img>加一个“border:0;”绝对立竿见影

5.遇到问题:因为是前台首页,所以写了图片滚动,ie10以下图片莫名出现多余空隙

 实现方法:给<img>加一句“display:block;”效果卓越

6.遇到问题:竖向显示的文字用了“writing-mode:tb-rl;”但是在去朋友的电脑上调时发现居然在我心爱的FF上没效果,不可能啊???然后发现是因为FF4及以下版本没有实现这个属性,这个属性最初是      由ie想出来的(老实说,我当时有点意外呢,毕竟ie在我心中是个孤僻的天才,属于自己搞点小发明但是都属于破坏向的,所以居然这么好用的属性是被ie想出来的,而且FF居然要到了后来才      实现,不得不说对于我是挺意外的)

 解决思路:没法,有问题就得想办法解决,那就只能一句一句的用ul li嵌套,然后向右浮动,设置定宽来实现了(老实说在用过writing-mode后这个方法很傻而且效果不好)

 实现方法:思路说了,那就直接上代码。

//html部分
//这里的<br>是为了让标点也能够重起一行<ul>
        <li>天气真好<br>,天气真好<br>。</li>
        <li>天气真好<br>。</li>
        <li>天气真好<br>,天气真好<br>。</li>
        <li>天气真好<br>?天气真好<br>;</li>
        <li>天气真好<br>?</li>
</ul>
//css部分ul{
    width: 6em;//em是一个相对单位,比px更好,1em = font-size的大小(如果没有设置font-size则由继承值决定)
    overflow: hidden;//保证布局不会崩掉
    list-style: none;//把默认样式去除
}
ul li{
    float: right;//实现从右向左布局
    width: 1em;//定宽保证只显示一个字
    margin-left: 0.2em;//保证每个li包含的内容之间有一定的间隔,能够看清楚
    word-break:break-word;//告诉浏览器每个字后自动换行
}

以上就是我调兼容性遇到的问题啦,以下就是我之前说的那两类问题,即我能力有限所以遇到的问题,还有就是现存的没有办法解决的问题

一:这个问题归根结底就两字:浮动!(必须任性给它加粗加底线)不论是莫名其妙的这个div就跑到后面去啦;哎,你这个img跟着上面的导航的布局跑什么跑;喂喂,这个p标签怎么这么不负责任呢?和你一起的img都乖乖在下面呆着,你跑到上面这个div里面的p标签旁边是要搞什么,搞基嘛?好吧,我承认这个锅说到底还是要自己背,因为浮动确实很强大,但是用不好会真的有很奇怪的结果出现。所以啊,好好看书吧,在这里骂这些标签或者浏览器感觉它们也挺无辜的。

二:(1)因为要异步加载文件进来,所以用到了JQuery的load方法,但是在谷歌浏览器上面是禁止的,没有办法调但是换到服务器上就好了,同样的还有360也是这样的

  (2)谷歌中不能设置font-size小于12px,这是谷歌的BUG存在挺久的了,虽然不知道为何要一直留着,大概觉得这样很酷?在网上搜到一个解决办法“-webkit-text-adjust:none;”但是我测试没  有成功,谷歌直接禁了,说是没有这个东西。

后话:

最后,有一点我个人的小感受,实践确实会学到很多知识,而且没有看书那么枯燥,但是这些知识会很散漫,所以看书这样系统的学习依然是必须的,所以之后会努力结合好两者,希望能有更多的进步吧。还有还有对于ie的一点小小感悟:因为ie很个性,浏览器实现里面特别爱特立独行,所以我之前特别讨厌ie,觉得大概是一群仗着自己很6就不把别人放眼里的天才家伙们,但是现在发现ie其实确实就我个人而言是背锅小天使,它本身对于前端的实现很有想法,很多细致的地方做得很棒,而且对于前端技术的发展也很有前瞻性,所以之前之所以会不住的骂它也是因为自己的无知吧,毕竟作为天才总是有一些不同于常人的脾气才能彰显它作为天才这个事实吧。我不会再毫无理由的骂它了,不过还是真心希望它能够在未来的某天,不要如此折磨我们可爱的前端程序猿了:-)

时间: 2024-10-10 08:23:43

遇到的浏览器兼容问题及应对方法的相关文章

浏览器兼容问题与解决方法

浏览器兼容问题是指,不同厂商开发的浏览器针对同一段代码的不同解析,造成页面展示效果出现差异的情况,很多时候为了追求显示效果的一直,前端开发人员就要针对不同兼容问题应用相应的方法处理,达到效果一致的目的. 下面这些是平时开发过程中遇到的,做个汇总,方便查阅. 1.<!DOCTYPE HTML>文档类型的声明 产生条件:IE6浏览器,当我们没有书写这个文档声明的时候,会触发IE6浏览器的怪异解析现象: 解决办法:书写文档声明. 2.横向双外边距 产生条件:在IE6中块元素浮动后(左浮左margin

常见的浏览器兼容问题和解决方法

为什么会有兼容问题? 由于市场上浏览器种类众多,而不同浏览器其内核亦不尽相同,所以各个浏览器对网页的解析就有一定出入,这也是导致浏览器兼容问题出现的主要原因,我们的网页需要在主流浏览器上正常运行,就需要做好浏览器兼容. 使用Trident内核的浏览器:IE.Maxthon.TT: 使用Gecko内核的浏览器:Netcape6及以上版本.FireFox: 使用Presto内核的浏览器:Opera7及以上版本: 使用Webkit内核的浏览器:Safari.Chrome. 而我现在所说的兼容性问题,主

IE浏览器兼容问题的解决方法

最近在写网页遇到遇到一些网页兼容的问题特别多,其中一个就是我这边的IE,360是没有看出问题的.但是到了客户那边却出现了很严重的页面变形问题,想了一下,应该就是大家的浏览器版本不一样导致的,我是按照自己的版本来写网页,也有测试IE8910的兼容性.当然,如果客户那边能够使用版本高一点的浏览器就最好了,但这是政府的项目不能这么要求他们,只能自己解决. 查了一下资料找到这个答案:从IE8开始添加了兼容模式,开启后会以低版本的IE进行渲染.兼容模式有可能会导致网页显示出问题,于是我们通常在HTML中添

JS中常遇到的浏览器兼容问题和解决方法

//以下均可console.log()实验 var winW=document.body.clientWidth||document.docuemntElement.clientWidth;//网页可见区域宽 var winH=document.body.clientHeight||document.docuemntElement.clientHeight;//网页可见区域宽 //以上为不包括边框的宽高,如果是offsetWidth或者offsetHeight的话包括边框 var winWW=d

IE下的浏览器兼容问题及解决方法2

浏览器差异 1.ul和ol列表缩进问题 消除ul.ol等列表的缩进时,样式应写成:list-style:none;margin:0px;padding:0px; 其中margin属性对IE有效,padding属性对FireFox有效. [注] 经验证,在IE中,设置margin:0px可以去除列表的上下左右缩进.空白以及列表编号或圆点,设置padding对样式没有影响:在 Firefox 中,设置margin:0px仅仅可以去除上下的空白,设置padding:0px后仅仅可以去掉左右缩进,还必须

浏览器兼容模式的快捷方法

使 IE 浏览器运行最新的渲染模式下:<meta http-equiv="X-UA-Compatible" content="IE=edge"> 国内浏览器厂商一般都支持兼容模式(即 IE 内核)和高速模式(即 webkit 内核),不幸的是,所有国产浏览器都是默认使用兼容模式,这就造成由于低版本 IE (IE8 及以下)内核让基于 Bootstrap 构建的网站展现效果很糟糕的情况.将下面的 <meta> 标签加入到页面中,可以让部分国产浏

调浏览器兼容步骤方法

终于完成了页面代码的编写.师傅叫我现在开始调浏览器的兼容性.在火狐和chrome中都显示的好好的页面,在ie8中就开始显示不行了.调试的最好方法就是逐步审查,用排除法. 首先,在ie中貌似对标签是否完整有要求.当笔者就是在某个地方<a>标签不完整导致div快显示有问题.所以在ie调试之前先审查自己的标签. 其次,建议先从高版本的浏览器进行调试. 最后,常见的问题: 1.fixed元素 当我上面一个标签使用了fixed属性时,相邻的标签用margin这个属性与其保持间距就会失效. 解决方案:1.

做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)

做web项目时,常常会遇到改动了代码,但浏览器端没有生效,原因是多种多样的,我会依据我遇到的情况逐步更新解决的方法 1.执行的时候採用debug模式,普通情况下使用项目部署button右边那个button下的tomcat7中的run即可,假设使用的是serves中的run serves,这样的情况貌似不会自己主动编译 2.点击project菜单下的clean选项,在打开的窗体中选择你使用的项目,ok,这样会删除tomcat容器中关于该项目的一些信息,然后又一次部署,执行 3.删除电脑中tomca

个人总结 css 浏览器兼容常见问题总结方法

1.如何让整个界面不出现滚动条,铺满整个浏览器.方法:在body中加overflow: hidden;有时候会出现底部有一段的空白,解决方法在form中加overflow: hidden;. 2.height:100%或者是width:100% 一加这个就会出现滚动条,除非控制. 3.IE显示下有时候字体会比其他浏览器显示的要小,解决方法:用IEhack区分不同浏览器 font-size:10px; 所有浏览器都可识别font-size:10px\9;所有IE浏览器都可识别font-size:1