Перш за все, відмова від відповідальності. Я не дуже виступаю за рішення, яке я подаю нижче Єдиний специфічний для браузера CSS, який я пишу, - це IE (особливо IE6), хоча я б хотів, щоб це було не так.
Тепер рішення. Ви попросили, щоб це було елегантно, тому я не знаю, наскільки це елегантно, але це обов'язково орієнтується лише на платформи Gecko.
Трюк працює лише тоді, коли JavaScript увімкнено та використовує прив’язки Mozilla ( XBL ), які широко використовуються всередині Firefox та всіх інших продуктів на базі Gecko. Для порівняння це схоже на властивість CSS поведінки в IE, але набагато потужніше.
У моєму рішенні задіяні три файли:
- 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";
Рішення натхнене розумом поведінки Діна Едвардса .