考虑以下CSS:
* { font-family: Gill Sans, Verdana, Arial, Helvetica, Sans-Serif}
p { font-family: Courier; }
然后这个标记......
<p>Hi there. So <em>very</em> pleased to make your acquaintance.</p>
为什么<em>
会显示在Gill Sans中?或者更确切地说,为什么通配符会覆盖<p>
。如果每个标签都具有相同的“重量”,我想我可以看到-some-逻辑,但它对我来说似乎仍然是一个“错误”...而且它往往会为我提供更多标记,因为我可以不要以为<em>
会以特定的方式影响字体样式。
简而言之,有没有办法让像<em>
这样的“修饰符”仅对特定功能进行操作?
答案 0 :(得分:1)
*
匹配每个元素,包括<em>
内的<p>
。
<em>
会继承<p>
中的字体,但*
会覆盖它。
你几乎不应该使用*
如果要应用全局字体,请将其设置为body
,以便其他规则可以覆盖特定元素并级联到其后代。
答案 1 :(得分:1)
假设只显示了代码,font-family
元素上唯一的em
声明集就是为*
设置的声明集,因此适用。然后完全无关的是font-family
可能已在其父级上设置。
问题是“有没有一种方法可以使'<em>
'修饰符'仅对特定功能进行操作”这是没有意义的,因为<em>
不是修饰符,因为CSS通常在特定的操作上运行特征。因此,如果您在em
元素上设置属性,它将会应用,除非该元素的另一个设置覆盖它。在给定的示例中,没有设置冲突:只应用一个规则。
答案 2 :(得分:0)
我想你可以修改你的CSS并修复它:
p, p * { font-family: Courier; }
或使用body
选择器代替*