首先,免责声明。我实际上并不主张我在下面提出的解决方案。我编写的唯一针对浏览器的CSS是针对IE(尤其是IE6)的,尽管我希望并非如此。
现在,解决方案。您要求它优雅,所以我不知道它有多优雅,但可以肯定只针对Gecko平台。
该技巧仅在启用JavaScript并使用Mozilla绑定(XBL)时才有效,该绑定在Firefox和所有其他基于Gecko的产品内部大量使用。作为比较,这类似于IE中的行为CSS属性,但功能更强大。
我的解决方案涉及三个文件:
- 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元素的“火狐”级。只需将以下JS替换为以下代码,就有可能:
this.className += " firefox";
该解决方案的灵感来自Dean Edwards的莫兹行为。