我遇到了IE8似乎正在丢弃CSS选择器的情况。我觉得很难相信,但我无法弄清楚发生了什么。
在.css文件中,我有这个声明:
#srp tr.objectPath.hover td {
border-top:none;
}
但是,当我通过内置的开发人员工具检查IE8中的文件时,声明被修改为:
#srp TR.hover TD {
border-top:medium none;
}
我不关心案例的变化或规则的重述,但放弃'.objectPath'是一个真正的问题,因为它比我想要的更广泛地针对规则。
我注意到这个页面是,并且必须保持Quirks模式。
任何想法发生了什么?
谢谢!
答案 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
同时具有objectPath
和hover
类的子项,您可能会考虑为两个类的元素创建一个新类,而不是使用它(即。{{ 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 {
...
}