IE8在怪异模式下不接受多个类?

时间:2009-11-02 20:30:24

标签: internet-explorer-8 css-selectors quirks-mode css

我遇到了IE8似乎正在丢弃CSS选择器的情况。我觉得很难相信,但我无法弄清楚发生了什么。

在.css文件中,我有这个声明:

#srp tr.objectPath.hover td {
    border-top:none;
}

但是,当我通过内置的开发人员工具检查IE8中的文件时,声明被修改为:

#srp TR.hover TD {
    border-top:medium none;
}

我不关心案例的变化或规则的重述,但放弃'.objectPath'是一个真正的问题,因为它比我想要的更广泛地针对规则。

我注意到这个页面是,并且必须保持Quirks模式。

任何想法发生了什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

在Quirks Mode中,IE 8渲染页面并将IE视为IE 5.5渲染。这就是Quirks Mode中IE 8忽略多个类的原因。它不是IE 8中的错误,如果您希望正确解析和呈现页面,则必须设置正确的DOCTYPE以在标准模式下呈现页面。

答案 1 :(得分:1)

如果您尝试使用tr.objectPath.hover伪类,则

hover语法不正确。正确的语法是冒号(即tr.objectPath:hover)。当机器读取您的代码时,它会将objectPath作为tr的类名称读取,但是当它到达hover时,它会删除旧的类名并将其替换为hover类(实际上是否存在属于该类的任何元素。另外,如果是这种情况,那么通过引用实例的子实例,我看不到你要做什么:hover

事实上,您正在使用hover作为类名(我不建议这样做,因为它可能会让阅读代码的人感到困惑)并且您希望CSS应用于td tr同时具有objectPathhover类的子项,您可能会考虑为两个类的元素创建一个新类,而不是使用它(即。{{ 1}})。

编辑:进一步研究此事,看来这是(还)IE中的(另一个)known bug。我已经在IETester中测试了它,它似乎存在于所有版本的IE中。我能看到的唯一解决方案是非常混乱:

首先,它需要在CSS中使用JavaScript,因为您无权访问其他任何内容。这是possible but very prone to bugs

其次,需要在JavaScript中创建一个getElementsByClass函数,该函数可以将多个类名作为参数。这将是very sizable chunk of code

最后,您可能希望将此代码指定为used only by IE,以便其他浏览器的用户不必处理所有这些内容中的任何潜在问题。

澄清一下,我不建议这样做。相反,我建议联系有权访问HTML源代码的人(假设您实际上与他们合作),以便他们可以应用更简单的修复方法,即#srp tr.newClass td类添加objectPathhover类属于这两个类的元素,甚至属于他们的tr子元素。

答案 2 :(得分:0)

看起来你的声明中有一些不正确的语法,但很难准确地说出你在做什么。您是否尝试匹配悬停状态或是否有一个实际上称为“悬停”的类?

如果要去州,请尝试:

#srp tr.objectPath:hover td {
    ...
}

如果有另一个类,您可能需要2个单独的声明:

#srp tr.objectPath td {
    ...
}

#srp tr.hover td {
    ...
}