Zunächst ein Haftungsausschluss. Ich befürworte nicht wirklich die Lösung, die ich unten präsentiere. Das einzige browserspezifische CSS, das ich schreibe, ist für IE (insbesondere IE6), obwohl ich wünschte, es wäre nicht der Fall.
Nun die Lösung. Sie haben darum gebeten, elegant zu sein, damit ich nicht weiß, wie elegant es ist, aber es wird sicher nur auf Gecko-Plattformen abzielen.
Der Trick funktioniert nur, wenn JavaScript aktiviert ist und Mozilla-Bindungen ( XBL) verwendet ) verwendet werden, die intern in Firefox und allen anderen Gecko-basierten Produkten häufig verwendet werden. Zum Vergleich: Dies ähnelt der CSS-Eigenschaft des Verhaltens im IE, ist jedoch viel leistungsfähiger.
An meiner Lösung sind drei Dateien beteiligt:
- ff.html: Die zu formatierende Datei
- ff.xml: Die Datei mit den Gecko-Bindungen
- ff.css: Firefox-spezifisches Styling
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;
}
Update:
Die obige Lösung ist nicht so gut. Es wäre besser, wenn anstelle eines neuen LINK-Elements die "Firefox" -Klasse zum BODY-Element hinzugefügt würde. Und es ist möglich, indem Sie einfach den obigen JS durch den folgenden ersetzen:
this.className += " firefox";
Die Lösung ist von Dean Edwards 'Moz-Verhalten inspiriert .