background-position-y funktioniert in Firefox nicht (via CSS)?

84

In meinem Code background-position-yfunktioniert das nicht. In Chrome ist es in Ordnung, funktioniert aber nicht in Firefox.

Hat jemand eine Lösung?

Marlos Carmo
quelle
Gute Neuigkeiten alle zusammen! Sieht aus wie background-position-xund -ywird in Firefox 49 unterstützt: developer.mozilla.org/en-US/docs/Web/CSS/…
Sphinxxx

Antworten:

120

Wenn Ihre Position-x 0 ist, gibt es keine andere Lösung als das Schreiben:

background-position: 0 100px;

background-position-x ist eine nicht standardmäßige Implementierung, die vom IE stammt. Chrome hat es kopiert, aber leider nicht Firefox ...

Diese Lösung ist jedoch möglicherweise nicht perfekt, wenn Sie separate Sprites auf einem großen Hintergrund haben, wobei Zeilen und Spalten unterschiedliche Bedeutungen haben ... (z. B. unterschiedliche Logos in jeder Zeile, rechts ausgewählt / schwebend, links einfach) In diesem Fall Ich würde vorschlagen, das Gesamtbild in separate Bilder zu trennen oder die verschiedenen Kombinationen in das CSS zu schreiben ... Abhängig von der Anzahl der Sprites könnte das eine oder andere die beste Wahl sein.

Orabîg
quelle
Danke, toller Fang. Ich habe gerade meine Verwendungen von -x und -y entfernt, damit ich standardkonform bin. :)
Kenny Wyland
Wie immer mit FF ... komisch
Mladen Janjetovic
19

Benutze das

background: url("path-to-url.png") 89px 78px no-repeat;

An Stelle von

background-image: url("path");
background-position-x: 89px;
background-position-y: 78px;
background-repeat: no-repeat;
farshad saeidi
quelle
3
lustig, dass Firefox das Markup "Stattdessen" nicht unterstützt, aber ja, es funktioniert .. ty;)
Adrian
16

Firefox 49 wird - mit Unterstützung für background-position-[xy]- im September 2016 veröffentlicht. Bei älteren Versionen bis 31 können Sie CSS-Variablen verwenden , um den Hintergrund auf einer einzelnen Achse zu positionieren, ähnlich wie bei background-position-xoder background-position-y. CSS-Variablen haben im Dezember 2015 den Status der Kandidatenempfehlung erreicht .

Das folgende Beispiel ist ein vollständig browserübergreifendes Beispiel für das Ändern der Hintergrundpositionsachsen für Sprite-Bilder beim Hover:

:root {
    --bgX: 0px;
    --bgY: 0px;
}

a {
    background-position: 0px 0px;
    background-position: var(--bgX) var(--bgY);
}

a:hover, a:focus { background-position-x: -54px; --bgX: -54px; }
a:active   { background-position-x: -108px; --bgX: -108px; }
a.facebook { background-position-y: -20px; --bgY: -20px;  }
a.gplus    { background-position-y: -40px; --bgY: -40px;  }
Andy E.
quelle
Es ist fast ein Jahr in der Schwebe gewesen, und Firefox ist immer noch die einzige Implementierung. Kein gutes Zeichen.
BoltClock
1
@BoltClock: Es ist unter Berücksichtigung von Microsoft, mit einem fairen paar Stimmen hinter sich, und die Entwicklung nur (wieder) gestartet für Chrome. Für diesen speziellen Anwendungsfall können heute jedoch CSS-Variablen verwendet werden, da der einzige Browser, der sie implementiert, der einzige ist, der sie zur Simulation der Hintergrundposition x / y benötigt.
Andy E
Cool! Besser spät als nie, denke ich :)
BoltClock
2
Gerade bemerkt - CSS-Variablen sind auf dem Weg zu CR . Auch cool.
BoltClock
Hallo 2016! noch keine Implementierung ...: \
ghettosoak
15

background-position-y :10px;ist funktioniert nicht in Firefox Web - Browser.

Sie sollten diese Art von Syntax befolgen:

background-position: 10px 15px;

10px ist an "Position-x" und 15px an "Position-y" gebunden.

100% funktionierende Lösung

Folgen Sie dieser URL für weitere Beispiele

Eashan
quelle
Dies funktioniert in ff v. 38. Sollte als die richtige Lösung markiert werden. Es erreicht genau, was die Frage danach ist
mcabe
3

Warum benutzt du die Hintergrundposition nicht direkt?

Verwenden:

background-position : 40% 56%;

Anstatt:

background-position-x : 40%;
background-position-y : 56%
Sandeep Gantait
quelle
3
background: url("path") 89px 78px no-repeat;

Funktioniert nicht, wenn Sie einen Hintergrund zusammen mit dem Bild wünschen. Verwenden Sie also:

background: orange url("path-to-image.png") 89px 78px no-repeat;
Piotr Śródka
quelle
1

Das hat bei mir funktioniert:

a {
    background-image: url(/image.jpg);
    width: 228px;
    height: 78px;
    display: inline-block;
}

a:hover {
    background-position: 0 -78px;
    background-repeat: no-repeat;
}
Stefan
quelle
0

Stellen Sie sicher, dass Sie die Messung Ihres Offsets explizit angeben. Ich bin heute genau auf dieses Problem gestoßen, und es lag daran, wie Browser die Werte interpretieren, die Sie in Ihrem CSS angeben.

Dies funktioniert beispielsweise in Chrome einwandfrei:

background: url("my-image.png") 100 100 no-repeat;

Für Firefox und IE müssen Sie jedoch Folgendes schreiben:

background: url("my-image.png") 100px 100px no-repeat;

Hoffe das hilft.

Mike Zavarello
quelle
0

Diese Lösung ist jedoch möglicherweise nicht perfekt, wenn Sie separate Sprites auf einem großen Hintergrund haben, wobei Zeilen und Spalten unterschiedliche Bedeutungen haben ... (z. B. unterschiedliche Logos in jeder Zeile, rechts ausgewählt / schwebend, links einfach) In diesem Fall Ich würde vorschlagen, das Gesamtbild in separate Bilder zu trennen oder die verschiedenen Kombinationen in das CSS zu schreiben ... Abhängig von der Anzahl der Sprites könnte das eine oder andere die beste Wahl sein.

Meins hat das genaue Problem, wie von Orabîg angegeben, das eine Tabelle wie Sprite hat, die Spalten und Zeilen enthält.

Unten ist, was ich als Workaround mit js verwendet habe

firefoxFixBackgroundposition:function(){
  $('.circle').on({
    mouseenter: function(){
       $(this).css('background-position',$(this).css('background-position').split(' ')[0]+' -10px');   
    },
    mouseleave: function(){
       $(this).css('background-position',$(this).css('background-position').split(' ')[0]+' 0');   
    }
  });      
}
ace.spades
quelle