2014-09-28 62 views
0

我刚才看到这个在CSS文件:CSS:单ID选择与ID选择之后更多的东西

#nav { margin: 13px 0 0 0; } 

#nav ul li { margin: 0 20px 0 0; } 

不第二#nav属性定义抵消第一#nav属性定义?

(另外:我说的是正确的吗?“属性定义”?大括号内的东西通常被接受的术语是什么?)。

+1

第一个选择带有id ='nav''的元素并对其进行样式设置,而第二个元素在id ='nav''的元素内选择'ul'下的'li'元素。 – Harry 2014-09-28 14:56:14

+0

这是[声明块](http://apps.workflower.fi/vocabs/css/en#declaration-block) – Quentin 2014-09-28 14:56:34

+0

不,第二个将只覆盖id为nav的元素中的li。 – 2014-09-28 14:56:35

回答

-1

第二个定义没有“取消”的第一个;它会选择nav后代的已命名元素,而不是选择nav元素本身。

作为ID为nav的元素内的无序列表的后代的列表项目(li)将由第二规范进行样式化。 (根据Quentin的评论编辑)ID为nav的元素将使用第一个规范。 #nav中的元素可以从第一个规范继承。对于某些属性,但不是margin,继承是自动的。 font-family属性就是一个例子。 margin属性只能通过明确的margin: inherit;规范继承。

如果代码是这样的:

#nav { margin: 13px 0 0 0; font-family: Helvetica, Arial, sans-serif;} 
#nav ul li { margin: 0 20px 0 0; } 

然后列表项,并在nav其他一切都没有自己的font-family规范将有一个sans-serif字体。

花括号内的东西是属性和值。所以,margin是一个属性,并且保证金规格是值。花括号的剩余部分是选择器。

+0

“它更具体” - 虽然它更具体,但它与特异性无关,因为它选择了不同的元素。 – Quentin 2014-09-28 15:02:51

+0

“#nav中除了那些列表项目之外的任何内容都将使用第一个规范” - 否。只有'#nav'本身将使用第一组规则。其中的其他元素可能会*继承这些属性的值。 – Quentin 2014-09-28 15:04:06

+0

@Quentin:你对继承与直接应用是正确的。对于CSS中特异性的严格定义,你也是对的。 – 2014-09-28 15:08:48

3

不,它们适用于不同的元素,因为它们具有不同的选择器。

第一条规则适用于ID为“nav”的元素。第二条规则适用于元素li,即元素ul的后代,该元素是id为“nav”的元素的后代。

你可以阅读CSS选择在这里:https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started/Selectors

+0

...和那些选择器不能匹配相同的元素(至少不是有效的HTML)。 – Quentin 2014-09-28 14:55:52

0

1)号中的第二选择仅适用于li这是ul后裔这又是#nav后代,而第一个只适用于#nav

2)你叫他们为“风格”