为啥 CSS3 右对齐背景图片出现在错误的位置?

Posted

技术标签:

【中文标题】为啥 CSS3 右对齐背景图片出现在错误的位置?【英文标题】:Why does CSS3 right aligned background image appear in the wrong place?为什么 CSS3 右对齐背景图片出现在错误的位置? 【发布时间】:2015-08-10 20:44:34 【问题描述】:

我正在使用 CSS3 background-position 将背景图像定位在距容器右边缘 3% 的位置。但是,与我有一个 97% 宽且背景图像右对齐的等效容器相比,它出现在不同的位置。您可以在http://jsfiddle.net/deshg/9qveqdcu/2/ 看到我的意思,黑色行中的徽标比绿色行中的徽标更靠右,但它们肯定应该处于相同的水平位置吗?

如果有人能解释为什么会发生这种情况,我们将不胜感激。

供参考,代码如下。

谢谢大家!

#container 
width: 100%;
background-color: #ffcc00;


#d1 
background-color: #cccc00;
background-image: url('http://jsfiddle.net/img/logo.png');
background-position: right 3% center;
background-repeat: no-repeat;
width: 100%;


#d2 
background-color: #000000;
color: #ffffff;
background-image: url('http://jsfiddle.net/img/logo.png');
background-position: right center;
background-repeat: no-repeat;
width: 97%;
margin-right: 3%;


<div id="container">
    <div id="d1">
        abvc
    </div>
    <div id="d2">
        def
    </div>
</div>

【问题讨论】:

好问题,好像有 1% 的折扣 【参考方案1】:

背景图片本身偏移了其自身宽度的 3%

From the docs:

百分比是指减去背景定位区域的大小 背景图像的大小; size 是指水平方向的宽度 偏移量和垂直偏移量的高度

这是使用 25% 25% (from CSS Tricks) 时的示例:

【讨论】:

我在#d1 上找到background-position: right 4% center; 对齐它们 @GeorgeLee 或设置#d1 width: 99.5%; ;) 啊,好的,谢谢@Alex,这很有意义(尽管这样做似乎很奇怪!)使用 4% 或 99.5% 的问题是它具有响应性,因此这不适用于所有尺寸。您知道有什么方法可以准确地将背景图像从右边缘按百分比对齐,因为这似乎是一个奇怪的遗漏?谢谢! @deshg 很抱歉,似乎没有 CSS 方法。我看到了一个 background-origin 属性,我希望它可以工作,但这是针对稍微不同的情况。 @Alex 是的,这是我必须使用的方法,我只是想避免它以保持标记尽可能干净,但看起来这是唯一的方法【参考方案2】:

背景位置与您想的不一样。

在那种情况下,如果您有一个并将其定位在left: 50%;,这与图像的左边缘将位于中间点不同。如果要居中,则需要将其拉回左侧(负平移或负边距)

为了更好地理解,请参考Link和Link

对于你想要达到的目标,你必须设置

background-position: 96% 0px, center center;

Fiddle

【讨论】:

谢谢@ketan,问题在于它的响应性,所以如果你对这样的值进行硬编码,那么它在大多数尺寸下都会变得不合时宜。似乎很奇怪,没有办法使用 CSS3 中的百分比正确对齐它:( @deshg 是的,你说得对,它类似于硬编码。 :(

以上是关于为啥 CSS3 右对齐背景图片出现在错误的位置?的主要内容,如果未能解决你的问题,请参考以下文章

为啥段落文本在默认的 CSS3 多列网站布局中不能正确对齐?

为啥我的文本在 wxPython 中没有正确对齐?

Markdown为啥不支持居中,右对齐等格式设置

Markdown为啥不支持居中,右对齐等格式设置

为啥设置为左对齐的单元格内容有时会右对齐(Aspose Cells)?

UILabel上文字右对齐