nth-child vs nth-of-type trong CSS có gì khác nhau?

Trong css, nth-child()nth-of-type() là pseudo-class cho phép chúng ta chọn các phần tử dựa trên thông tin từ document tree, những phần tử được chọn bởi 2 pseudo-class này thường không thể được chọn bởi các selectors đơn giản khác.

Khi sử dụng nth-child()nth-of-type() trong css, chúng ta thường thấy chúng cho kết quả giống nhau ở một số trường hợp. Tuy nhiên 2 pseudo-class có cách hoạt động khác nhau, một số bạn mới học CSS thường không biết khi nào sử dụng nth-child(), khi nào thì dùng nth-of-type() 😥 và chúng khác nhau ở điểm nào. Vậy nên trong bài viết này, mình xin đưa ra một số điểm khác nhau giữa nth-child()nth-of-type() nhé!

:nth-child vs :nth-of-type

Chúng ta cùng xem một ví dụ dưới đây, mình tạo một đoạn HTML như sau :

>

>

homiedev.com

< / p p>

>

:nth-child vs :nth-of-type

< / p p>

< / p div>

Để style cho phần tử p thứ 2. Chúng ta có thể sử dụng :nth-child hoặc :nth-of-type:

p : nth-child ( 2 ) { font-size: 18px; }

Hoặc

p : nth-of-type ( 2 ) { font-size: 18px; }

Tất nhiên tác dụng nhận được là giống nhau, nhưng cách hoạt động giải trí của chúng khác nhau .

Với nth-child(2) ở trên, chúng ta đang chọn phần tử thỏa mãn:

  1. Là phần tử, có vị trí thứ 2 so với những thành phần cùng cấp khác .

Với nth-of-type(2) ở trên, chúng ta đang chọn phần tử thỏa mãn:

  1. Là phần tử thứ 2 so với những thành phần cùng loại ( cùng là thẻ p ), cùng cấp khác .

Bây giờ tất cả chúng ta cùng coi một ví dụ khác để hiểu cách chúng hoạt động giải trí nhé :

>

href

="https://final-blade.com"

>

homiedev.com

< / p a>

>

:nth-child vs :nth-of-type

< / p p>

>

b vs strong

< / p p>

< / p div>

Bây giờ đối tượng chúng ta muốn style là b vs strong, trong trường hợp này, sử dụng :nth-child:nth-of-type sẽ cho kết quả khác nhau:

p : nth-child ( 2 ) { font-size: 18px; }  
p : nth-of-type ( 2 ) { font-size: 18px; } 

:nth-child vs :nth-of-type example

Trong trường hợp này, nếu sử dụng p:nth-child(2) thì phần tử : nth-child vs : nth-of-type sẽ được style. Lý do là vì p:nth-child(2) sẽ chọn phần tử là thẻ p và có vị trí thứ 2 so với những phần tử cùng cấp khác và không yêu cầu cùng loại thẻ giống :nth-of-type.

Tóm lại chúng ta có thể thấy được sự khác nhau giữa :nth-child:nth-of-type:

  • nth-child(position): position đại diện cho vị trí của phần tử trong số các anh chị em của nó (phần tử cùng cấp).
  • nth-of-type(position): position đại diện cho vị trí của phần tử trong số các anh chị em của nó (phần tử cùng cấp) có cùng loại phần tử.