将CSS背景图片放置在距离右边x像素的位置?


321

我认为答案是否定的,但是您可以使用CSS定位背景图像,以使其距右侧固定像素数量吗?

如果我设置background-positionx和y的值,似乎这些值只能分别从左侧和顶部进行固定的像素调整。




你可以用CSS3做到这一点-见下文
Druvision


@JoostS这项编辑真的是强制性的吗?
Thomas Ayoub

Answers:


473
background-position: right 30px center;

它适用于大多数浏览器。有关完整列表,请参见:http : //caniuse.com/#feat=css-background-offsets

详细信息:http : //www.w3.org/TR/css3-background/#the-background-position


“我不知道它是否有效”……不是。有问题的属性具有值的标准顺序。
安德鲁·巴伯

14
根据CSS背景和边框3(已为候选建议书(准备实施的标准)),此文件有效:w3.org/TR/css3-background/#the-background-position
Ilya Streltsyn

19
应该将其选择为“正确答案”。根据MDN的说明,IE9 +和所有其他浏览器都支持它,这太好了!developer.mozilla.org/en-US/docs/Web/CSS/…–
fregante

5
不确定为什么不选择答案吗?这正是所要求的。
克里斯C 2014年

在chrome开发工具中尝试此操作,但似乎没有效果(尚未进行彻底的调查...)
1nfiniti 2015年

93

可以使用属性border作为从右起的长度

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

2
该解决方案在Safari中效果很好,但在Chrome,Firefox或IE中不起作用。
安迪·库克

4
在FF为我工作。和Chrome。IE 8和9。不过不是7。有用的技巧!
ndtreviv

3
如果您的选择框已经作为边框不理想,否则将需要另一个div包围该框
Miguel 2014年

背景:url('/ img.png')无重复权10px中心;这行得通,我检查了Firefox
Asad kamran 2014年

66

有一种方法,但并非所有浏览器都支持(请参见此处的覆盖范围

element {
  background-position : calc(100% - 10px) 0;
}

它可以在每种现代浏览器中使用,但IE9可能会崩溃。也没有覆盖= <IE8。


5
对于许多设计问题,这是一个非常强大的解决方案。谨慎!
deweydb

3
因此,即使在最新版的Chrome中,这似乎也不起作用。当我检查元素时,它实际上是说background-position-x: calc(90%);-即它只是从100%中减去了10%
Simon_Weaver

@ValentinE也对我有用:-)我当然看到了它转换为90%的结果-我直接从chrome剪切并粘贴了它。除非Chrome开发版本中存在一个奇怪的错误,否则我不知道为什么
Simon_Weaver 2014年

3
@ValentinE duh!我想到了。我在CSS中使用LESS,它具有自己的“ calc”功能,该功能优先。对于任何人有这个问题看:stackoverflow.com/questions/17904088/...
Simon_Weaver

我在这里看到caniuse.com/#feat=calc这实际上可能会使IE9崩溃-因此,如果您依靠它,您肯定会想记住要在IE9中进行测试
Simon_Weaver

33

据我所知,CSS规范当然不能完全满足您在CSS表达式之外的要求。在您不想使用表达式或Javascript的假设下,我看到了三种不可靠的解决方案:

  • 确保您的背景图片与容器的尺寸(至少在宽度上)相匹配并进行设置,background-repeat: repeat或者确保repeat-x仅宽度相等。然后,让某些东西出现x在右边的像素就和一样简单background-position: -5px 0px
  • 使用百分比表示会background-position表现出比此处描述更好的特殊行为。试一试。本质上,background-position: 90% 50%将使背景图像的右边缘与容器的右边缘对齐10%。
  • 创建一个包含图像的div。position: relative如果尚未设置,则明确设置包含元素的位置。将图像容器设置为position: absolute; right: 10px; top: 10px;,显然可以根据需要调整最后两个。将image div容器放入包含元素。

1
感谢您的提示!是的,我现在已将其设置为w /%值,但在我的情况下效果不佳。此bg图像应出现的位置在大小变化很大的元素上,因此,当然,右侧的偏移量也会变化很多,从而破坏了一致性。无论如何,我肯定会采取一些棘手的解决方法,但这对我来说很奇怪,这不是规范的一部分。似乎很简单,您可以从顶部或左侧开始,为什么不从底部或右侧开始呢?无论如何,也许在css4中,它将在我死后得到所有主流浏览器的适当支持;)
Doug 2010年

1
请记住,您还可以使用css:after选择器在另一个元素的右边添加一个带有背景图像的元素。从那里开始,您可以给它负的边距以将其放置在所需位置。如果您只想在右侧添加一个非重复的图像,这是一个非常干净的解决方案。
Nico 2013年

23

尝试这个:

#myelement {
  background-position: 100% 50%;
  margin-right: 5px;
}

请注意,尽管上面的代码会将整个元素(不只是背景图片)从右侧移5px。这可能适合您的情况。



8

使用右侧透明像素作为右侧边距的图像解决方法。

图像的解决方法是创建一个PNG或GIF图像(支持透明性的图像文件格式),该图像的透明部分在图像的右侧与您要给其右边空白的像素数完全相等。例如:5px,10px等)

这在固定宽度以及百分比宽度上都可以很好地一致地工作。对于在标题右侧具有正/负或向上/向下箭头图像的手风琴标头,实际上是一个很好的解决方案!

缺点:不幸的是,除非容器的背景部分和CSS背景图像的背景颜色具有相同的纯色(没有渐变/渐晕),大部分是白色/黑色等,否则不能使用JPG。


对我来说,这是唯一适用于所有浏览器的解决方案。
Matthieu Napoli 2015年

7

如果您在当今的现代浏览器中偶然发现了这个主题,则可以使用伪类:after在背景上进行任何实际操作。

.container:after{
    content:"";
    position:absolute;
    right:20px;
    background:url(http://lorempixel.com/400/200) no-repeat right bottom;
}

这个CSS会将背景放在“ .container”元素的右下角,在右边有20px的间距。

参见此小提琴,例如http://jsfiddle.net/h6K9z/226/


我喜欢您要去的地方,但:after实际上比类更像一个伪元素。仅出于澄清目的
vmex151

是的,但不适用于<IE 8
Miguel

1
@Miguel不再需要在那里工作;-)对于仍然使用比IE 8更旧版本的用户,让设计看起来尽可能丑陋!(..只要仍可访问该网站..)
James Cazzetta 2015年

5

最合适的答案是背景,地位的新的四值的语法,但直到所有的浏览器都支持你的最好的办法是按以下顺序较早响应的组合:

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+ */

-webkit-calc使我的Safari崩溃,零悔。OSX 10.8.5 / Safari 6.0.5
SquareCat 2013年

4

只需在图像中添加像素填充-在photohop中将10px或其他值添加到图像的画布大小,然后在CSS中将其对齐即可。


4

我正在尝试执行类似的任务,以始终在表格标题的右侧获得一个下拉箭头,并提出了一个在Chrome和Firefox中似乎可以使用的箭头,但是Safari告诉我这是无效的属性。

background: url(http://goo.gl/P93P5Q) center right 10px no-repeat;

在检查器中进行了一些弄乱之后,我想出了这个跨浏览器解决方案,该解决方案可以在IE8 +,Chrome,Firefox和Safari以及响应式设计中使用。

background: url(http://goo.gl/P93P5Q) no-repeat 95% center;

这是有关它的外观和工作方式的代码。Codepen写有SCSS - http://cdpn.io/xqGbk


我提醒您,根据容器的长度设置%也会使其对齐,如果您使用较大的容器,可能会有些混乱
Miguel

4

如果只想指定x轴,则可以执行以下操作:

background-position-x: right 100px;

这在Chrome 81.0.4044.138中不起作用。这是说无效的财产价值。
Xandor

我能够使用它:background-position: right -100px center;请注意,如果省略y-position它,则无法正常工作,因为它认为像素是针对什么的。
Xandor

2

我没有提到的另一个解决方案是使用伪元素,我相信该解决方案可以与任何符合CSS 2.1的浏览器一起使用(≥IE8,≥Safari 2,...),并且它也应该响应:

element::after
{
content:' ';
position:relative;
display:block;
width:100%;
height:100%;
bottom:0;
right:-5px; /* 10 px from the right of element inner-margin (padding) see example */
background:url() right center no-repeat;
}

示例:元素例如 正方形大小100像素(不考虑边框)的填充为10像素,背景图片应显示在右侧填充内。这意味着伪元素是一个80像素大小的正方形。我们要使用right:-10px;将其粘贴到元素的右边框;。如果我们想使背景图像离右边界5px,我们需要使用right:-5px将伪元素与元素的右边界5px粘在一起。...在这里进行自我测试:http//jsfiddle.net/yHucT/


1

如果容器的高度固定: Tweek将百分比(背景位置)放到合适的高度

如果容器具有动态高度: 如果要在背景和容器之间设置填充(例如,在定制样式输入时进行选择),则将填充添加到图像中,并将背景位置设置为右侧或底部。

我在尝试获取选择框的背景以使其距我的选择右侧5 px时遇到了这个问题。就我而言,我的背景是向下的箭头,它将替换基本的下拉图标。在我的情况下,背景的填充将始终保持相同(从右侧起5-10像素),因此可以很容易地进行修改以将实际的背景图像带到右侧(将其尺寸扩大5-10像素)。

希望这可以帮助!


1

您可以在编辑器中将背景图像放置在从右侧开始为x像素的位置。

background: url(images_url) no-repeat right top;

背景图像将位于右上角,但看起来将是右x像素。


把它倒过来..它的水平然后垂直

1

从我的角度来看,从左侧调整百分比有些微弱。当我需要这样的东西时,我倾向于将容器样式添加到wrapper元素,然后使用background-position: right bottom

<style>
    .wrapper {
        background-color: #333;
        border: solid 3px #222;
        padding: 20px;
    }
    .bg-img {
        background-image: url(path/to/img.png);
        background-position: right bottom;
        background-repeat: no-repeat;
    }
    .content-breakout {
        margin: -20px
    }
</style>

<div class="wrapper">
    <div class="bg-img">
        <div class="content-breakout"></div>
    </div>
</div>

.content-breakout班是可选的,可以让你的内容吃进填充如果需要的话(阴性切缘值应在包装填充匹配相应的值)。它有点冗长,但是可以可靠地工作,而不必担心图像相对于其宽度和高度的相对位置。


1

自从问了这个问题以来,它就很久了,但是我遇到了这个问题,我这样做是:

background-position:95% 50%;

只要您不需要右边的确切像素,但布局更流畅,这一点就可以很好地为我工作。
Jeff S.

0

负值的解决方案。向右调整填充以移动图像。

<div style='overflow:hidden;'>

    <div style='width:100% background:url(images.jpg) top right; padding-right:50px;'>

    </div>

</div>

0

这可以在Chrome 27中使用,我不知道它是否有效或其他浏览器如何处理。我对此感到惊讶。

background: url(../img/icon_file_upload.png) top+3px right+10px no-repeat;

1
这是无效的,Chrome只是对您很好。
RozzA

0

适用于所有实际的浏览器(和IE9 +):

background-position: right 10px top 10px;

我将其用于RTL WordPress主题。参见示例:临时网站真实网站即将上线。查看大DIV右上角的图标。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.