在css样式表中,*HTML正文是什么意思?

在css样式表中,*HTML正文是什么意思?,css,syntax,Css,Syntax,在样式表中,我有: * HTML BODY { padding-right: 0px; padding-left: 0px; padding-bottom: 25px; padding-top: 190px; } * HTML #maincontent { width: 100%; height: 100%; } 我知道这是一个好消息。表示类和应用于i

在样式表中,我有:

    * HTML BODY
    {
        padding-right: 0px;
        padding-left: 0px;
        padding-bottom: 25px;
        padding-top: 190px;
    }
    * HTML #maincontent
    {
        width: 100%;
        height: 100%;
    }

我知道这是一个好消息。表示类和应用于id的#表示,但*HTML是什么意思?

对于第二个代码段,因为*匹配元素项多余的任何内容。它似乎是为了提醒作者样式的意图——如果他在第二个代码片段中更改了某些内容,请确保他检查了#maincontent元素以确保它看起来正确。

*
表示任何元素
HTML
BODY
表示
元素

因此,
*HTML BODY
表示HTML元素中的BODY元素,任何元素中的BODY元素


这实际上是一种浏览器黑客行为:有些浏览器会匹配它,有些则不会匹配(Internet Explorer匹配,Firefox不匹配,其他浏览器不确定)。

*是通用选择器,因此匹配任何元素。e、 g

P * { }
匹配p标记的子元素

* HTML
应该没有任何意义,因为HTML不能是任何东西的子元素(根据定义)。之所以使用它,是因为IE(编辑,至少IE 5-6-谢谢RoBorg!)忽略了*所以它可以用来定义IE特定的样式:

HTML {
 // Normal styles
}

* HTML {
 // IE Specific styles
 }

好吧,这是一个非常糟糕的CSS选择器语句,就是这样。让我为您详细介绍一下:

[all elements] (sub-selection) [HTML] [BODY]
也就是说,它遍历所有元素以找到
HTML
元素,然后是
主体
内部。问题是始终只有一个body元素,而
#maincontent
应该是
body
或者在它里面。句号

正如乔尔所说,这可能是为了提醒设计师,但我不太确定这一点。对我来说,那个代码是一种明确的“代码气味”

您应该将CSS选择器重写为:

body {
以及:


分别。

人们在样式表规则中添加诸如*、html或body(或者在本例中,全部3个)之类的选择器的一个原因是增加选择器特异性计算。当然,html永远不会是其他任何东西的孩子,因此*html是一种特定的IE黑客,但人们之所以会在声明中添加html或正文,是有原因的:

例如:

html p { font-color: red }
p { font-color: blue }  
html标记中的段落(如中的所有段落)比段落更具体,因此字体颜色将为红色,而不管这些声明在样式表中的顺序如何。如果有第三条带有html主体p的规则,它将优先


与使用相比,它稍微少了一点黑客行为!重要的是,如果可能的话,最好关闭更多的语义标记。

这是代码气味,但那是因为它是对IECool的兼容性攻击,谢谢。。我还没有写过,但被分配到模板中使用,我只是想在盲目添加之前了解为什么要使用它。它有时被用来在整个文档中强制执行某些规则,例如默认字体大小、字体或颜色。带有*的Keep in rules应在css文档的开头使用,因为它的作用域将包含在整个文档中。因此,所有与先前声明的选择器冲突的样式都将被覆盖(css的级联规则),这不是多余的。这应该意味着HTML是其他元素的子元素。根据大多数浏览器的解释,情况并非如此。但在IE中,HTML是某种神秘的uber元素的产物。哎呀,不知为什么,我读这些东西的时候,好像它们之间有个逗号似的!:(
html p { font-color: red }
p { font-color: blue }