2012-07-20 26 views
12

Theo các tài liệu CSS: http://www.w3.org/TR/CSS21/cascade.html#specificityCSS lớp lặp lại để tăng độ đặc hiệu

đặc hiệu được xác định bởi (trong số những thứ khác) số lượng các thuộc tính và pseudo-classes trong bộ chọn.

Vì vậy, câu hỏi của tôi là, có thể tăng độ đặc hiệu bằng cách lặp lại cùng một tên lớp nhiều lần không?

Ví dụ:

sẽ

.qtxt.qtxt.qtxt.qtxt.qtxt 
{ 
} 

có tính đặc hiệu cao hơn

.qtxt.lalgn 
{ 
} 

hoặc

.lalgn .qtxt//(space added to create child selector) 
{ 
} 

?

+0

Tôi sẽ đoán rằng điều này sẽ cụ thể cho từng trình duyệt. –

Trả lời

20

Có, có thể và cố ý như vậy. Trong khi điều này không được đề cập trong spec CSS2, nó được đề cập một cách rõ ràng trong Selectors 3 spec:

Lưu ý: occurrances Lặp đi lặp lại [sic] của bộ chọn đơn giản tương tự được phép và làm tăng độ đặc hiệu.

Do đó trình duyệt phải tăng độ đặc hiệu khi gặp phải selectors đơn giản lặp đi lặp lại, miễn là bộ chọn là hợp lệ và được áp dụng. Điều này không chỉ áp dụng cho các lớp lặp lại, mà còn áp dụng cho các ID, thuộc tính và các lớp giả lặp đi lặp lại.

Với mã của bạn, .qtxt.qtxt.qtxt.qtxt.qtxt sẽ có độ đặc hiệu cao nhất. Hai bộ chọn khác là như nhau cụ thể; combinators không có mang trong các phép tính đặc hiệu ở tất cả:

/* 5 classes -> specificity = 0-5-0 */ 
.qtxt.qtxt.qtxt.qtxt.qtxt 

/* 2 classes -> specificity = 0-2-0 */ 
.qtxt.lalgn 

/* 2 classes -> specificity = 0-2-0 */ 
.lalgn .qtxt 

Ngoài ra, không gian trong bộ chọn cuối cùng của bạn là hậu duệ combinator; các con combinator là >.

+1

Tôi vừa mới gặp nó trong Material Design Lite và tôi phải nói điều này phải là sự ghê tởm spaghetti CSS kỳ lạ nhất mà tôi từng gặp phải. Tôi không thể bao quanh tâm trí của tôi rằng một số người nghĩ rằng nó sẽ là một ý tưởng tốt để sử dụng một cái gì đó như thế này trong một thư viện CSS. – Senthe

-3

Bạn không cần phải hack tính đặc hiệu như thế này ... nếu bạn cần ép buộc giá trị, hãy sử dụng !important.

+0

Thankyou cho đề nghị, và tôi rất có thể sẽ sử dụng này, nhưng ... Tôi vẫn không biết câu trả lời cho câu hỏi của tôi –

+0

! Quan trọng không được sử dụng nhẹ. Bạn phải thực sự xem xét rằng có thực sự không phải là một cách khác xung quanh việc sử dụng cụ thể, vv ...Chỉ sau đó bạn nên sử dụng! – brunoais

+0

Kết hợp các lớp học không phải là một hack, đó là đặc tả CSS chính thức để tăng độ đặc hiệu. Sử dụng '! Quan trọng' tín hiệu noob trạng thái và sự thiếu hiểu biết của css. Rất hiếm khi mọi người nên sử dụng! Quan trọng vì nó đánh bại điểm đặc trưng của CSS. Khi bạn có 5 lớp, tất cả đều khai báo '! Important' trên cùng một thuộc tính, làm cách nào bạn tìm thấy sự tỉnh táo của mình? Tôi chỉ sử dụng '! Quan trọng' như một phương sách cuối cùng hoặc khi giao dịch với một số noobs cadd khủng khiếp khác và cách duy nhất của nó để làm cho nó hoạt động mà không cần viết lại toàn bộ thư viện – TetraDev

1

.qtxt.qtxt.qtxt sẽ có độ đặc hiệu cao nhất ...

http://jsfiddle.net/nXBTp/1/

Tuy nhiên, đây chỉ là những trường hợp nếu bạn lặp lại tên lớp nhiều lần so với bất kỳ chọn khác, ví dụ:

http://jsfiddle.net/nXBTp/2/

+0

Thankyou! :) Bạn đã sử dụng trình duyệt nào từ tò mò? Hoạt động ở đây trên safari, sẽ kiểm tra firefox –

+0

Tôi đã thử nghiệm trong phiên bản mới nhất của Chrome, Firefox, Safari và IE. Có kết quả tương tự cho mỗi kết quả. – smilledge

+0

Hành vi này được thiết kế và yêu cầu của các trình duyệt. Xem câu trả lời của tôi để tham khảo. – BoltClock

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