5

Khái niệm phát hiện hỗ trợ của bất kỳ lớp giả CSS nào trong trình duyệt thông qua JavaScript? Chính xác, tôi muốn kiểm tra xem trình duyệt của người dùng có hỗ trợ :checked giả hay không, bởi vì tôi đã thực hiện một số cửa sổ bật lên CSS có hộp kiểm và cần phải thực hiện dự phòng cho các trình duyệt cũ.Làm cách nào để phát hiện xem trình duyệt có hỗ trợ lớp giả định css không?

TRẢ LỜI: Tôi tìm thấy đã được triển khai method của bộ chọn css thử nghiệm trong Modernizr "Additional Tests".

+1

[Modernizr] (http://www.modernizr.com/) phát hiện nhiều thứ như thế. –

+0

Tôi biết về Modernizr, nhưng nó không có thử nghiệm cho css3 pseudo-classes hỗ trợ, chỉ các phần tử giả như ':: before', v.v. – Raiden

Trả lời

4

Bạn chỉ có thể kiểm tra nếu phong cách của bạn với pseudo-class đã được áp dụng.

Something như thế này: http://jsfiddle.net/qPmT2/1/

+4

Tìm thấy đã được triển khai [phương pháp] (https://gist.github.com/441842) kiểm tra bộ chọn css trong một Modernizr ["Thử nghiệm bổ sung"] (https://github.com/Modernizr/Modernizr/wiki). Ôi, chúa ơi, tại sao nó không ở trong lõi? – Raiden

+0

Giải pháp làm việc, nhưng hơi xấu xí – franzlorenzon

1

Nếu bạn OK với việc sử dụng Javascript, bạn có thể bỏ qua việc phát hiện và đi đúng đắn cho các shim: Selectivizr

+3

Sẽ tốt hơn nếu không sử dụng Selectivizr, bởi vì hiệu quả là làm mờ do phân tích cú pháp CSS trước khi hiển thị trang. – andychups

0

stylesheet.insertRule(rule, index) phương pháp sẽ ném lỗi nếu sự cai trị không hợp lệ. để chúng ta có thể sử dụng nó.

var supportPseudo = function(){ 
    var ss = document.styleSheets[0]; 
    if(!ss){ 
     var el = document.createElement('style'); 
     document.head.appendChild(el); 
     ss = document.styleSheets[0]; 
     document.head.removeChild(el); 
    } 
    return function (pseudoClass){ 
     try{ 
      if(!(/^:/).test(pseudoClass)){ 
       pseudoClass = ':'+pseudoClass; 
      } 
      ss.insertRule('html'+pseudoClass+'{}',0); 
      ss.deleteRule(0); 
      return true; 
     }catch(e){ 
      return false; 
     } 
    }; 
}(); 


//test 
supportPseudo(':hover'); //true 
supportPseudo(':before'); //true 
supportPseudo(':hello'); //false 
supportPseudo(':world'); //false 
Các vấn đề liên quan