2009-08-07 229 views
1

我最近为客户设计了一个Web应用程序。我使用CSS来进行应用程序的布局。我测试了IE7,Mozilla 3.0.1,Google Chrome 2.0.xxx,Safari 3.1和Opera 9.51的布局。CSS浏览器兼容性问题

他们都正确显示没有问题。在交付应用程序后,我的客户发现它与IE6存在兼容性问题。该网站未正确显示。

我该如何解决这个问题?我的系统上没有IE6甚至尝试修复它。每次我尝试将浏览器降级到IE6时,IE都将停止工作。有没有一种方法可以让我的环境可以在线模拟IE6。

其次,正在利用css框架来解决兼容性问题,即使我想使用一个css框架,哪一个更好,除了蓝图css。

感谢您的时间。

+0

这就是为什么我们在为人们工作时签订合同 - 我希望为了您的缘故,客户为IE6兼容性工作付出额外费用...... – ijw 2009-09-02 13:14:05

回答

5

我有一种感觉,你正在运行到一个盒子模型的问题,因为你正在渲染怪癖模式。 IE7 +和所有其他浏览器使用W3C盒子型号,而IE6使用IE盒子型号以怪癖模式。

IE框模型(被称为传统框模型),包括元素的宽度/高度的填充和边框。

在IE框模型下,宽度为100px,每边2px填充,3px边框和7px边距的框将具有114px的可见宽度。

W3C盒子模型(这是标准盒子模型),从元素的宽度/高度中排除填充和边框。

在W3C框模型下,宽度为100px,每边2px填充,3px边框和每边7px边距的框将具有124px的可见宽度。

Box Models http://www.456bereastreet.com/i/box-model.gif


为了使IE使用W3C盒模型(这是所有其他浏览器使用),需要在严格模式来呈现你的页面。默认情况下,IE以怪癖模式呈现。

为了在IE中触发严格模式,您必须指定文档类型。您可以使用以下任何文档类型的:

HTML4严格:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd" > 

XHTML 1.0严格:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

XHTML 1。0过渡:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

您的文档类型必须首先出现在您的页面上。它甚至在<html>标签之前。 (添加一个<?xml>序言会导致IE返回怪癖模式,所以如果你有它,请将其删除)。

约怪癖/严格的模式在这里

的更多信息:

CSS - Quirks mode and strict mode


虽然加入DOCTYPE切换标准模式可能不会解决所有的问题,你至少需要巨大的一步在正确的方向。

+0

即使在标准模式下,IE6的布局/ CSS/Javascript能力也是“有限”的,但这是IE6移植的第一步。 – ijw 2009-09-02 13:15:52

5

IE6是一种已知的处理CSS的灾难。最好的办法是使用虚拟机或旧系统,并在其上安装IE6并用于测试。但是,有一些体面的工具可以模仿IE6。我最喜欢的是IETester。有一个在线工具browsershots.org也不错,但我发现它有时并不一致。

您最好的方法是创建一个单独的样式表,仅用于IE6,并让您的CSS的其余部分处于工作状态。您可以通过使用加载IE6只有样式表在HTML <head>如下:

<!--[if IE 6]> 
    <link rel="stylesheet" type="text/css" href="IE-6-SPECIFIC.css" /> 
<![endif]--> 

一旦这样装,你就可以开始重写那些具有IE6的问题你平时的风格。

+0

Zombat已经完美了。使用带有IE6的虚拟化PC,并使用条件注释来纠正*仅* IE6 - 其他人将其视为普通注释并忽略它。 我发现仿真ie6的程序做得不够好,不能确保你做得对。 – Xanthir 2009-08-07 16:38:27

+0

IETester是我使用的。来这里建议那件事。与任何模拟器一样,可能有一些事情没有用100%的准确性描绘,但我还没有遇到问题。 – monkeypushbutton 2009-09-02 13:11:13

3

首先,它会为您下载虚拟PC和IE兼容性测试VHD从这里http://www.microsoft.com/Downloads/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&displaylang=en,我也用ztesat提到的IEtester,但更喜欢VPC图像。

然后,您可以针对不同风格的IE测试您的应用程序。

为了得到IE 6到工作的缘故,我常常求助于一个单独的CSS表它,并把这个使用条件注释http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx

好运:)

1

IE 6有许多它的CSS框模型中的错误,导致正确编码的网站在该浏览器下中断。这是可能使用盒模型黑客和其他方法来解决这些问题,因此其获得IE 6 Here is a list of common fixes for IE 6 box model problems

  1. 解决了IE 6问题的问题 - 我最喜爱的选择是安装的IE浏览器模拟器,让你运行互联网explorere的多个版本。 This one很不错,虽然还有其他的。另一种常见的方法是创建一个运行IE 6或双启动的虚拟机(这既耗费时间又很痛苦,但确实可行)。我可以的话我更喜欢使用模拟器。
0

创建特定于修复IE6问题的样式表,并用条件语句(只支持IE)调用它。下面是你应该在你的文档的头什么的例子:

<!--[lte IE 7]> 
    <link rel="stylesheet" type="text/css" href="ie6.css" /> 
<![endif]--> 

您可能还需要考虑“重置”你的CSS,这有助于启动浏览器关上公平的竞争环境(即获得消除IE中不一致的边距和填充)。我使用的那个可以找到here,而Yahoo!提供decent reset stylesheet作为YUI 3

至于能够调试自己的标记和风格在IE6中的一部分,这是两个选项,我建议:Xenocode's Browser Sandbox虚拟化的浏览器(IE6,IE7,IE8,FF2,FF3, Chrome,Opera 9,Safari 3,Safari 4),而无需安装实际的应用程序,而且这种操作非常麻烦,但让我们在IE6,IE7和IE8中呈现标记,而无需安装它们。

0

如果你有一个Win2K许可证,抓住VirtualBox,使用IE6安装Win2K,并从那里测试页面。这就是我如何在不实际安装IE6的情况下完成大部分测试。

如果不是你在做一个特定的客户端的东西,但在大的网站,我建议使用代码IE6 No More!

0

安装IETeaster在不同版本的IE浏览器中进行测试。在这里你可以找出问题出在哪里

0

我猜,在W3C盒子模型下,一个宽度为100px,每边2px填充,3px边框和7px边距的盒子将有一个114px的可见宽度。不是因为W3C排除了元素宽度/高度的填充和边框。