通常当我浏览互联网时,我发现人们通常使用CSS黑客来使他们的网站在所有浏览器中看起来都一样.就个人而言,我发现找到所有这些黑客并测试它们是非常耗时的; 您所做的每项更改都必须在4个以上的浏览器中进行测试,以确保它不会破坏其他任何内容.
大约一年前,我浏览了互联网上其他主要网站正在使用的内容(雅虎,谷歌,BBC等),并发现其中大多数都在进行某种形式的浏览器检测(JS,HTML if语句,基于服务器).我也开始这样做了.在我最近工作的几乎所有网站上,我使用jQuery,所以我使用内置的浏览器检测.
您使用或不使用其中任何一种是否有原因?
还有第三种选择:
最大限度地减少或消除对浏览器检测和CSS黑客的需求.
我尝试使用像jQuery插件这样的东西来处理任何浏览器差异(对于小部件等).这并没有照顾好一切,但它做了很多,并且已经将支持多个浏览器的工作委托给已花费的人,并且将花费更多的努力,而不是你能负担或想要的.
之后我遵循这些原则:
使用我所说的最小CSS,意味着只使用广泛支持的功能;
如有必要,使用表格进行复杂布局.您可能不喜欢这样,但坦率地说,做并排布局的事情,表格将适用于十年前的浏览器,并且比使用绝对定位,浮动等组合工作要少得多;
通过添加DOCTYPE强制IE6进入严格而非怪癖模式.我不能强调这会让你的生活变得多么容易,但奇怪的是很多人似乎还没有做到这一点;
通过使用正确的DOCTYPE或使用嵌套块元素而不是其他盒子模型黑客来最小化盒子模型问题; 和
必要时包含相关浏览器的额外CSS文件.我倾向于在服务器而不是带有生成页面的客户端上执行此操作(让我们面对它,大多数都是这样).我参与过的许多项目都有IEfix.css文件.
之后,我将浏览器划分为层:
第1层:
Firefox 3;
IE7.
我的网站必须解决这些问题.
2级:
Firefox 2;
苹果浏览器;
歌剧;
铬.
我的网站应该就这些工作.这可能会冒犯一些人,但坦率地说,这些浏览器的市场份额非常低,以至于它们根本不像Firefox 3或IE7那么重要.
第3层:
IE6;
其他.
除非是,例如,公司要求,否则将尽最大努力解决这些问题.IE6是噩梦之一,但截至12月份的市场份额为20%且迅速下降.此外,还有一些有效的安全问题(例如在金融网站上),用于劝阻甚至禁止使用IE6,以便像Paypal这样的网站阻止了IE6,谷歌告诉用户放弃IE6.
问题是你只能在css上获得一次(因为它在客户端是非常静态的内容)...你不能(轻松地)适应它以适应客户端的飞行 - 所以对于那些棘手的不兼容的情况(并且它们太多),检测是可悲的最佳途径.我不能很快看到这种变化.
使用javascript,您通常可以通过诸如(如您所述)jQuery之类的库来避免这种痛苦 - 并且检查功能支持而不是识别特定浏览器(大多数情况下).在某些情况下,您需要准确了解(例如,盒子模型).
您使用或不使用其中任何一种是否有原因?
是.如果JavaScript被停用,客户端浏览器检测会中断,并且可能无法在将来的浏览器版本中正常运行.最后一个原因也适用于CSS黑客攻击.如果用户明确尝试破解它,服务器端浏览器检测会中断,但它仍然可能是一个可行的选择.
我会推荐什么:
确保您的代码在符合标准的浏览器中工作 - 即开发其中的一个或两个,然后检查browsershots.org.最有可能的是,使用一个样式表可以在所有这些中实现所需的结果.
然后,有IE.如果只有几个问题,你可以使用CSS hack.否则,请使用条件注释.
编辑:
如果我也必须支持古老的浏览器,我通常会采用优雅降级的方式:我只是让它们用基本样式表(字体大小,颜色......)显示纯HTML.所有花哨的东西都会被隐藏起来@import
.