【发布时间】:2013-11-29 17:37:03
【问题描述】:
.some_class{} 和 *.some_class{} 有什么区别。
这是否意味着该类仅应用于另一个标签内的标签或根本没有区别?
【问题讨论】:
-
这太不可思议了。首先你有问题问“在属性之前 * 是什么意思”,人们回答“它意味着一个通用选择器”,现在你有问题问“在类选择器之前 * 是什么意思”,人们说这是一个属性黑客即。
标签: css css-selectors
.some_class{} 和 *.some_class{} 有什么区别。
这是否意味着该类仅应用于另一个标签内的标签或根本没有区别?
【问题讨论】:
标签: css css-selectors
没有区别-见here
通用选择器,写成“*”,匹配任何元素类型的名称。它匹配文档树中的任何单个元素。
如果通用选择器不是简单选择器的唯一组件,则可以省略“*”。例如:
*[lang=fr] and [lang=fr] are equivalent.
*.warning and .warning are equivalent.
*#myid and #myid are equivalent.
【讨论】:
它们之间根本没有区别。如果您没有指定元素类型,例如div 或p,那么您是否有* 并不重要。即使您忽略它,也暗示您想要匹配 any 元素,只要它具有类 some_class。来自spec:
如果由 * 表示的通用选择器(即没有命名空间前缀)不是简单选择器选择器序列的唯一组件或紧跟在伪元素之后,则可以省略 * 并且通用选择器的存在默示。
例子:
*[hreflang|=en]和[hreflang|=en]是等价的,*.warning和.warning是等价的,*#myid和#myid是等价的。
您所描述的元素位于其他元素中的内容仅适用于 * 与类通过空格分隔的情况,例如* .some_class。只有当它在另一个元素内时,它才会匹配具有类 some_class 的元素(基本上这意味着它永远不会匹配根元素)。
采用上述关于* 的解释,这将使带有空格的选择器也等同于* *.some_class。在这里您可以看到 两个 通用选择器正在使用中,由组合符分隔。第二个恰好是可选的,因为它已经被类选择器限定了(第一个不是可选的,因为它自己存在)。
【讨论】:
假设在班级去之前 id (#id.class):
加上不带astherisc没有任何区别,因为asterisc的意思是CSS会应用到任何有这个class的id上,和不带astherisc的class一样:
// This style will be applied to anybody that has the attribute class="my_class"
.my_class{
}
// This class will be applied to anybody to any id that also has the attribute class="my_class"
*.my_class{
}
希望对你有帮助!
【讨论】: