Trước hết, từ chối trách nhiệm. Tôi không thực sự ủng hộ cho giải pháp tôi trình bày dưới đây. CSS cụ thể của trình duyệt duy nhất tôi viết là dành cho IE (đặc biệt là IE6), mặc dù tôi ước nó không phải như vậy.
Bây giờ, giải pháp. Bạn đã yêu cầu nó phải thanh lịch để tôi không biết nó thanh lịch như thế nào nhưng chắc chắn sẽ chỉ nhắm mục tiêu vào nền tảng Gecko.
Thủ thuật này chỉ hoạt động khi JavaScript được kích hoạt và sử dụng các ràng buộc Mozilla ( XBL ), được sử dụng nhiều trong nội bộ Firefox và tất cả các sản phẩm dựa trên Gecko khác. Để so sánh, đây giống như thuộc tính CSS hành vi trong IE, nhưng mạnh hơn nhiều.
Ba tập tin liên quan đến giải pháp của tôi:
- ff.html: tệp theo kiểu
- ff.xml: tệp chống lại các ràng buộc Gecko
- ff.css: Kiểu dáng cụ thể của Firefox
ff.html
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
body {
-moz-binding: url(ff.xml#load-mozilla-css);
}
</style>
</head>
<body>
<h1>This should be red in FF</h1>
</body>
</html>
ff.xml
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl">
<binding id="load-mozilla-css">
<implementation>
<constructor>
<![CDATA[
var link = document.createElement("link");
link.setAttribute("rel", "stylesheet");
link.setAttribute("type", "text/css");
link.setAttribute("href", "ff.css");
document.getElementsByTagName("head")[0]
.appendChild(link);
]]>
</constructor>
</implementation>
</binding>
</bindings>
ff.css
h1 {
color: red;
}
Cập nhật:
Giải pháp trên không tốt. Sẽ tốt hơn nếu thay vì phụ thêm một yếu tố LINK mới nó sẽ thêm rằng lớp "firefox" trên phần tử BODY. Và điều đó là có thể, chỉ bằng cách thay thế JS ở trên bằng cách sau:
this.className += " firefox";
Giải pháp được lấy cảm hứng từ các hành vi moz của Dean Edwards .