Positioning Offset Background Images

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Wenn Sie ein background-image in CSS 20 Pixel vom linken und 10 Pixel vom oberen Rand positionieren müssen, ist das einfach. Sie können background-position: 20px 10px; verwenden. Aber was, wenn Sie es 20 Pixel vom rechten und 10 Pixel vom unteren Rand positionieren möchten?

Nehmen wir auch an, wir kennen die genaue Breite und Höhe des Elements nicht, was aufgrund von flexiblen Layouts und dynamischen Inhalten wahrscheinlich ist. Wenn wir das täten, könnten wir einfach ein wenig auf einem Notizblock rechnen und die normale background-position-Syntax verwenden.

Eine durchaus vernünftige Anfrage, wie sie sagen. Hier sind einige Möglichkeiten, wie Sie das tun können.

Die Syntax mit vier Werten für background-position

Dies ist der einfachste Weg. Sie kombinieren Längenwerte mit einem der Schlüsselwörter top/right/bottom/left (nicht center). Also für unser Beispiel

background-position: right 20px bottom 10px;

Damit können Sie ein background-image von einer der vier Ecken eines Elements absetzen.

Browserunterstützung, laut MDN: Chrome 25+, Firefox 13+, IE 9+, Opera 10.5+, Safari/iOS 7+. Die größte Gefahr ist Android.

Ich habe Android 4.0, 4.1 und 4.2 getestet, und es hat nicht funktioniert. Aber Android 4.4 hat es unterstützt.

Verwendung von calc()

Sie können weiterhin die Zwei-Wert-Syntax von background-position verwenden, aber mit Längen, die über calc() erstellt wurden. Zum Beispiel:

background-position: calc(100% - 20px) calc(100% - 10px); 

Die Browserunterstützung ist etwas besser, mit Chrome ab Version 19+, Firefox ab Version 4+ und Safari ab Version 6+ (alle mit Präfix).

Der Android-Standardbrowser hatte die gleiche Unterstützung wie die oben genannte Vier-Wert-Syntax.

Verwendung von JavaScript

Wenn Sie eine *perfekte* Browserunterstützung benötigen, stelle ich mir vor, dass der einzige Weg JavaScript ist. Messen Sie die Höhe/Breite des Elements, kennen Sie die Größe des background-image, und passen Sie dann das CSS nach Bedarf an.

Verwendung von jQuery

var el = $(".example"),
    bgWidth = 20,
    bgHeight = 20;

el.css({
  "background-position": (el.width()-bgWidth+10) + "px " + (el.height()-bgHeight-10) +  "px"
});

Demo

Hier sind alle drei Wege