在firefox和chrome中绝对定位的问题

时间:2010-08-26 15:25:48

标签: html css firefox google-chrome css-position

我不明白为什么FF和Chrome以不同的方式呈现我的页面。这是

中的一个屏幕

firefox:firefox example http://grab.by/65Bn

这里是chrome中的一个

chrome:chrome example http://grab.by/65BB

fieldset具有相对位置,图像具有绝对位置。

这是基本结构:

<fieldset class="passenger-info">
  <legend>Passenger 1</legend>
  <div class="remove-me">
    <img src="/images/delete-icon-sm.png" />
  </div>
</fieldset>

基本上图像是在图例之后声明的。

这是fieldset的css:

.passenger-info {
  background:none repeat scroll 0 0 #F2F2F2;
  border:1px solid #9D240F;
  display:inline;
  float:left;
  margin-bottom:10px;
  margin-right:10px;
  padding:3px 10px;
  position:relative;
  width:350px;
}

和删除我的图片:

.remove-me {
  border:1px solid red;
  position:absolute;
  right:0;
  top:0;
}

这很奇怪。我尝试将字段集填充,并且图像向上移动了一点,但仍然没有在角落。

这篇文章显示FF确实存在渲染字段集的问题。

http://www.codingforums.com/showthread.php?t=132624

是否有更好的方法可以在不使用浏览器特定黑客的情况下进行修复?

9 个答案:

答案 0 :(得分:28)

我不敢相信这是4岁,仍然没有回答。我在每个地方搜索这个答案。这是我在字段集中的图像上使用绝对位置的方法。从这里,更改您的右侧和顶部定位,使其在Firefox中适用于您。 (保留IE,Chrome,Safari,Opera的原始课程)

@-moz-document url-prefix() { 
  .remove-me {
    border:1px solid red;
    position:absolute;
    right:0;
    top:0;
  }
}

这是一个Firefox Hack,我被告知适用于每个版本的Firefox。我使用的是Firefox版本33.0.2,因此我无法确认这适用于旧版本。我在我的网站上遇到了同样的问题。它在IE,Opera,Safari和Chrome中看起来都一样。只有在Firefox中我注意到定位不同。这有效!

答案 1 :(得分:7)

Firefox似乎有一个不可见的填充或边距,将元素放在文本空间的右上角。 Chrome将元素放置在文本流之外的fieldset元素的右上角。

你可以做的一件事就是添加一个div包装器然后绝对将元素放在包装器的右上角,使它位于字段集的角落。

答案 2 :(得分:2)

似乎.remove-me元素可能有边距。确保在向项目添加绝对定位之前删除它。

为了获得精确的结果,您应该始终在CSS中执行“重置”。这意味着从每个元素中删除边距/填充。

简单的重置:

* { margin: 0; padding: 0px; }

将它放在CSS的顶部。

答案 3 :(得分:2)

我使用了@media screen和(-webkit-min-device-pixel-ratio:0){}并以这种方式修复了我的绝对值。它不是很干,但它有效。

答案 4 :(得分:1)

真正的解决方案是firefox,即不要设置top,left,right和bottom的默认值。

我能够通过正确设置来解决我的问题。

答案 5 :(得分:1)

而不是使用保证金使用左,上,右,下。例如:

position: absolute; top: 10px; left: 20px;

答案 6 :(得分:0)

我认为这是因为你没有指出包含按钮的div(passenger-info)的高度;当您不指定时,Chrome会开始执行操作。

答案 7 :(得分:0)

在2020年,针对mozilla的平台本机属性之一使用功能查询可能是正确的方法。-moz-appearance是此类属性之一,但其他属性也可以工作。

@supports (-moz-appearance: none) {
 .remove-me {
    border:1px solid red;
    position:absolute;
    right:0;
    top:0;
  }
}

答案 8 :(得分:-1)

我在网站上遇到了类似的问题,Chrome中的图片出错了。我在图像和输入框中的位置与本文开头的示例相同,我通过将绝对位置放在输入框中并在相对坐标的图像位置来解决它。

当我这样做时,它会改变两个位置,但会在两者中设置边距。我得到了我想要的地方,用Firefox和Chrome解决这个问题,你必须遵循一些技巧才能将图像放在正确的位置。玩这个位置让它发挥作用。