Прежде всего, отказ от ответственности. Я действительно не поддерживаю решение, которое я представляю ниже. Единственный 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";
Решение вдохновлено модным поведением Дина Эдвардса .