2010-12-22 68 views
64

我试图选择div中的第一个h1,其类名为detail_container。如果h1是此div中的第一个元素,它的工作原理,但如果它在此之后ul它将无法正常工作。:第一个孩子未按预期工作

<style type="text/css"> 
.detail_container h1:first-child 
{ 
color:blue; 
} 
</style> 
</head> 
<body> 
<div class="detail_container"> 
    <ul> 
    <li></li> 
    <li></li> 
    </ul> 
    <h1>First H1</h1> 
    <h1>Second H1</h1> 
</div> 
</body> 
</html> 

我的印象是,CSS我会选择第一个h1不管它是在这个div。我怎样才能使它工作?

+0

无论CSS不能做什么,JavaScript都可以。 – JCOC611 2010-12-22 02:39:45

+9

这是你可以用CSS3做的东西:) – BoltClock 2010-12-22 02:43:14

回答

152

h1:first-child选择意味着

选择其父
当且仅当它是一个h1元素的第一个孩子。

此处容器的:first-childul,并且因此不能满足h1:first-child

有CSS3的:first-of-type对你的情况:

.detail_container h1:first-of-type 
{ 
    color: blue; 
} 

但随着浏览器的兼容性困境和诸如此类的东西,你最好给第一h1一类,然后针对该类:

.detail_container h1.first 
{ 
    color: blue; 
} 
8

:first-child选择第一个h1当且仅当它是其父元素的第一个孩子。在你的例子中,uldiv的第一个孩子。

伪类的名称有点令人误解,但它在规范中很清楚地解释了here

jQuery的:first选择器给你你要找的。你可以这样做:

$('.detail_container h1:first').css("color", "blue");

+0

那么,我该如何做到这一点? – 2010-12-22 02:36:57

+0

您的权利是误导性的,我主要感到困惑,因为我以前使用过jQuery来做这件事。 – 2010-12-22 02:47:31

8

对于这种特殊情况,您可以使用:

.detail_container > ul + h1{ 
    color: blue; 
} 

但是,如果你在很多情况下需要同样的选择器,你应该为这些选择一个类,就像BoltClock所说的那样。

1

您可以将h1标签包装在另一个div中,然后第一个标签将是first-childdiv甚至不需要样式。这只是一种隔离这些孩子的方式。

<div class="h1-holder"> 
    <h1>Title 1</h1> 
    <h1>Title 2</h1> 
</div> 
2

你也可以使用

.detail_container h1:nth-of-type(1) 

通过由您可以选择任何其他H1项目的任何其他改号1号。