2009-11-30 49 views
1

我有几个页面和一个样式表。 页体获得两个类:它们的名称和语言。 例如:现在这是一个IE错误还是我愚蠢?

<body class="contact english"> 

,在样式表,我已经为德国版的 “专业知识” 页面的特殊规则:

body.expertise.deutsch .container 
    { 
    width: 590px; 
    } 

在IE的6,7,和8这种风格得到一致不仅应用于

<body class="expertise deutsch"> 

每一个身体eleme nt在每页

当我删除了“体”:

.expertise.deutsch .container 
    { 
    width: 590px; 
    } 

它按预期工作并且只适用于“专业技术德语”。

我蠢?盲?俯视明显?

这是想要的行为,一个已知的bug,还是两者都不是?

除IE8以外,我找不到任何东西,IE应该处理多个选择器。

因为它被误解:当然“每个体元件”是指在单独的页,所有包括相同的样式表分离的主体元件。

+0

乍一看,我可以向你保证,你不会错过什么*完全*愚蠢的...... – Matchu 2009-11-30 01:55:28

+0

如果你嵌入了'元标记,你看到IE 8的任何变化? – Boldewyn 2009-11-30 14:05:59

+0

爱这个问题的标题+1 – alex 2009-12-16 01:10:38

回答

5

据我所知,IE6不理解body.expertise.deutsch和body.deutsch之间的区别。它只会挑选连锁店中的最后一个班。 Ryan Brill has more on it here

我不确定IE7或8是否解决了这个问题,但是如果他们这样做了,您可能需要进入标准模式才能正常工作(最简单的方法是在顶部包含严格或HTML5文档类型文件)。

+0

这篇文章很有趣 - @typeonerror也发布了它 - 但它只谈论IE6,我也在7和8中获得它。稍后我会发布完整的代码,也许有人能够发现一些东西。它现在适用于我,所以没有紧迫的问题,但我认为它足够好奇,试图解决,即使它可能会以我的尴尬结束,因为我忽略了一些东西:) – 2009-11-30 12:36:28

+0

是的,多一点阅读表明IE7和8支持多个类选择器。 – 2009-11-30 12:54:10

+1

@Pekka Gaiser没有什么比这个问题更尴尬的事情了,不管怎么样,无论如何,找到问题的最佳方式通常是“详细解释”某件事情如何工作 - 当然,如果该人有任何意见,它通常会让您更​​快地达成解决方案,至少,教别人往往是深入学习任何科目的最佳途径。 – 2009-11-30 12:55:10

1

您可能想要将整个样式表和标记发布到某处。我的猜测是你在其他地方也有一些无效的陈述,有些则被怪异地应用。您可能还想验证您的css和标记:http://jigsaw.w3.org/css-validator/

检查此链接了。好像在那里的一些疑难杂症IE:http://www.ryanbrill.com/archives/multiple-classes-in-ie/

+0

我刚重新检查,标记是有效的,CSS只是抱怨不透明和溢出。我现在没有时间从开发服务器发布整个样式表和标记,但稍后会做。 – 2009-11-30 02:10:49

0

每个页面上的每个主体元素。

因此,您在页面上有多个body元素?这不正常。很难说没有看到HTML,但有一点要记住的是,body.expertise.deutsch.container不是一个直接的子选择器。所以,想象一些像这样的HTML(我猜):

<body class="expertise esperanto"> 
    <div class="container">I'm 590px wide</div> 

    <body> 
     <div class="container">I'm also 590px wide</div> 
    </body> 
</body> 

由于容器有一定的父(但是远程)与类的“专业知识世界语”它拿起风格。我的建议是,不要在同一页面中使用多个主体标签。另外,如果你有两个.container元素,并且只有一个人应该选择这个样式,也许给他们不同的类。

+0

不,我指的是包含样式表的每个页面中的每个body元素。将澄清这个问题。 – 2009-11-30 12:08:21

0

实际上,body标签在您的代码中有两个独立的类应用于它,它们不是作为一个整体加入,而是驻留在相同的深度。

body.expertise 
body.deutsch 

所以你的代码...

body.expertise.deutsch .container 
    { 
    width: 590px; 
    } 

如果类是只会工作:

<body class="expertise.deutsch"> 

我在这个时候有点不确定良好的工作围绕你的问题...

你可能想要检查它们是否可以依靠任何其他唯一的类标识符来缩小CSS。

最终更令人头疼的是,如果可以避免的话,每个元素使用多个类是值得的。我通常设置我的页面像<body><div id="body"> </div></body>,所以我有第二个外部容器来玩css的原因是这样的。

+1

不,身体有两个类适用于它,“专业知识”和“德意志”。对此的记号是“专业deutsch”,据我所知,没有例外。纠正我,如果我错了,当然。 – 2009-11-30 12:09:13

+0

这是精确的我的观点,你不能通过简单地去[元素]。[class1]。[class2]这是无效的,你不能运行需要两个在你写的同时的CSS。 由于班级保持在同一级别,所以只能指向一个或另一个级别。 – Kales 2009-11-30 19:59:16

+0

更正,我的意思是,如果你试图支持IE6,它仍然无效 – Kales 2009-11-30 20:04:57

1

我测试你的例子在IE7,但不能复制你的发现:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <style> 
     .container{ 
     height: 200px; 
     background-color: red; 
     } 
     body.expertise.deutsch .container { 
     background-color: blue; 
     } 
    </style> 
</head> 
<body class="expertise english"> 
<div class="container"> 
</div> 
</body> 
</html> 

显示一个红色的DIV,像它应该。当你把第二个身体类从英语改为德语时,div是蓝色的。

应该有这个代码的问题,唯一的浏览器IE6是因为它没有在CSS了解多个类,仅适用最后一次。(如果仅应用类德语这将颜色的页面蓝)

不确定...

相关问题