【问题标题】:IE8 not accepting multiple classes in quirks mode?IE8 在怪癖模式下不接受多个类?
【发布时间】:2010-12-12 10:03:52
【问题描述】:

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

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

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

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

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

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

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

有什么想法吗?

谢谢!

【问题讨论】:

  • 顺便说一句,悬停伪类在怪癖模式下不起作用(锚点除外)

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    编辑: 进一步研究此事,这似乎是 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 源代码的人(假设您实际上正在与他们合作),以便他们可以应用更简单的修复方法,将 objectPathhover 类添加到 tr 元素属于两个班级,甚至属于他们的td 孩子。

    【讨论】:

    • 您的建议可行,但需要更改生成标记的代码,而我无法控制。问题依然存在,为什么 IE 重述声明?
    • 我对此进行了大量研究,并得出结论认为,该问题最好由有权访问 HTML 源代码的人解决。
    • @Tim Sheiner:IE 很可能会向您展示声明的规范形式(按照它的理解)。
    【解决方案3】:

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

    如果要去州,试试:

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

    如果还有其他类,您可能需要 2 个单独的声明:

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

    【讨论】:

    • 实际上有一个类'hover'。正如您所描述的那样使用两个类对我没有帮助,因为它与 IE 似乎正在做的基本相同:将样式应用于具有类名 .hover 的父级的任何 td,而不是仅具有具有类 .objectPath 的父级的 td 和.悬停。
    • 据我所知,css 不是这样工作的。您可以声明单独的类并具有重叠,或者您可以向下级联控制树(.hover 下的.object 或反之亦然),但不是仅在两个规则都存在时才适用的规则。就你而言,听起来你需要上三门课。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2011-11-20
    • 2013-01-27
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多