2011-10-03 29 views
23

Tôi biết nó có thể xác định nhiều lớp trên một phần tử trong HTML:Trình duyệt giải quyết các lớp xung đột như thế nào?

<div class='one two'>Text</div> 

Nó có vẻ như các lớp học có thể truy cập từ javascript như là một chuỗi duy nhất.

Điều gì sẽ xảy ra khi các lớp được chỉ định với các thuộc tính xung đột? Ví dụ:

div.one { 
    background-color: red; 
    color: blue; 
} 
div.two { 
    background-color: green; 
} 

Kết quả có phụ thuộc vào thứ tự các lớp được chỉ định không? Ví dụ, tôi có thể mong đợi một cách hợp lý div ở trên xuất hiện với văn bản màu xanh và nền màu xanh lục, vì lớp two trở thành thứ hai được đánh giá, ghi đè thuộc tính background-color?

+6

Có nhiều vấn đề về kết quả được giả định ** được tạo ra (tiêu chuẩn wrt, v.v.). Chắc chắn tôi có thể kiểm tra nó trên tất cả 8 trình duyệt mà tôi đang cố gắng hỗ trợ nhưng thông tin đó thậm chí có thể không hữu ích trong hai năm kể từ bây giờ –

+0

Có một bản đọc: http://htmlhelp.com/reference/css/structure.html#cascade –

+7

@FlyBy - Tôi không đồng ý; bạn không thấy mọi người trả lời nhanh như thế nào ở đây ??? ;) – Spudley

Trả lời

25

Tìm hiểu về đặc hiệu:

Câu trả lời ngắn gọn: nếu hai công cụ chọn có cùng đặc trưng, ​​giá trị cuối cùng được công bố sẽ thắng.

12

Nếu bộ chọn có same level of precedence (như ở đây), tùy theo điều kiện nào được chỉ định sau sẽ được ưu tiên. Trong trường hợp này, nền phải có màu xanh lá cây, nhưng phông chữ có màu xanh dương.

Từ CSS spec:

Cuối cùng, sắp xếp theo thứ tự quy định: nếu hai tờ khai có cùng một trọng lượng, nguồn gốc và độ đặc hiệu, thắng quy định sau. Các tờ khai trong tờ định kiểu được nhập được coi là trước bất kỳ tờ khai nào trong bản định kiểu.

4

Những gì bạn đang sử dụng để tạo kiểu được gọi là "bảng định kiểu xếp tầng". Phần tầng có nghĩa là nó giống như một thác nước và các quy tắc trong tương lai được xây dựng trên (hoặc ghi đè) những quy tắc trước đó. Do đó quy tắc thứ hai sẽ ghi đè thuộc tính màu nền nhưng nó vẫn sẽ giữ lại màu phông chữ.

(cẩn thận với ưu tiên mặc dù. Một quy tắc mà đi tắt của một id có ưu tiên cao hơn hơn một mà đi tắt của một lớp không phân biệt nơi chúng được đặt.)

15

CSS có một trật tự rất tốt định nghĩa của ưu tiên.

Trong các trường hợp như thế này, khi tất cả các trường hợp khác giống nhau và mức độ ưu tiên bằng nhau, trình duyệt sẽ chọn kiểu được xác định cuối cùng trong bảng định kiểu.

Trong ví dụ bạn đã đưa ra, điều này có nghĩa là kiểu div.two sẽ ghi đè div.one, trong đó cùng một thuộc tính được xác định trong cả hai.

Nhân tiện, đây cũng là tính năng tương tự cho phép bạn xác định nhiều kiểu với cùng một thuộc tính trong cùng một bộ chọn, để hỗ trợ các tính năng trình duyệt khác nhau. Ví dụ, một số trình duyệt có thể không hỗ trợ màu rgba, vì vậy bạn có thể làm như sau:

.myclass { 
    background: rgb(200, 54, 54); 
    background: rgba(200, 54, 54, 0.5); 
} 

Tất cả các trình duyệt sẽ chọn background khai cuối cùng mà họ hỗ trợ, vì vậy các trình duyệt có hỗ trợ rgba sẽ chọn cái thứ hai, trong khi các trình duyệt mà không, sẽ làm gì với cái đầu tiên.Đây cũng là lý do tại sao, khi bạn sử dụng các kiểu tiền tố của nhà cung cấp, bạn cũng nên chỉ định phiên bản không có tiền tố sau (các) phiên bản tiền tố, để khi trình duyệt của nhà cung cấp đó bắt đầu hỗ trợ phiên bản không có tiền tố của phong cách, bạn có thể chắc chắn nó sẽ sử dụng nó thay vì phiên bản tiền tố (có thể không hỗ trợ tất cả các tính năng của phiên bản cuối cùng).

+0

ngoại trừ thuộc tính màu. –

+0

@Joseph - được chỉnh sửa để rõ ràng. – Spudley

+0

+1 lời giải thích ngắn gọn, ngắn gọn :) –

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