まず、免責事項。以下に提示する解決策については、あまり主張しません。私が書いた唯一のブラウザー固有のCSSはIE(特にIE6)用ですが、そうではなかったと思います。
今、解決策です。あなたはそれをエレガントにするように頼んだので、それがどれほどエレガントかはわかりませんが、Geckoプラットフォームのみをターゲットとすることは間違いありません。
このトリックは、JavaScriptが有効になっていて、Firefoxと他のすべてのGeckoベースの製品で内部的に頻繁に使用されているMozillaバインディング(XBL)を利用している場合にのみ機能します。比較すると、これはIEの動作CSSプロパティに似ていますが、はるかに強力です。
私のソリューションには3つのファイルが関係しています。
- ff.html:スタイルを設定するファイル
- ff.xml:Geckoバインディングを含むファイル
- ff.css: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;
}
更新:
上記のソリューションはそれほど良くありません。新しいLINK要素を追加する代わりに、BODY要素にその「firefox」クラスを追加するほうがよいでしょう。上記のJSを次のJSに置き換えるだけで可能です。
this.className += " firefox";
このソリューションは、Dean Edwardsのmoz-behaviorsに触発されました。