如何使用CSS消除元素的偏移量?


88

我在某些元素上遇到了定位问题,在对其进行检查后,IE8 Developer工具向我显示了这一点:

抵消来自哪里?

现在,我很确定我的问题是12偏移量,但是如何删除它?我找不到任何提及CSS偏移属性的内容。除了保证金,我们还需要抵消吗?

这是产生该代码的代码:

 <div id="wahoo" style="border: solid 1px black; height:100px;">

    <asp:TextBox ID="inputBox" runat="server" />

    <input id="btnDropDown" type="button" style="width:26px; height:26px; background-position: center center; border-left-color: buttonface; background-image: url(Images/WebResource.gif); border-bottom-color: buttonface; border-top-color: buttonface; background-repeat: no-repeat; border-right-color: buttonface;"  tabindex="99" />

    <div id="ListboxWrapper" style="display:none; position:absolute; onfocusout="this.style.display = 'none'"">
       <asp:ListBox ID="lstBoxCompany" runat="server" AutoPostBack="True" OnSelectedIndexChanged="lstBoxCompany_SelectedIndexChanged" style="z-index: 100;" Width="300px" />               
    </div>

</div>

具有偏移量的元素是 inputBox


您的元素定位了吗?检查lefttop属性。
jessegavin 2011年

6
这里有一些代码将非常有用。CSS中没有“偏移”规则,但是IE确实倾向于在随机位置添加随机像素。通常与浮动和定位有关
Alex

我假设“偏移”是“与其他元素有关的像素”,例如上一个元素的边距将其向下推。我现在没有时间尝试使用IE开发工具进行查找。
昆汀

我添加了带有内联CSS的代码,因此我们可以看到发生了什么
m.edmondson 2011年

是否有一个网页示例可供我们查看-例如,这样我们可以将firebug指向它并了解更宽的页面。例如,您的输入控件是从另一个CSS定义继承边距还是填充?
克里斯C

Answers:


43

该偏移量基本上是浏览器根据其位置css属性为该元素计算的x,y位置。因此,如果将a放在<br>它或任何其他元素的前面,它将改变偏移量。例如,您可以通过以下方式将其设置为0:

#inputBox{position:absolute;top:0px;left:0px;}

要么

#inputBox{position:relative;top:-12px;left:-2px;}

因此,尽管您始终可以通过使用top,left,right和bottom属性进行修复,但无论您遇到什么定位问题,都不一定是偏移问题。

您的浏览器不兼容吗?


2
也请参阅Stony关于垂直对齐的评论。固定对齐设置似乎比强制覆盖浏览器的元素位置更好。
杰里米·康迪

33

对我来说,是vertical-align: baselinevs vertical-align: top造成了最高的抵消。

尝试设定 vertical-align: top


2
这比使用绝对定位更好
2013年

2
您的回答很棒,当我有4个拒绝对齐的内联块div时,我必须设置垂直对齐的事实是多头。您结束了工作时间。谢谢。
Corey Ogburn

<button>嵌入<li>元素一起工作。
Amessihel

9

快速解决:

position: relative;
top: -12px;
left: -2px;

这样可以平衡这些偏移量,但是也许您应该查看一下整个布局,看看该框如何与其他框交互。

至于术语,leftrighttopbottom是CSS 偏移特性。它们用于将元素定位在特定位置(用于absolutefixed定位时),或相对于其默认位置移动元素(用于relative定位时)。另一方面,边距指定了框之间的间隙,它们有时会塌陷,因此不能可靠地用作偏移量。

但要注意,你的情况偏移可能不(仅仅)从CSS偏移计算。


只是将空白移到元素的另一侧。
昆汀

@David什么空格?为什么不移动目标框?
Alin Purcaru 2011年

空白是没有任何空间的空间。重点是目标框以外的其他东西不会移动。如果下方有1像素,而您又向上移动了12像素,则下方是13像素而不是1像素。
昆汀

2
@David我们对空格的定义可能不同,但是我明白了您要说的。我同意,差距将移到另一侧。我将解决方案标记为“快速修复”,因为它可能会或可能不会使用。在询问者提供更多详细信息之前,这是我唯一可以建议的建议。
Alin Purcaru 2011年

3

如果您的问题只是您处于怪癖模式,则将top和left属性设置为负值可能不是一个好的解决方法。如果页面缺少<!DOCTYPE>声明,导致该页面在IE8中以怪癖模式呈现,则会发生这种情况。在IE8开发人员工具中,确保未在“文档模式”下选择“ Quirks模式”。如果选择它,则可能需要添加适当的<!DOCTYPE>声明。


2

如果您使用的是IE开发人员工具,请确保您没有将它们留在较旧的设置中。直到看到它设置为Internet Explorer 7 Standard,我才对这个问题发疯。将其更改为Internet Explorer 9标准,所有内容都立即安装到位。


1
我们中有些人仍在使用IE7。
2013年

2

移动元素顶部:-12px或将其定位绝对不能解决问题,而只能掩盖它

我遇到了同样的问题-检查您是否在一个包装元素中混合使用:浮动元素与非浮动元素-我的非浮动元素导致了这种奇怪的偏移到浮动元素


就我而言,我试图将网站的外观与原型相匹配。我有一排行内div div,其宽度与原型相同,但是偏移量减少了4。我发现我在网站上混合了浮动div和非浮动div。使它们全部浮动除去了多余的偏移量。这特别令人困惑,因为我看不到CSS之间有太多其他差异。
克林特·布朗

1

为元素定义边距和填充正面临问题:

#element_id {margin: 0; padding: 0}  

看看是否存在问题。IE呈现了更多不必要的继承页面。您应该停止这样做。


1

这似乎很奇怪,但是您可以尝试vertical-align: topCSS输入中设置。至少在IE8中可以解决此问题。


1

在基于DotNetNuke(DNN)的基于.NET的网站上,我遇到了同样的问题,而为我解决的问题基本上是表单标签的简单边距重置。基于.NET的网站通常以某种形式包装,并且无需重置边距,您有时会看到奇怪的偏移量出现,主要是在包含一些脚本的情况下。

因此,如果您要在网站上解决此问题,请尝试在CSS文件中输入以下内容:

form {
  margin: 0;
}

我遇到了同样的问题,并且更改页边距对我也有用。
David Derman 2014年


0

我有同样的问题。偏移在UpdatePanel刷新后出现。解决方案是在UpdatePanel之前添加一个空标签,如下所示:

<div></div>

...


1
UpdatePanel是ASP.NET的东西,对不对?因为这似乎不是ASP.NET问题。
Joe Mabel 2012年

实际上,如果您查看问题中的代码片段,您会注意到这是一个ASP.NET问题。
mitkob 2012年

啊。抱歉,只是略读了一下,没有注意到asp:TextBox。FWIW,问题不是ASP.NET 问题。当出现此问题时,通常意味着存在问题的偏移量是由于某个其他元素较大而引起的,并且如果它导致布局不正确,则关键通常是要减少其中的其他元素的边距,填充或边框同一父div
Joe Mabel


0

在我的情况下,将偏移量添加到li中具有网格布局的自定义元素中,而ul是垂直flexbox。

在此处输入图片说明

相当简单的解决方案是使用以下命令将li定义为block元素:

li {
 display: block;
}

抵消了

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.