2012-06-06 32 views
57

Có cách nào để giới hạn sốcủa css3 cho một lớp học không? Tôi có số lượng động là section yếu tố với các lớp khác nhau chỉ định nhu cầu bố cục của họ. Tôi muốn lấy mọi thứ 3 .module, nhưng có vẻ như là nth-of-type tra cứu loại phần tử và sau đó tính toán loại. Thay vào đó, tôi muốn giới hạn chỉ với .module giây.css3 nth loại bị giới hạn ở lớp

Cảm ơn!

JSFiddle để chứng minh: http://jsfiddle.net/danielredwood/e2BAq/1/

HTML:

<section class="featured video"> 
    <h1>VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO (3)</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO</h1> 
</section> 
<section class="featured module"> 
    <h1>NOT A VIDEO (6)</h1> 
</section> 

CSS:

.featured { 
    width:31%; 
    margin:0 0 20px 0; 
    padding:0 3.5% 2em 0; 
    float:left; 
    background:#ccc; 
} 
    .featured.module:nth-of-type(3n+3) { 
    padding-right:0; 
    background:red; 
    } 
    .featured.video { 
    width:auto; 
    padding:0 0 2em 0; 
    float:none; 
    }​ 
+2

': thứ n -of-type() 'là một lớp giả, không phải là phần tử giả. – BoltClock

Trả lời

55

Thật không may, không có cách nào (ít nhất là không có tôi biết) để chọn nth-of-type của một lớp, vì nth-of-class không tồn tại. Bạn có thể sẽ phải thêm một lớp mới vào mọi thứ ba .module theo cách thủ công.

+2

Không thể có cách nào để chọn ': nth-of-type()' của một lớp, bởi vì ': nnth-of-type()' chỉ chọn con thứ n của ** loại ** của nó. Ngoài ra, hãy xem http://stackoverflow.com/questions/6447045/css3-selector-first-of-type-with-class-name – BoltClock

+3

Hành vi của nth-of-type quá bất ngờ. .thing: nth-of-type (1) thực sự là div.thing: nnth-of-type (1) vì vậy nếu bạn không bao gồm phần tử trong selectors của bạn thì nó rất khó hiểu. Nếu bạn không nghĩ rằng điều này là bất ngờ thì tại sao nó gây ra nhiều sự nhầm lẫn giữa các nhà phát triển? –

+6

@Dominic Watson: Tôi nghĩ vấn đề ở đây là hầu hết các tác giả không quen thuộc với thuật ngữ "loại phần tử", được sử dụng bởi Selectors thay cho cụm từ "tên thẻ" cụ thể về HTML/XML. Điều đó được làm rõ một chút trong Selectors cấp 4, nhưng không phải bởi rất nhiều. – BoltClock

28

Có vẻ như những gì bạn thực sự muốn là css4 :nth-match selector, nhưng nó không thực sự hỗ trợ trong hầu hết các trình duyệt, vì vậy hiện nay, cách duy nhất để làm điều đó là với javascript

$(".featured.module").filter(function(index, element){ 
    return index % 3 == 2; 
}).addClass("third"); 

http://jsfiddle.net/w3af16dj/

+2

Tại sao bạn chuyển 'element' làm đối số cho hàm? Nó không được sử dụng – bg17aw

+4

bởi vì tôi nghĩ nó là tài liệu tham khảo hữu ích cho người đọc SO, khi tôi viết câu trả lời này, tôi phải kiểm tra tài liệu để ghi nhớ đối số nào đến trước. Tôi cũng giả định một số người sẽ sửa đổi mã. –

+0

Không có ý tưởng ai sẽ downvote này, cung cấp một câu trả lời hiện tại và một (vẫn) trong tương lai-câu trả lời. Để tiết kiệm cho bất kỳ ai nỗ lực nếu bạn xem xét nó, 'kết quả phù hợp 'vẫn không được hỗ trợ trong Chrome vào năm 2017. Không cần phải kiểm tra các trình duyệt khác cho tôi. –

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