2014-07-09 16 views
67

tôi không thể biết sự khác biệt giữa element:first-childelement:first-of-typeSự khác biệt giữa: con đầu tiên và: kiểu đầu tiên là gì?

Ví dụ nói, bạn đã có một div

div:first-child
→ Tất cả <div> yếu tố đó là đứa con đầu lòng của cha mẹ họ.

div:first-of-type
→ Tất cả <div> yếu tố đó là <div> tử đầu tiên của cha mẹ họ.

Điều này có vẻ giống như điều tương tự, nhưng chúng hoạt động khác nhau.

Có thể ai đó vui lòng giải thích?

+0

con đầu tiên chỉ nhắm đến các đứa con đầu lòng của cha mẹ, nơi đầu tiên của loại nhắm đến các đứa trẻ đầu tiên thuộc loại đó (div hoặc nhịp hoặc bất kỳ thứ gì bạn đang cố gắng nhắm mục tiêu) – Huangism

+0

Cảm ơn! Điều này thực sự là tâm-boggling và tôi không thể nói sự khác biệt. –

Trả lời

117

Một yếu tố phụ huynh có thể có một hoặc nhiều phần tử con:

<div class="parent"> 
    <div>Child</div> 
    <div>Child</div> 
    <div>Child</div> 
    <div>Child</div> 
</div> 

Trong số những đứa trẻ này, chỉ có một trong số họ có thể là người đầu tiên. Đây là lần xuất hiện bởi :first-child:

<div class="parent"> 
    <div>Child</div> <!-- :first-child --> 
    <div>Child</div> 
    <div>Child</div> 
    <div>Child</div> 
</div> 

Sự khác biệt giữa :first-child:first-of-type:first-of-type sẽ phù hợp với các yếu tố đầu tiên của loại nguyên tố của nó, mà trong HTML được đại diện bởi tên thẻ của nó, ngay cả khi yếu tố đó không phải là con đầu tiên của cha mẹ. Cho đến nay các phần tử con mà chúng ta đang xem có tất cả là div s, nhưng hãy chịu đựng với tôi, tôi sẽ hiểu điều đó một chút.

Hiện tại, cuộc trò chuyện cũng đúng: bất kỳ :first-child cũng là :first-of-type bởi sự cần thiết. Kể từ khi đứa con đầu lòng ở đây cũng là div đầu tiên, nó sẽ phù hợp cả pseudo-lớp học, cũng như các loại selector div:

<div class="parent"> 
    <div>Child</div> <!-- div:first-child, div:first-of-type --> 
    <div>Child</div> 
    <div>Child</div> 
    <div>Child</div> 
</div> 

Bây giờ, nếu bạn thay đổi kiểu của đứa con đầu lòng từ div để một cái gì đó khác, như h1, nó vẫn sẽ là đứa trẻ đầu tiên, nhưng nó sẽ không còn là div đầu tiên rõ ràng; thay vào đó, nó sẽ trở thành (và duy nhất) đầu tiên (và duy nhất) h1. Nếu có bất kỳ phần tử nào khác của div sau đứa con đầu tiên này trong cùng một cha mẹ, thì phần tử đầu tiên trong số đó sẽ là . Trong ví dụ được đưa ra, đứa con thứ hai trở thành người đầu tiên div sau khi đứa con đầu lòng được thay đổi thành một h1:

<div class="parent"> 
    <h1>Child</h1> <!-- h1:first-child, h1:first-of-type --> 
    <div>Child</div> <!-- div:nth-child(2), div:first-of-type --> 
    <div>Child</div> 
    <div>Child</div> 
</div> 

Lưu ý rằng :first-child tương đương với :nth-child(1). Điều này cũng ngụ ý rằng trong khi bất kỳ phần tử nào chỉ có thể có một phần tử con duy nhất phù hợp với :first-child tại một thời điểm, nó có thể và sẽ có nhiều trẻ em khớp với số :first-of-type giả như số loại trẻ em có.Trong ví dụ của chúng tôi, chọn .parent > :first-of-type (với một tiềm ẩn * đủ điều kiện các :first-of-type giả) sẽ phù hợp hai yếu tố, không chỉ là một:

<div class="parent"> 
    <h1>Child</h1> <!-- .parent > :first-of-type --> 
    <div>Child</div> <!-- .parent > :first-of-type --> 
    <div>Child</div> 
    <div>Child</div> 
</div> 

Điều này cũng đúng cho :last-child:last-of-type: bất kỳ :last-child là bởi sự cần thiết cũng :last-of-type, vì hoàn toàn không có yếu tố nào khác đi theo nó trong cha mẹ của nó. Tuy nhiên, bởi vì div cuối cùng cũng là đứa trẻ cuối cùng, các h1 không thể là đứa trẻ cuối cùng, mặc dù là người cuối cùng của loại hình này.

+4

Cuối cùng tôi đã hiểu. Nếu tôi muốn div đầu tiên dưới một phần tử div tôi sẽ gọi div: first-of-type, bởi vì có thể có các phần tử không phải div trên nó. Đó là một chút khó hiểu, nhưng bây giờ tôi đã hiểu. Đây là một bài viết tuyệt vời và rất thông tin. Cảm ơn bạn và sự giúp đỡ của bạn được đánh giá cao. –

+0

Siêu rõ ràng! Cảm ơn! –

+0

tôi không biết điều này tồn tại, điều này sẽ giúp tôi rất nhiều trong quá khứ. Tôi đã làm nth-child (2) vv – artSir

9

Tôi đã tạo ví dụ để chứng minh sự khác biệt giữa first-childfirst-of-type tại đây.

HTML

<div class="parent"> 
    <p>Child</p> 
    <div>Child</div> 
    <div>Child</div> 
    <div>Child</div> 
</div> 

CSS

.parent :first-child { 
    color: red; 
} 

.parent :first-of-type { 
    background: yellow; 
} 

.parent p:first-child { 
    text-decoration: line-through; 
} 

// Does not work 
.parent div:first-child { 
    font-size: 20px; 
} 
// Use this instead 
.parent div:first-of-type { 
    text-decoration: underline; 
} 
// This is second child regardless of its type 
.parent div:nth-child(2) { 
    border: 1px black solid; 
} 

Để xem các ví dụ hoàn chỉnh, vui lòng truy cập https://jsfiddle.net/bwLvyf3k/1/

+0

cảm ơn bạn đã lấy mẫu của bạn. Nó giúp tôi hiểu rõ nó. – kimiberi

Các vấn đề liên quan