Her şeyden önce, bir feragatname. Aşağıda sunduğum çözümü gerçekten savunmuyorum. Tarayıcıya özgü tek CSS yazdığım IE (özellikle IE6) için olsa da, durum böyle olmasaydı.
Şimdi, çözüm. Zarif olmasını istedin, bu yüzden ne kadar zarif olduğunu bilmiyorum ama sadece Gecko platformlarını hedefleyeceğinden eminim.
Hile yalnızca JavaScript etkinleştirildiğinde çalışır ve Firefox'ta ve diğer tüm Gecko tabanlı ürünlerde dahili olarak kullanılan Mozilla bağlarını ( XBL ) kullanır . Karşılaştırma için bu, IE'deki davranış CSS özelliği gibidir, ancak çok daha güçlüdür.
Çözümümde üç dosya yer alıyor:
- ff.html: stil verilecek dosya
- ff.xml: Gecko bağlantılarını içeren dosya
- ff.css: Firefox'a özgü stil
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;
}
Güncelleme:
Yukarıdaki çözüm o kadar iyi değil. Yeni bir LINK öğesi eklemek yerine bu "firefox" sınıfını BODY öğesine ekleyecekse daha iyi olur . Ve sadece yukarıdaki JS'yi aşağıdaki ile değiştirerek mümkündür:
this.className += " firefox";
Çözüm, Dean Edwards'ın moz davranışlarından ilham alıyor .