1

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

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

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

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

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

我不关心大小写的变化或规则的重述,但删除“.objectPath”是一个真正的问题,因为它比我想要的更广泛地针对规则。

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

任何想法发生了什么?

谢谢!

4

3 回答 3

2

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

于 2010-01-08T07:18:34.507 回答
1

tr.objectPath.hover如果您尝试使用hover伪类,则语法不正确。正确的语法应使用冒号(即tr.objectPath:hover)。当机器正在读取您的代码时,它会读取objectPathtr的类名,但是当它到达时,hover它会摆脱旧的类名并将其替换为hover类(实际上是否存在属于该类的任何元素) .另外,如果是这种情况,那么我看不到您通过引用:hover.

如果您实际上将hover其用作类名(我不建议这样做,因为它可能会使阅读您的代码的人感到困惑)并且您希望 CSS 应用于 a 的td子级,tr即aobjectPathhover类,您可能考虑只为两个类的元素创建一个新类并使用它来代替(即。#srp tr.newClass td)。

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

首先,它需要在您的 CSS 中使用 JavaScript,因为您无权访问其他任何内容。这是可能的,但很容易出现错误

其次,它需要在该 JavaScript 中创建一个 getElementsByClass 函数,该函数可以将多个类名作为参数。这将是一个非常大的代码块

最后,您可能希望考虑指定此代码仅由 IE 使用,以便其他浏览器的用户不必处理所有这些东西的任何潜在问题。

为了澄清,我不建议这样做。相反,我建议联系可以访问 HTML 源代码的人(假设您实际上正在与他们合作),以便他们可以应用更简单的修复方法,将类添加objectPathhovertr属于这两个类的元素,甚至给他们的td孩子。

于 2009-11-02T21:02:16.327 回答
0

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

如果要去州,请尝试:

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

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

#srp tr.objectPath td {
    ...
}

#srp tr.hover td {
    ...
}
于 2009-11-02T21:04:01.543 回答