定位偏移背景图片

Avatar of Chris Coyier
Chris Coyier 发布

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200美元免费额度!

如果您需要在 CSS 中将 background-image 定位到左侧 20px 和顶部 10px 的位置,这很容易。您可以使用 background-position: 20px 10px;。但是,如果您想将其定位到右侧 20px 和底部 10px 的位置呢?

我们也假设我们不知道元素的确切宽度和高度,这很可能,因为流式布局和动态内容。如果我们知道,我们可以简单地进行一些草稿计算并使用正常的 background-position 语法。

正如人们所说,这是一个完全合理的请求。以下是一些解决方法。

background-position 的四值语法

这是最简单的方法。您可以将 长度值 与任何 top/right/bottom/left 关键字(而非 center)结合使用。因此,对于我们的示例

background-position: right 20px bottom 10px;

使用此方法,您可以从元素的任意四个角偏移 background-image

浏览器支持,根据 MDN:Chrome 25+、Firefox 13+、IE 9+、Opera 10.5+、Safari/iOS 7+。最大的风险是 Android。

我测试了 Android 4.0、4.1 和 4.2,但它不起作用。但 Android 4.4 支持它。

使用 calc()

您可以继续使用 background-position 的双值语法,但使用通过 calc() 创建的长度。例如

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

浏览器支持略好一些,Chrome 回到 19+,Firefox 回到 4+,Safari 回到 6+(全部带前缀)。

Android 原生浏览器与上述四值语法具有相同的支持。

使用 JavaScript

如果您需要完美的浏览器支持,我想唯一的方法是 JavaScript。测量元素的高度/宽度,了解 background-image 的大小,然后根据需要调整 CSS。

使用 jQuery

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

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

演示

以下列出了三种方法