13

我已经进行了一些谷歌搜索,但到目前为止,我还没有找到任何可以回答我关于 CSS 顺序或重要性的问题。

例如,内联覆盖外部。知道了。在外部添加 !important 可以覆盖内联。此外,从我所学过的所有内容来看,后来的风格会覆盖早期的风格。所以:

h1 { font-size: 12pt; }
h1 { font-size: 14pt; }

将呈现 14pt 的字体大小。但情况并非总是如此。有时我想定义如下样式:

<div id="content">
    <input class="regular" type="text" />
    <input class="regular" type="text" />
    <input class="long" type="text" />

然后在css中:

#content input { width: 50%; }
.long { width: 75%; }

但这并不总是有效。我在哪里可以看到重要性的顺序,因为所有这些都有特定的重要性级别:

input {} 
#content input {}
#content input.regular {}
#content input.long
input.regular {}
input.long {}
.regular {}
.long {}

我真的不喜欢写 !important ,但是如果我不能具体弄清楚重要性的顺序,那么有时我必须更改 ids、classes 等。

4

3 回答 3

12

您要搜索的术语是“特异性”。

当您有两个(或更多)CSS 块,其选择器选择相同的 HTML 元素,并且都尝试在该元素上设置相同的 CSS 属性时,具有更具体选择器的块将胜出。

CSS 3 选择器规范详细说明了应该如何计算特异性,并且它具有合理的可读性:

还有一些很好的博客文章也描述了规则:

(请注意,当两个块具有相同特异性的选择器时,只有随后块的规则才会胜出,就像在您的示例中使用h1s 一样。具有更具体选择器的块中的规则将覆盖具有更具体选择器的块中的规则不太具体的选择器。)

于 2012-07-17T19:34:38.200 回答
7

您正在体验 CSS 特异性。如果您有两种适用于同一元素的冲突样式,则有一个加权系统可以确定哪种样式获胜。你可以在这里读更多关于它的内容:

http://css-tricks.com/specifics-on-css-specificity/

于 2012-07-17T19:32:07.530 回答
4

对于这种情况,这就是您要做的

#content input { width: 50%; }
#content .long { width: 75%; }

选择具有其 ID 的元素将优先,因此您遇到了这个特定问题。将 ID 添加到您的选择中并更具体将解决问题

例如 :

#content input.long { width: 75%; }

甚至比

#content .long { width: 75%; }
于 2012-07-17T19:31:45.580 回答