在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 }