En primer lugar, un descargo de responsabilidad. Realmente no abogo por la solución que presento a continuación. El único CSS específico del navegador que escribo es para IE (especialmente IE6), aunque desearía que no fuera el caso.
Ahora, la solución. Le pediste que fuera elegante, así que no sé qué tan elegante es, pero seguramente solo se dirigirá a las plataformas Gecko.
El truco solo funciona cuando JavaScript está habilitado y hace uso de los enlaces de Mozilla ( XBL ), que se usan mucho internamente en Firefox y todos los demás productos basados en Gecko. A modo de comparación, esto es como el comportamiento de la propiedad CSS en IE, pero mucho más potente.
Hay tres archivos involucrados en mi solución:
- ff.html: el archivo al estilo
- ff.xml: el archivo que contiene los enlaces Gecko
- ff.css: estilo específico de 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;
}
Actualización:
la solución anterior no es tan buena. Sería mejor si en lugar de agregar un nuevo elemento LINK agregara esa clase "firefox" en el elemento BODY. Y es posible, simplemente reemplazando el JS anterior con lo siguiente:
this.className += " firefox";
La solución está inspirada en los comportamientos moz de Dean Edwards .