Versetzen Sie ein Hintergrundbild von rechts mit CSS


443

Gibt es eine Möglichkeit, ein Hintergrundbild eine bestimmte Anzahl von Pixeln rechts von seinem Element zu positionieren?

Um beispielsweise eine bestimmte Anzahl von Pixeln (z. B. 10) von links zu positionieren, würde ich dies folgendermaßen tun:

#myElement {
    background-position: 10px 0;
}

Du meinst doch nicht background-position: -10px 0;?
Ich

1
Ich weiß, dass dies eine Reihe von Duplikaten enthält, aber ich kann keine finden.
Pekka

1
@thirtydot, der es 10 Pixel vom linken Rand nach links verschiebt.
Nickf

Es ist dumm, dass es nicht verfügbar ist ...
Juan

@nickf Sie wissen, dass es bis Ende 2013 auf den meisten Geräten nicht verfügbar war, oder?
Juan

Antworten:


786

Ich fand diese CSS3-Funktion hilfreich:

/* to position the element 10px from the right */
background-position: right 10px top;

Soweit ich weiß, wird dies in IE8 nicht unterstützt. In den neuesten Chrome / Firefox funktioniert es gut.

Weitere Informationen zu den unterstützten Browsern finden Sie unter Kann ich verwenden ?

Verwendete Quelle: http://tanalin.com/de/blog/2011/09/css3-background-position/

Update :

Diese Funktion wird jetzt in allen gängigen Browsern unterstützt, einschließlich mobiler Browser.


23
Das ist großartig, aber leider funktioniert es nicht auf Safari 5.1.7 (was extrem wichtig ist, wenn es von Mobiltelefonen angezeigt wird)
MosheElisha

5
Es funktioniert jetzt auf Mobilgeräten (aktiviert auf Android, iOS und WindowsPhone). Trotzdem unterstützt Safari 5.1.7 die hier angegebene Hintergrundposition nicht.
Szorstki

8
Ich benutze dies aber mit einem prozentualen Fallback für ältere Brower, z. Hintergrundposition: 95% Mitte; Hintergrundposition: rechts 13px Mitte;
Gregdev

1
Ich bin mir nicht sicher, wie viele Benutzer noch Browser verwenden, die alt genug sind, um dies nicht zu unterstützen. Safari-Benutzer sollten jetzt eine neuere Version verwenden, obwohl viele ältere Android-Geräte noch verfügbar sind. caniuse.com/#feat=css-background-offsets Einfach genug, um einen prozentualen Fallback für diese zu verwenden (obwohl es nicht genau dasselbe ist).
Markieren Sie

29
Bitte beachten Sie, dass dies nur funktioniert, wenn Sie eine Kardinalposition sowohl für die vertikale als auch für die horizontale Position angeben, z right left top bottom. Zum Beispiel wird das Folgende nicht background-position: right 10px 10pxbackground-position: right 10px top 10px
gerendert

110

!! Veraltete Antwort, da CSS3 diese Funktion brachte

Gibt es eine Möglichkeit, ein Hintergrundbild eine bestimmte Anzahl von Pixeln rechts von seinem Element zu positionieren?

Nee.

Beliebte Problemumgehungen sind:

  • Setzen Sie margin-rightstattdessen ein auf das Element
  • Hinzufügen transparenter Pixel zum Bild selbst und Positionieren top right
  • oder Berechnen der Position mit jQuery, nachdem die Breite des Elements bekannt ist.

6
Eine umfassendere Unterstützung für die erweiterte CSS3-Hintergrundposition steht vor der Tür
Vlad Magdalin

92

Die einfachste Lösung ist die Verwendung von Prozentsätzen. Dies ist nicht genau die Antwort, nach der Sie gesucht haben, da Sie nach Pixelgenauigkeit gefragt haben. Wenn Sie jedoch nur eine kleine Auffüllung zwischen dem rechten Rand und dem Bild benötigen, funktioniert eine Position von 99% normalerweise gut genug.

Code:

/* aligns image to the vertical center and horizontal right of its container with a small amount of padding between the right edge */
div.middleleft {
  background: url("/images/source.jpg") 99% center no-repeat;
}

30
+1 "Wir werden nächste Woche die Pixelausrichtung durchlaufen" - funktioniert immer.
Moonwave99

2
Diese Lösung scheint in allen Browsern am konsistentesten zu funktionieren.
Evan Haas

49

Veraltete Antwort: Sie ist jetzt in den wichtigsten Browsern implementiert. Weitere Antworten auf diese Frage finden Sie unter.

CSS3 hat die Spezifikation von background-positionso geändert , dass es mit verschiedenen Ursprungspunkten funktioniert. Leider kann ich noch keine Beweise dafür finden, dass es in allen gängigen Browsern implementiert ist.

http://www.w3.org/TR/css3-background/#the-background-position Siehe Beispiel 12.

background-position: right 3em bottom 10px;

Danke Tami! Leider funktionierte dies weder in Firefox 4 noch in Chrome 11 für mich.
Nickf

Dies ist in Opera implementiert. Ich dachte, es wäre zu schön, um wahr zu sein, und dann habe ich in anderen Browsern getestet und hatte Recht.
Vian Esterhuizen

1
Dies funktioniert in der aktuellen Version von Chrome immer noch nicht. Version 21.0.1180.89
andlrc

3
Chrome Canary (v26) unterstützt dies jetzt. Sobald dies auf den Release-Kanal herunterrutscht und Safari die Engine aktualisiert, wird nur IE6-8 nicht mehr unterstützt (IE9 / 10 unterstützt bereits das neue Format).
Vlad Magdalin

1
Ich habe dies gerade getestet und es funktioniert jetzt in Firefox (v.18.0.2), IE (v.9.0.8) und Chrome (v.25.0.1364.97), aber es funktioniert noch nicht in Safari (v.5.1.2). . Würde gerne wissen, ob jemand weiß, wann das eingeführt werden kann ;-)
Chaya Cooper

40

Wie hier vorgeschlagen , ist dies eine ziemlich browserübergreifende Lösung, die perfekt funktioniert:

background: url('/img.png') no-repeat right center;
border-right: 10px solid transparent;

Ich habe es verwendet, da die CSS3-Funktion zum Festlegen von Offsets, die in der als Lösung der Frage gekennzeichneten Antwort vorgeschlagen wurden, in Browsern noch nicht so gut unterstützt wird. Z.B


1
Was ist, wenn dieser Rand eine bestimmte Farbe haben muss?
Machineaddict

1
Dies ist eine großartige Antwort, da Sie Pixelgenauigkeit erzielen und gleichzeitig browserübergreifend kompatibel bleiben können. Vielen Dank! (Und wenn Sie einen Rand haben möchten, der eine bestimmte Farbe hat, verwenden Sie einen Wrapper eines Typs, um die Eingabe zu umbrechen und den Rand zu diesem Element hinzuzufügen.)
Gavin

23

Die am besten geeignete Antwort ist die neue vierwertige Syntax für die Hintergrundposition. Bis alle Browser dies unterstützen, ist Ihr bester Ansatz eine Kombination früherer Antworten in der folgenden Reihenfolge:

background: url(image.png) no-repeat 97% center; /* default, Android, Sf < 6 */
background-position: -webkit-calc(100% - 10px) center; /* Sf 6 */
background-position: right 10px center; /* Cr 25+, FF 13+, IE 9+, Op 10.5+ */

15

Ein einfacher, aber schmutziger Trick besteht darin, dem Bild, das Sie als Hintergrund verwenden, einfach den gewünschten Versatz hinzuzufügen. Es ist nicht wartbar, aber es erledigt die Arbeit.


8

Dies funktioniert auf den meisten modernen Browsern ... abgesehen vom IE (Browser-Unterstützung) . Obwohl auf dieser Seite> = IE9 als unterstützt aufgeführt ist, stimmten meine Tests dem nicht zu.

Sie können die Eigenschaft calc () css3 wie folgt verwenden.

.class_name {
    background-position: calc(100% - 10px) 50%;
}

Für mich ist dies der sauberste und logischste Weg, um einen rechten Spielraum zu erreichen. Ich benutze auch einen Fallback der Verwendung border-right: 10px solid transparent;für IE.


1
Das ist großartig, aber leider funktioniert es nicht auf Safari 5.1.7 (was extrem wichtig ist, wenn es von Mobiltelefonen angezeigt wird)
MosheElisha

Dann sollten Sie eine Hintergrundposition verwenden, die in Safari funktioniert, und eine, die von Browsern überschrieben werden kann, die sie verwenden können. Zum Beispiel: background-position: 92% 8px; background-position: calc(100% - 12px) 8px;
Laki Politis

Funktioniert nicht bei allen Browsern. Die right 10px centerSyntax unterstützt Browser besser.
Farzad YZ

Bitte lesen Sie die erste Zeile, in der ich feststelle, dass dies bei "modernsten Browsern" funktioniert. Ich habe nie gesagt, dass es bei allen funktioniert.
Novocaine

Laut caniuse würde die Verwendung eines Calc IE9 zum Absturz bringen ... sobald Sie das _durch ein-
Ruskin

4

Ok, wenn ich verstehe, was Sie fragen, würden Sie dies tun;

Sie haben Ihren DIV-Container aufgerufen #main-containerund .my-elementdas ist darin. Verwenden Sie diese Option, um loszulegen.

#main-container { 
  position:relative;
}
/*To make the element absolute - floats above all else within the parent container do this.*/
.my-element {
  position:absolute;
  top:0;
  right:10px;
}

/*To make the element apart of elements, something tangible that affects the position of other elements on the same level within the parent then do this;*/
.my-element {
  float:right;
  margin-right:10px;
}

Übrigens ist es besser, Klassen zu verwenden, wenn Sie auf ein untergeordnetes Element innerhalb einer Seite verweisen (ich gehe davon aus, dass Sie daher meine Namensänderung oben sind.


3

Die CSS3-Spezifikation, die unterschiedliche Ursprünge für die Hintergrundposition zulässt, wird jetzt in Firefox 14 unterstützt, aber immer noch nicht in Chrome 21 (anscheinend unterstützt IE9 sie teilweise, aber ich habe sie selbst nicht getestet).

Zusätzlich zu dem Chrome-Problem, auf das @MattyF verwiesen hat, gibt es hier eine prägnantere Zusammenfassung: http://code.google.com/p/chromium/issues/detail?id=95085


Ich habe dies gerade getestet und es funktioniert jetzt in Firefox (v.18.0.2), IE (v.9.0.8) und Chrome (v.25.0.1364.97), aber nicht in Safari (v.5.1.2)
Chaya Cooper

3

Wenn Sie proportionierte Elemente haben, können Sie Folgendes verwenden:

.valid {
    background-position: 98% center;
}

.half .valid {
    background-position: 96% center;
}

In diesem Beispiel .validwäre dies die Klasse mit dem Bild und .halfeine Zeile mit der halben Größe der Standardgröße.

Schmutzig, wirkt aber wie ein Zauber und ist einigermaßen handhabbar.


1
In meinem Fall (mit einem Layout mit fester Breite) macht dies genau das, was ich brauche. Vielen Dank.
Gavin

3

Wenn Sie dies zum Beispiel zum Hinzufügen von Pfeilen / anderen Symbolen zu einer Schaltfläche verwenden möchten, können Sie CSS-Pseudoelemente verwenden?

Wenn es sich wirklich um ein Hintergrundbild für die gesamte Schaltfläche handelt, neige ich dazu, den Abstand in das Bild einzubeziehen und nur zu verwenden

background-position: right 0;

Aber wenn ich zum Beispiel einen entworfenen Pfeil zu einer Schaltfläche hinzufügen muss, neige ich dazu, dieses HTML zu haben:

<a href="[url]" class="read-more">Read more</a>

Und neigen dazu, mit CSS Folgendes zu tun:

.read-more{
    position: relative;
    padding: 6px 15px 6px 35px;//to create space on the right
    font-size: 13px;
    font-family: Arial;
}

.read-more:after{
    content: '';
    display: block;
    width: 10px;
    height: 15px;
    background-image: url('../images/btn-white-arrow-right.png');
    position: absolute;
    right: 12px;
    top: 10px;
}

Mit dem Selektor: after füge ich ein Element mit CSS hinzu, um dieses kleine Symbol zu enthalten. Sie können dasselbe tun, indem Sie einfach einen Bereich oder ein <i>Element in das a-Element einfügen. Ich denke jedoch, dass dies eine sauberere Methode zum Hinzufügen von Symbolen zu Schaltflächen ist und dass es browserübergreifend unterstützt wird.

Sie können die Geige hier überprüfen: http://codepen.io/anon/pen/PNzYzZ


das sollte content: ''; eher sein als, content:0;aber das war eine nützliche Lösung für mich
Nat


2

Verwenden Sie Mitte rechts als Position und fügen Sie dann einen transparenten Rand hinzu, um ihn zu versetzen.


1
Das ist nicht schlecht, aber dann würde der Inhalt auch von rechts verschoben. Dies kann ein Dealbreaker sein oder auch nicht. Hier ist ein Beispiel, wie es aussieht: jsbin.com/ijewoq/1
nickf

Ich denke, es ist nur ein Fall des Balancierens mit ein wenig Versuch und Irrtum :) Ich hoffe, es klappt!
André Figueira

2

Wenn Sie ein Element mit fester Breite haben und die Breite Ihres Hintergrundbilds kennen, können Sie die Hintergrundposition einfach auf Folgendes einstellen: die Breite des Elements - die Breite des Bildes - die gewünschte Lücke auf der rechten Seite.

Beispiel: Mit einem 100 Pixel breiten Element und einem 300 Pixel breiten Bild setzen Sie 100-300-10 = -210 Pixel, um rechts eine Lücke von 10 Pixel zu erhalten:

#myElement {
  background:url(my_image.jpg) no-repeat -210px top;
  width:100px;
}

Und Sie erhalten die 80 Pixel Ihres Bildes ganz rechts links von Ihrem Element und eine Lücke von 20 Pixel rechts.

Ich weiß, dass es dumm klingen kann, aber manchmal spart es Zeit ... Ich verwende so viel vertikal (Lücke unten) für Navigationslinks mit Text unter dem Bild.

Ich bin mir jedoch nicht sicher, ob dies für Ihren Fall gilt.


2

Mein Problem war, dass ich das Hintergrundbild brauchte, um den gleichen Abstand vom rechten Rand zu halten, wenn die Fenstergröße geändert wird, z. B. für Tablet / Handy usw. Mein Fix besteht darin, ein Percenatge wie folgt zu verwenden:

background-position: 98% 6px;

und es bleibt an Ort und Stelle.


Das mag in Situationen funktionieren, in denen Sie die Abmessungen des Fensters genau kennen, aber im Web sind Sie sich die meiste Zeit nicht sicher. Sehen Sie sich die akzeptierte Antwort an, die in allen Situationen funktioniert (in unterstützten Browsern).
Nickf

2

Ja! gut, um ein Hintergrundbild so zu positionieren, als ob 0px von der rechten Seite des Browsers statt von links - ich benutze:

background-position: 100% 0px;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.