714 Stimmen

Nur Firefox mit CSS anvisieren

Mit Hilfe von bedingten Kommentaren ist es einfach, den Internet Explorer mit browserspezifischen CSS-Regeln anzusprechen:

<!--[if IE 6]>
...include IE6-specific stylesheet here...
<![endif]-->

Manchmal ist es die Gecko-Engine (Firefox), die sich daneben benimmt. Was wäre der beste Weg, um nur Firefox mit Ihren CSS-Regeln anzusprechen und nicht einen einzigen anderen Browser? Das heißt, dass nicht nur der Internet Explorer die nur für Firefox geltenden Regeln ignorieren sollte, sondern auch WebKit und Opera.

Ich bin auf der Suche nach einer 'sauberen' Lösung. Die Verwendung eines JavaScript-Browser-Sniffers, um eine "Firefox"-Klasse zu meinem HTML hinzuzufügen, ist meiner Meinung nach nicht sauber. Ich würde lieber etwas sehen, das von den Fähigkeiten des Browsers abhängt, so wie bedingte Kommentare nur für den IE "speziell" sind

1418voto

Ionuț G. Stan Punkte 168218

OK, ich habe es gefunden. Dies ist wahrscheinlich die sauberste und einfachste Lösung, die es gibt, und setzt nicht voraus, dass JavaScript aktiviert ist.

@-moz-document url-prefix() {
  h1 {
    color: red;
  }
}

<h1>This should be red in FF</h1>

Sie basiert auf einer weiteren Mozilla-spezifischen CSS-Erweiterung. Es gibt eine ganze Liste für diese CSS-Erweiterungen hier: Mozilla CSS-Erweiterungen .

176voto

laaposto Punkte 11347

Aktualisiert (aus dem Kommentar von @Antoine)

Sie können verwenden @supports

@supports (-moz-appearance:none) {
    h1 { color:red; } 
}

<h1>This should be red in FF</h1>

Mehr dazu @supports aquí

84voto

Hier erfahren Sie, wie Sie mit drei verschiedenen Browsern umgehen können: IE, FF und Chrome

<style type='text/css'>
/*This will work for chrome */
#categoryBackNextButtons
{
    width:490px;
}
/*This will work for firefox*/
@-moz-document url-prefix() {
    #categoryBackNextButtons{
        width:486px;
    }
}
</style>
<!--[if IE]>
<style type='text/css'>
/*This will work for IE*/
#categoryBackNextButtons
{
    width:486px;
}
</style>
<![endif]-->

16voto

Hbirjand Punkte 1897

Hier sind einige Browser-Hacks, die nur auf den Firefox-Browser abzielen,

Verwendung von Selektor-Hacks.

_:-moz-tree-row(hover), .selector {}

JavaScript-Hacks

var isFF = !!window.sidebar;

var isFF = 'MozAppearance' in document.documentElement.style;

var isFF = !!navigator.userAgent.match(/firefox/i);

Medienabfrage-Hacks

Dies wird unter Firefox 3.6 und später funktionieren.

@media screen and (-moz-images-in-menus:0) {}

Wenn Sie weitere Informationen benötigen, besuchen Sie bitte Browserhacks

13voto

Ionuț G. Stan Punkte 168218

Zuallererst ein Haftungsausschluss. Ich befürworte die Lösung, die ich im Folgenden vorstelle, nicht wirklich. Die einzige Browser-spezifische CSS schreibe ich ist für IE (insbesondere IE6), obwohl ich wünschte, es wäre nicht der Fall.

Und nun die Lösung. Sie wollten, dass sie elegant ist, also weiß ich nicht, wie elegant sie ist, aber sie wird sicher nur auf Gecko-Plattformen abzielen.

Der Trick funktioniert nur, wenn JavaScript aktiviert ist und Mozilla-Bindungen verwendet werden ( XBL ), die intern in Firefox und allen anderen Gecko-basierten Produkten häufig verwendet werden. Zum Vergleich: Das ist wie die CSS-Eigenschaft behavior im IE, nur viel leistungsfähiger.

An meiner Lösung sind drei Dateien beteiligt:

  1. ff.html: die zu gestaltende Datei
  2. ff.xml: die Datei, die die Gecko-Bindungen enthält
  3. ff.css: Firefox-spezifisches Styling

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;
}

Aktualisierung: Die obige Lösung ist nicht so gut. Es wäre besser, wenn anstelle des Anhängens eines neuen LINK-Elements Folgendes hinzugefügt würde que "firefox" Klasse auf dem BODY-Element. Und es ist möglich, nur durch Ersetzen der oben JS mit dem folgenden:

this.className += " firefox";

Die Lösung ist inspiriert von Dean Edwards' moz-Verhaltensweisen .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X