2011-12-16 28 views
14

Tôi có nên làm việc này không?con đầu tiên không hoạt động

.project.work:first-child:before { 
 
    content: 'Projects'; 
 
} 
 
.project.research:first-child:before { 
 
    content: 'Research'; 
 
}
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project research"> 
 
    <p>abcdef</p> 
 
</div>

projects:first-child hoạt động tốt, research:first-child không dính. Bất kỳ ý tưởng?

Demo Nó không hoạt động, nhưng cách tốt nhất để đạt được điều này là gì?

+2

': đầu tiên child' chỉ chọn những đứa con đầu lòng. Không có gì khác. – BoltClock

+0

.project.research: first-child Chẳng phải đó là loại đầu tiên của loại này sao? – uriah

+0

Đó là, nhưng nó không phải là đứa con đầu tiên của cha mẹ của nó. – BoltClock

Trả lời

14

:first-child chỉ chọn con đầu tiên của cha mẹ. Không có gì khác.

Như đã đề cập trong một vài câu trả lời khác của tôi trên các trang web (1234), không có pseudo-class :first-of-class. Nếu bạn đang tìm cách áp dụng kiểu cho lớp đầu tiên của mỗi phần tử trong các phần tử div, giải pháp là áp dụng kiểu cho tất cả trẻ em của lớp đó và bộ chọn anh chị em chung để hoàn tác các kiểu từ anh chị em sau đó.

CSS của bạn sau đó sẽ trông như thế này:

.project.work:before { 
    content: 'Work'; 
} 

.project.research:before { 
    content: 'Research'; 
} 

.project.work ~ .project.work:before, 
.project.research ~ .project.research:before { 
    content: none; 
} 
+0

Không có cách nào trong CSS tinh khiết để áp dụng động này (nghĩa là không cần phải mã hóa các lớp thừa nếu bạn quyết định thêm sau này), mặc dù. Khi bạn thêm các lớp khác, bạn phải thêm chúng vào CSS theo cách thủ công trong mẫu này. – BoltClock

+0

Hoàn hảo, áp dụng cho tất cả và hoàn tác anh chị em. Cảm ơn @boltclock Vì vậy, nếu tôi nếu có thêm một lớp học như '.project.photography' nó sẽ không hoạt động? – uriah

+0

@uriah: Nó sẽ hoạt động, bạn chỉ cần thêm nó theo cách thủ công. – BoltClock

1

Từ specification:

Tương tự như :nth-child(1). Lớp giả :first-child đại diện cho một phần tử là phần tử con đầu tiên của một phần tử khác.

.project.research không phải là con đầu tiên của cha mẹ.

0

Tôi tin rằng bạn muốn CSS này:

.project.work p:first-child:before {content:'Projects';} 
.project.research p:first-child:before {content:'Research';} 

hoặc

.project.work > p:first-child:before {content:'Projects';} 
.project.research > p:first-child:before {content:'Research';} 

Updated fiddle

Đó phù hợp với đứa con đầu lòng của một yếu tố với các lớp "dự án" và "công việc "(hoặc" dự án "và" nghiên cứu "). Bạn không phải sử dụng p:first-child nếu có thể không phải là yếu tố p, thay vào đó bạn có thể sử dụng *:first-child.

+0

Cảm ơn! Tôi chỉ muốn chọn loại đầu tiên của loại hình này và áp dụng CSS không phải mọi phần tử. Điều này chọn tất cả chúng. – uriah

+0

@uriah: Ah. Tôi không nghĩ rằng bạn có thể làm điều đó mà không thay đổi đánh dấu của bạn. Tôi không nghĩ rằng ngay cả bộ chọn CSS3 cũng có cách chọn phần tử đầu tiên trong một vùng chứa với một cặp tên lớp đã cho. Ngay cả ': first-of-type' sẽ áp dụng cho kiểu phần tử, không phân biệt lớp. –

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