Przede wszystkim wyłączenie odpowiedzialności. Tak naprawdę nie opowiadam się za rozwiązaniem, które przedstawiam poniżej. Jedyny napisany przeze mnie CSS dla przeglądarki jest przeznaczony dla IE (szczególnie IE6), choć szkoda, że tak nie było.
Teraz rozwiązanie. Poprosiłeś, aby był elegancki, więc nie wiem, jak elegancki jest, ale z pewnością będzie skierowany tylko na platformy Gecko.
Ta sztuczka działa tylko wtedy, gdy JavaScript jest włączony i korzysta z powiązań Mozilla ( XBL ), które są intensywnie używane wewnętrznie w Firefoksie i we wszystkich innych produktach opartych na Gecko. Dla porównania jest to właściwość CSS zachowania w IE, ale o wiele bardziej wydajna.
W moje rozwiązanie zaangażowane są trzy pliki:
- ff.html: plik do stylu
- ff.xml: plik zawierający powiązania Gecko
- ff.css: stylistyka specyficzna dla Firefoksa
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;
}
Aktualizacja:
powyższe rozwiązanie nie jest tak dobre. Byłoby lepiej, gdyby zamiast dodawać nowy element LINK , dodałby klasę „firefox” do elementu BODY. I jest to możliwe, po prostu zastępując powyższy JS następującym:
this.className += " firefox";
Rozwiązanie jest zainspirowane zachowaniem Dean Edwards .