你如何处理Internet Explorer?
我知道这个话题可能还有其他的问题。 我想每个Web开发人员都可以通过IE浏览器进行浏览。
我的问题:
我正在开发一个完全基于Javascript的基于Web的应用程序。 我是一名Mac用户。 我很高兴在Safari,Firefox和Opera上都能很好地工作。 然后,我问了一个Windows的朋友用IE浏览器检查一下,事情也不行。 我的应用程序对HTML标准非常敏感。
主要的问题是CSS布局。 JavaScript本身似乎正常工作,感谢jQuery的可移植性。
我的问题:
你如何处理Internet Explorer? 我应该创build一个仅在Internet Explorer上加载的新CSS吗? 我应该只为Internet Explorer创build新版本的应用程序吗? 你通常如何处理这个问题? 这个应用程序在functiondevise和布局devise上都是相当大的。
编辑:
按照Nosredna的build议使用CSS重置,已经解决了将近一半的问题。 我想这是一个很好的做法。 我注意到,SO也使用它。
你指定一个有效的文档types? 通过将Internet Explorer切换到标准模式,可以使Internet Explorer更加顺从。 http://msdn.microsoft.com/en-us/library/bb250395.aspx#cssenhancements_topic2
你使用浏览器重置CSS文件? 这可以帮助把版本放在一起。 http://meyerweb.com/eric/tools/css/reset/
注意IE的CSS错误: http : //www.positioniseverything.net/explorer.html
对于布局的骨架,可以考虑使用已知可用的标记,例如http://matthewjamestaylor.com/blog/perfect-multi-column-liquid-layouts或http://960.gs/用于液体或固定布局,分别。;
跟上浏览器之间的JavaScript差异。 jQuery处理其中的一些,但不是全部。 http://www.impressivewebs.com/7-javascript-differences-between-firefox-ie/
是的,IE是一个痛苦。 如果你想在IE中工作,你真的想在IE中testing几天。 你不想保存最后的痛苦 – 你想一次处理一个噩梦。
顺便说一句,如果你觉得IE是一个痛苦,尝试用手机看你的网页。 有一天,我去了一个iPhone的REI.com和屏幕中间的五分之一或更多被一堆乱码标记,作为文本呈现。
有条件的评论。
<!--[if IE 6]> <link rel="stylesheet" href="ie6.css"> <![endif]--> <!--[if IE 7]> <link rel="stylesheet" href="ie7.css"> <![endif]--> <!--[if IE 8]> <link rel="stylesheet" href="ie8.css"> <![endif]--> <!--[if !IE]--> <link rel="stylesheet" href="normal.css"> <!--[endif]-->
在IE文件中,可以使用@import
导入normal.css
,然后根据需要覆盖样式。
首先,我不等到项目完成后考虑浏览器的兼容性。
大多数CSS问题的时候都有办法做不需要浏览器的样式表来加载,所以我尽量使用这些解决scheme。 例如 – 如果大多数问题都与盒子模型问题有关,像使用嵌套div代替填充可以帮助确保一切看起来正确,而不需要为不同的浏览器提供单独的样式表和模板。
浏览器重置开始。 尽可能平整游戏场,并消除浏览器默认值。 从头开始build立你的CSS。 (见: http : //meyerweb.com/eric/thoughts/2007/04/12/reset-styles/ )
在开发过程中及早通过所有主stream浏览器进行testing。
尝试尽可能地完成没有浏览器特定的黑客攻击。 有时你需要在某些特定于浏览器的CSS中工作,但应该validation(使用W3Cvalidation工具)。 有时,虽然没有什么,但有条件(甚至可能是一些JavaScript),例如修复IE6中的透明PNG(请参阅: http : //nettuts.com/videos/screencasts/5-easy-ways-to-tackle- ie6s-transparency-issues / )。
如果您不能在您的某个开发机器上运行IE,请尝试http://browsershots.org 。 至less你可以通过这种方式得到一些反馈。
使用debug.css来突出显示或概述div和其他元素。 如果在开发过程中需要,可以把它传到你的HTML头里。 这可以是一个巨大的帮助。
使用“开发人员工具栏”(IE,Firefox)。
预计IE将成为痛苦,并在6,7和8testing。
玩的开心!
以下是我如何减less处理IE的痛苦:
- 使用reset.css – Yahoo! YUI重置或Eric Meyer的重置CSS
- 小心漂浮,清除 – 他们通常会导致大量的诅咒。
- 请注意在IE中hasLayout错误,通常添加缩放:1或高度属性有助于解决这个问题。 阅读有布局 。
- 获取在Firefox,Safari浏览器,Chrome等工作的布局,同时保持IE约80%的方式。
- 如果需要,使用条件注释实现IE6.css样式和IE7.css样式。
- 啤酒,白酒或其他成人饮料。
首先,请阅读On Having ,其中解释了IE呈现引擎如何在内部工作。 IE的渲染引擎是来自CSS之前的。 它没有正确区分内联和块内容,就像你期望的那样。 相反,在IE中有一个元素hasLayout。 或不。 这是IE漏洞的99%的来源。 所以,阅读这篇文章几次。
至于修复,我通常使用条件注释。 几个原因:
- 他们是未来的certificate,而不是CSS黑客。 如果IE9修复了这个黑客攻击,而不是你使用它来解决的错误呢?
- 这是有效的(X)的HTML(条件注释只是普通的意见给其他人)
- 它不需要JavaScript。 你会惊讶有多less人closures了JavaScript。
关于条件性评论的一句话:永远不要使用开放式的比赛。 也就是说,不要这样做:
<!--[if IE]> <load css> <![endif]--> <!--[if gte IE 7]> <load css> <![endif]-->
原因是一样的黑客:使其未来的certificate。 如果下一个版本的IE修复了这个错误,并且不再需要这些修复? 或者更糟糕的是,现在的“修复”实际上是在新的IE版本中混淆了你的布局? 这通常是最好的假设,下一个版本的IE已经修复了你正在解决的错误。 当IE 8在地平线上时,我已经写了一些关于这一点的文章。
我认为可以为IE编写一个特定的css文件。 我知道这是一个痛苦,但由于一些posiitioning问题,IE6看起来不同于所有其他browswers。
使用这一行为您新创build的CSS文件:
<!--[if ie6]><link rel="stylesheet" type="text/css" media="screen" href="ie6_style.css" /><![endif]-->
随着IE获得约65%的stream量 ,我不认为你可以认为这是一个后思想。
总的来说,我尽可能地做了尽可能多的工作,而不需要为IE创build一个单独的CSS文件。 如果需要的话,我会用条件格式来定位它。 总的来说,最多你可能需要做一个只有IE的样式表才能使它工作。
只要确保你正在为你的受众testing适当的IE版本,IE 6,7和8就是相当有趣的了。
作为最后的手段,当调整CSS只是不会修复的东西,我喜欢使用拉斐尔·利马的CSSselect器脚本。 虽然这取决于JavaScript(我build立的大部分网站都是这样做的),但是它提供了一种方便的方法来调整不同浏览器和版本的CSS,而无需单独的样式表。
你可以有 :
.someClass { margin-left:1px } .ie6.someclass { margin-left:2px }
<script> if (internetExplorer) { window.location = "http://getfirefox.com"; } </script>
保持标记尽可能简单。 做一些小改动。 testing每一个变化。
我删除它
我认为开发一个新的CSS文件在IE中使用会比重新编写你的应用程序容易得多,但是我不知道你的应用程序有什么规模和范围,甚至可以做出相当大的select。 我想这可能取决于你要支持的IE版本。
现在我们已经知道大多数用户应该完全从IE6迁移出去了。 IE7仍然是一个麻烦,但远远不及6。 与我的项目,我卖的默认设置是IE7兼容性的代码,以指导IE6及以下的用户升级。 如果客户要我将IE6的兼容性整合到一个网站中,我通常会把报价提高50%,因为头疼的事情是多么的支持浏览器,还有多less额外的可视化代码需要编写来使其工作。
我知道这可能会陷入“太less,太晚”的范畴。 也就是说,我会投资VMWare或Parallels,并创build一个Windows VM的W / IE6。
在开发过程中,您应该逐步检查您关心的浏览器的进度。
这就是说,在现有的应用程序中,我首先要确保我的HTML是有效的(有各种各样的validation服务可供select),然后根据布局,我逐个部分尝试获取布局,使用注释来“隐藏”你不擅长的部分。
我通常尽我所能避免创build一个单独的CSS文件。 有很多的CSS和HTML技巧和技巧,应该让你在IE6以及其他普通浏览器中工作。 这只是需要时间来全力以赴。 不幸的是,有时复杂的布局会花费大量的时间,特别是当你不去testing时。
我让别人为我解决问题。 我使用YUI库中包含的雅虎优秀的CSS文件。 他们有一个文件去除现有标签的现有格式(例如,IE中的H1在Firefox中看起来不像H1),他们有另外一个给我一个默认的格式设置,在浏览器中看起来是一样的,他们有另一个标准化字体大小,最重要的是他们的网格文件。 它使我能够非常快速和容易地在页面上构build区域和子区域的分层格式,而且我知道它可以在任何主stream的现代浏览器上运行(雅虎正在testing它以确保它)。
这可能不是完美的解决scheme,但对我的需求已经足够了。
我在我的开发中也遇到过同样的问题:IE6,FFetc + LAMP +自定义MVC,基于Rasmus Lerdorf的文章,他build议使用noMVC类似于使用包括页眉,页脚和sortingfunction。 我编码的CSS,坚持FF没有很好地呈现。 我不得不去修改我的CSS知识 – 我发现一个CSS实现可以在std中正确渲染。 兼容模式(FF)和IE6。 我喜欢那个。 我很高兴处理使用单个CSS文件的任何更改。 我的build议:
- 我知道你有一台Mac,去车库出售(报纸会告诉你他们在哪里),以10美元购买一台旧电脑(到目前为止我find了很多)。 这将使您有机会尽早testingIE6,同时您也可以获得KVM切换器,以便在需要时访问机器。
- 我沉迷于其中的一件事情是IE6的设置 – 禁用所有的ActiveX脚本 – 使浏览网站没有广告爆炸,反正 – testing你的应用与&没有activeX设置,并看看你的网站做得如何。 这实际上节省了我上面提到过的几小时“痛苦”时刻。
- 你prolly知道如何testingFF /歌剧/ Safari与脚本和没有
- 最后 – 无论您的网站使用多大的Java脚本,确保不需要编写正确加载的核心function(我相信您有很多function)。
我不是专家,但是确定希望我的评论能帮助你一点。
愉快-O
我确定我的网站在ie9中本地和完美地工作,并在ie8中工作(可能缺lessfunction)。 我提示每个使用旧版本的用户都可以使用chrome框架。 我从来不会浪费我的时间,因为使用6岁的浏览器是可悲的,不应该被鼓励。
正如nosredna所说,使用有效的文档types(请参阅http://www.alistapart.com/articles/doctype/ )然后在w3cvalidation器( http://validator.w3.org/ )中检查您的网站。 如果它显示没有错误(或只是less数),那么IE应该正确渲染它。
我不会付出太多的努力使其与IE6兼容,只是接受一个网站可以在各种浏览器看起来不同的事实。