Pertama-tama, penafian. Saya tidak menganjurkan solusi yang saya sajikan di bawah ini. Satu-satunya CSS spesifik browser yang saya tulis adalah untuk IE (terutama IE6), meskipun saya berharap bukan itu masalahnya.
Sekarang solusinya. Anda memintanya menjadi elegan jadi saya tidak tahu seberapa elegan itu tapi pasti akan menargetkan platform Gecko saja.
Trik ini hanya berfungsi ketika JavaScript diaktifkan dan memanfaatkan Mozilla bindings ( XBL ), yang banyak digunakan secara internal di Firefox dan semua produk berbasis Gecko lainnya. Sebagai perbandingan, ini seperti perilaku properti CSS di IE, tetapi jauh lebih kuat.
Tiga file terlibat dalam solusi saya:
- ff.html: file ke gaya
- ff.xml: file yang mengandung binding Gecko
- ff.css: gaya khusus 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;
}
Pembaruan:
Solusi di atas tidak terlalu bagus. Akan lebih baik jika bukan menambahkan elemen LINK baru itu akan menambah bahwa "firefox" kelas pada elemen BODY. Dan itu mungkin, hanya dengan mengganti JS di atas dengan yang berikut ini:
this.className += " firefox";
Solusi ini terinspirasi oleh perilaku moz Dean .