まず免責事項です。私は、以下に提示する解決策を実際に支持しているわけではありません。私が書いたブラウザ固有の 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 要素を追加する代わりに、その「firefox」クラスを BODY 要素に追加する方がよいでしょう。そして、上記の JS を次のものに置き換えるだけで可能です。
this.className += " firefox";
このソリューションは、 Dean Edwards の moz-behaviorsに触発されています。