使用 CSS 从右侧偏移背景图像

Offset a background image from the right using CSS

提问人:nickf 提问时间:2/28/2011 更新时间:3/19/2019 访问量:351595

问:

有没有办法将背景图像从其元素的右侧定位到一定数量的像素?

例如,要从左侧放置一定数量的像素(例如,10 个),我会这样做:

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

评论

0赞 thirtydot 2/28/2011
你肯定不是这个意思吗?只是检查:)background-position: -10px 0;
1赞 Pekka 2/28/2011
我知道这有很多重复项,但我找不到其中任何一个。
1赞 nickf 2/28/2011
@thirtydot将其从左边缘向左移动 10 像素。
0赞 ccov77 11/24/2013
它不可用是愚蠢的......
0赞 ccov77 7/26/2014
@nickf,到2013年底,您确实意识到大多数设备都无法使用它,对吗?

答:

112赞 2 revs, 2 users 84%Pekka 웃 #1

!!过时的答案,因为 CSS3 带来了这个功能

有没有办法将背景图像从其元素的右侧定位到一定数量的像素?

不。

常用的解决方法包括

  • 而是在元素上设置 amargin-right
  • 将透明像素添加到图像本身并对其进行定位top right
  • 或者在已知元素的宽度后使用 jQuery 计算位置。

评论

6赞 Vlad Magdalin 1/8/2013
对扩展的 CSS3 'background-position' 的更全面支持指日可待:stackoverflow.com/questions/501375/...
4赞 Desi 2/28/2011 #2

好的,如果我明白你的要求,你会这样做;

您调用了 DIV 容器,该容器位于其中。使用它来帮助您入门;#main-container.my-element

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

顺便说一句,如果你在页面中引用一个较低级别的元素,最好使用类(我假设你是我上面的名字。

50赞 Tami 5/4/2011 #3

过时的答案:它现在在主流浏览器中实现,请参阅 这个问题的其他答案。

CSS3 修改了 的规范,以便它可以与不同的原点一起使用。不幸的是,我找不到任何证据表明它在任何主要浏览器中都实现了。background-position

http://www.w3.org/TR/css3-background/#the-background-position请参阅示例 12。

background-position: right 3em bottom 10px;

评论

0赞 nickf 5/5/2011
谢谢塔米!不幸的是,这在 Firefox 4 或 Chrome 11 中都不适合我。
0赞 Vian Esterhuizen 9/11/2012
这是在 Opera 中实现的。认为它好得令人难以置信,然后我在其他浏览器中进行了测试,我是对的。
1赞 Andreas Louv 9/19/2012
这在当前版本的 Chrome 中仍然不起作用。Version 21.0.1180.89
3赞 Vlad Magdalin 1/8/2013
Chrome Canary (v26) 现在支持此功能。一旦它渗透到发布渠道,并且 Safari 更新了他们的引擎,只有 IE6-8 将缺乏支持(IE9/10 已经支持新格式)。
1赞 Chaya Cooper 2/25/2013
刚刚测试过,它现在可以在 Firefox (v.18.0.2)、IE (v.9.0.8) 和 Chrome (v.25.0.1364.97) 中工作,但它还没有在 Safari (v.5.1.2) 中工作。很想知道是否有人知道什么时候可以推出;-)
94赞 Matt Brock 10/18/2011 #4

最简单的解决方案是使用百分比。这并不是您一直在寻找的答案,因为您要求像素精度,但是如果您只需要在右边缘和图像之间有一点填充,那么给某些东西一个 99% 的位置通常就足够了。

法典:

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

评论

35赞 moonwave99 11/14/2012
+1 “我们将在下周进行像素对齐” - 始终有效。
2赞 Evan Haas 8/15/2013
此解决方案似乎在浏览器中工作最一致。
3赞 Tom Gaulton 8/24/2012 #5

Firefox 14 现在支持允许背景位置不同来源的 CSS3 规范,但在 Chrome 21 中仍然不支持(显然 IE9 部分支持它们,但我自己没有测试过)

除了@MattyF提到的Chrome问题之外,这里还有一个更简洁的总结:http://code.google.com/p/chromium/issues/detail?id=95085

评论

0赞 Chaya Cooper 2/25/2013
我刚刚测试了它,它现在可以在 Firefox (v.18.0.2)、IE (v.9.0.8) 和 Chrome (v.25.0.1364.97) 中工作,但在 Safari (v.5.1.2) 中不起作用
15赞 Merosi 11/16/2012 #6

一个简单但肮脏的技巧是简单地将您想要的偏移量添加到您用作背景的图像中。它不可维护,但它可以完成工作。

2赞 André Figueira 3/19/2013 #7

使用右居中作为位置,然后添加透明边框来偏移它?

评论

1赞 nickf 3/20/2013
这还不错,但内容也会从右边移入。这可能是也可能不是交易破坏者。下面是它的外观示例: jsbin.com/ijewoq/1
0赞 André Figueira 3/21/2013
认为这只是一个平衡的情况,并进行了一些试错:)希望它能成功!
880赞 Steven 5/14/2013 #8

我发现这个 CSS3 功能很有帮助:

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

据我所知,IE8不支持此功能。在最新的Chrome / Firefox中,它可以正常工作。

有关支持的浏览器的详细信息,请参阅是否可以使用

使用的来源: http://tanalin.com/en/blog/2011/09/css3-background-position/

更新

现在,所有主流浏览器(包括移动浏览器)都支持此功能。

评论

24赞 MosheElisha 5/23/2013
这很棒,但不幸的是它不适用于 Safari 5.1.7(如果通过手机查看,这一点非常重要)
5赞 Szorstki 4/15/2014
它现在可以在移动设备上运行(在 Android、iOS 和 WindowsPhone 上检查)。Safari 5.1.7仍然不支持像这里这样给出的背景位置。
10赞 gregdev 3/13/2015
我正在使用它,但对于年长的浏览器有一个百分比回退,例如。背景位置:95%居中;背景位置:右 13px 中心;
1赞 Mark 5/14/2015
不知道有多少人仍在使用足够旧的浏览器来支持此功能。Safari 用户现在应该使用较新的版本,尽管许多较旧的 Android 设备仍然存在。caniuse.com/#feat=css-background-offsets很容易为这些使用百分比回退(尽管它并不完全相同)。
31赞 Soturi 8/14/2015
请注意,这仅在您为垂直和水平位置指定基数位置时才有效,例如 .例如,以下内容不会呈现:,但应写为rightlefttopbottombackground-position: right 10px 10pxbackground-position: right 10px top 10px
10赞 Novocaine 5/21/2013 #9

这将适用于大多数现代浏览器......除了IE(浏览器支持)。尽管该页面列出了支持的 >= IE9,但我的测试并不同意这一点。

您可以像这样使用 calc() css3 属性;

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

对我来说,这是实现右边距的最干净、最合乎逻辑的方法。我还使用 using for IE 的后备。border-right: 10px solid transparent;

评论

1赞 MosheElisha 5/23/2013
这很棒,但不幸的是它不适用于 Safari 5.1.7(如果通过手机查看,这一点非常重要)
0赞 Laki Politis 7/3/2015
然后,您应该使用在Safari中工作的后台位置,并且可以被可以使用它的浏览器覆盖。例如:background-position: 92% 8px; background-position: calc(100% - 12px) 8px;
0赞 Farzad Yousefzadeh 2/3/2016
不适用于所有浏览器,伙计。该语法在浏览器中具有更扩展的支持。right 10px center
0赞 Novocaine 2/3/2016
请阅读第一行,我声明这适用于“大多数现代浏览器”。我从来没有说过它对所有人都有效。
0赞 Ruskin 3/20/2017
根据 caniuse 的说法,使用计算器会使 IE9 崩溃......将 替换为_-
40赞 luksak 7/2/2013 #10

正如这里所建议的,这是一个非常跨浏览器的解决方案,可以完美地工作:

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

我之所以使用它,是因为浏览器还不支持指定答案中建议的偏移量的 CSS3 功能,该功能标记为解决问题。例如

评论

2赞 machineaddict 1/15/2015
当我需要该边框为某种颜色时怎么办?
1赞 Gavin 3/13/2015
这是一个很好的答案,因为您可以同时保持像素精度,同时保持其跨浏览器兼容性。谢谢!(如果您想要某种颜色的边框,请使用某种类型的包装器来包装输入并将边框添加到该元素。
2赞 Julix 7/28/2013 #11

如果你有一个固定宽度的元素并且知道背景图像的宽度,你可以简单地将背景位置设置为:元素的宽度 - 图像的宽度 - 你想要的右侧间隙。

例如:对于一个 100px 宽的元素和一个 300px 宽的图片,要在右侧获得 10px 的间隙,您可以将其设置为 100-300-10=-210px :

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

你得到最右边的 80 像素的图像在元素的左边,在右边有一个 20px 的间隙。

我知道这听起来很愚蠢,但有时它可以节省时间......我以垂直方式(底部的间隙)将其用于图像下方带有文本的导航链接。

但不确定它是否适用于您的情况。

25赞 stedman 8/6/2013 #12

最合适的答案是 background-position 的新四值语法,但在所有浏览器都支持它之前,最好的方法是按以下顺序组合早期的响应:

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+ */
2赞 JC_Dev 10/1/2013 #13

我的问题是,当窗口调整大小时,我需要背景图像与右边框保持相同的距离,即平板电脑/手机等 我的解决方法是使用这样的 percenage:

background-position: 98% 6px;

它粘在原位。

评论

0赞 nickf 10/2/2013
这在您确切知道窗口尺寸的情况下可能有效,但在网络上的大部分时间里,您无法确定这一点。看看接受的答案,它适用于所有情况(在支持的浏览器上)。
3赞 Nighto 2/28/2014 #14

如果您有比例元素,则可以使用:

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

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

在此示例中,将是带有图片的类,并且是大小为标准行的一半。.valid.half

肮脏,但作为一种魅力,而且相当容易管理。

评论

1赞 Gavin 8/5/2014
就我而言(使用固定宽度布局),这正是我需要的。谢谢。
2赞 David Jazzy Dawson 1/24/2016 #15

是的!好吧,要从浏览器的右侧而不是左侧定位背景图像,就好像 0px 一样 - 我使用:

background-position: 100% 0px;
3赞 Stijn_d 3/10/2016 #16

例如,如果您想使用它向按钮添加箭头/其他图标,那么您可以使用css伪元素吗?

如果它真的是整个按钮的背景图像,我倾向于将间距合并到图像中,然后使用

background-position: right 0;

但是,如果我必须向按钮添加一个设计的箭头,我倾向于使用这个html:

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

并倾向于使用 CSS 执行以下操作:

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

通过使用 :after 选择器,我使用 CSS 添加了一个元素来包含这个小图标。您可以通过在 a 元素中添加 span 或元素来执行相同的操作。但我认为这是一种向按钮添加图标的更简洁的方式,并且支持跨浏览器。<i>

你可以在这里查看小提琴: http://codepen.io/anon/pen/PNzYzZ

评论

0赞 Nat 7/16/2016
那应该是而不是,但这对我来说是一个有用的解决方案content: ''; content:0;
5赞 user1099258 2/16/2018 #17
background-position: calc(100% - 8px);