2013-06-24 28 views
9

Có cách nào để sử dụng bộ chọn CSS để đưa con ở giữa vào danh sách các phần tử không?Lớp con trung cấp

Tôi biết rằng không có bộ chọn :middle-child theo nghĩa đen, nhưng có cách nào khác mà không cần sử dụng Javascript không?

+0

Có số lượng trẻ em thay đổi? – jackweinbender

+0

Số lượng phần tử được đặt khi tải trang và có thể thay đổi người dùng thành người dùng. – Jason

+1

Nếu bạn đang làm việc trong PHP hoặc Ruby hoặc bất cứ điều gì, bạn chắc chắn có thể viết một hàm để thêm một lớp vào phần tử ở giữa. – jackweinbender

Trả lời

0

Javascript là cách duy nhất để thực hiện phía ứng dụng khách này.

+0

Nên có giải pháp sass – Muhammed

0

Bạn đã thử :nth-child(#) chưa?

Tùy thuộc vào trang bạn muốn chọn, bạn chỉ cần thay thế # bằng số.

+0

Điều đó chỉ hoạt động nếu số lượng phần tử được biết bắt đầu bằng. Tôi đang tìm một cái gì đó mà sẽ làm việc cho một danh sách chiều dài không rõ. – Jason

+0

Vâng, tôi cho rằng nếu bạn không biết tổng số thì điều này cũng không giúp được gì, nhưng trong trường hợp bạn DO - hãy xem [CSS3-nth-child trên SO] này (http: // stackoverflow.com/questions/6692145/nth-child-css-matching-2nd-5th-8th-elements) đó là một câu hỏi tương tự với câu hỏi của bạn. –

2

Nếu bạn muốn áp dụng kiểu cho tất cả các yếu tố không phải là con đầu tiên cũng như con cuối cùng, bạn có thể sử dụng :not(:first-child), áp dụng kiểu và sau đó sử dụng :last-child để 'lấy phong cách' từ phần tử cuối cùng. Nhưng bạn phải suy nghĩ về những gì sẽ xảy ra khi có ít hơn 3 yếu tố.

+0

Nếu bạn muốn tránh trùng lặp (trong phần 'lấy kiểu đi'), hãy kiểm tra câu trả lời của tôi, kết hợp hai bộ chọn 'không', để nắm bắt tất cả các phần tử ở giữa ... :-) –

9

này đã làm việc tốt cho tôi:

*:not(:first-child):not(:last-child) { 
    ... 
} 

Bạn có thể xem ví dụ về điều này ở đây: http://codepen.io/bentomas/pen/Gwqoe

Thông báo trước một điều này là nó chỉ hoạt động trong IE 9+: http://caniuse.com/#feat=css-sel3

+1

Nó sẽ không chỉ hoạt động nếu có ba mục? Vào thời điểm đó tôi đang tìm kiếm thứ gì đó có nhiều yếu tố hơn trong đó. – Jason

+0

Không, điều này sẽ chọn tất cả các yếu tố không phải là đứa trẻ đầu tiên và không phải là đứa trẻ cuối cùng. Bạn có thể thấy nó hoạt động ở đây: http://codepen.io/bentomas/pen/Gwqoe – bentomas

+0

Ồ, trừ khi bạn muốn con * chính xác * ở giữa (tức là chỉ có một phần tử nên được khớp). Tôi đã nghĩ bạn muốn chọn tất cả những đứa trẻ đang ở giữa. Ít nhất đó là những gì tôi mong đợi một lớp học giả: "trung-con" để làm khi tôi đi tìm nó và tìm thấy chủ đề này. – bentomas

9

Trong khi không thanh lịch, nếu bạn biết giới hạn trên và dưới của tổng số phần tử, bạn có thể sử dụng phương pháp tiếp cận vũ lực để chọn phần tử ở giữa.

Ví dụ: các quy tắc sau sẽ chọn phần tử ở giữa trong bộ 5, 7 hoặc 9 phần tử.

div:nth-child(3):nth-last-child(3) { 
    /* The middle element in a set of 5 is the 3rd element */ 
} 

div:nth-child(4):nth-last-child(4) { 
    /* The middle element in a set of 7 is the 4th element */ 
} 

div:nth-child(5):nth-last-child(5) { 
    /* The middle element in a set of 9 is the 5th element */ 
} 

Hoặc với Sass:

@for $i from 3 through 5 { 
    div:nth-child(#{$i}):nth-last-child(#{$i}) { 
     /* The middle element */ 
    } 
} 
+0

Nếu có thể có số phần tử chẵn, người ta có thể bao gồm 'div: nth-child (-1 + # {$ i}): nth-last-child (# {$ i})' và/hoặc ' div: nth-child (# {$ i}): nth-last-child (-1 + # {$ i}) 'để chọn phần tử vừa trái hoặc phải của tâm, tương ứng. – Blazemonger

1

Bạn có thể sử dụng "không đầu tiên và không kéo dài" cách tiếp cận, như vậy:

CSS

li:not(:first-child):not(:last-child) { 
    color:red; 
} 

HTML

<ul> 
    <li>First</li> 
    <li>Second</li> 
    <li>Third</li> 
</ul> 

Kiểm tra JsFiddle

+1

nếu có 5 mục thì sao? – Muhammed

+0

Tính năng này chỉ hoạt động khi bạn có tổng cộng 3 mục. – RaajTram

+0

@ Rajajram bạn nói đúng, nhưng đó là câu hỏi ... –

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