为啥“位置:绝对”时“显示:表格单元”会损坏

Posted

技术标签:

【中文标题】为啥“位置:绝对”时“显示:表格单元”会损坏【英文标题】:Why "display: table-cell" is broken when "position: absolute"为什么“位置:绝对”时“显示:表格单元”会损坏 【发布时间】:2010-12-09 04:50:21 【问题描述】:

我遇到了一个奇怪的问题。我使用 DIV 作为容器,并将图像放入此 DIV。我希望这张图片垂直对齐到底部。以下代码有效。

#banner  
  width: 700px; 
  height: 90px; 
  top: 60px; 
  left: 178px; 
  overflow: hidden; 
  text-align: center; 
  display: table-cell; 
  vertical-align: bottom; 
  position: relative;


<div id="banner">
  <img src="http://www.google.de/intl/de_de/images/logo.gif"/>
</div>

但是如果我将 css 代码“位置:相对”更改为“位置:绝对”,图像将无法再与底部对齐。这是Firefox3的错误吗?我该如何解决这个问题?

我目前的解决方案是:

<div id="banner">
  <table  ><tr><td valign="bottom" align="center">
  <img src="http://www.google.de/intl/de_de/images/logo.gif"/>
  </td></tr></table>
</div>

但我不喜欢这个解决方案。

【问题讨论】:

【参考方案1】:

简短回答: 改变

top: 60px; 

bottom: 60px;

长答案:

声明position: absolute 将您的元素从它所在的任何地方取出,并将其相对于未声明为静态的最里面的元素放置。 in 不再参与任何其他元素的对齐,因此它不再用作表格单元(声明无效)。此外,top: 10px 之类的声明意味着将其放置在距包含元素顶部那么远的地方。

将元素声明为position: relative 使声明如top: 10px 意味着'将元素从当前位置的顶部移动10px'。相对声明的元素可能与其他元素重叠,但您应该记住,原始位置仍然决定其他元素的排列。

我希望这能回答你的问题。

【讨论】:

因为我想DIVs可以重叠。如果 DIV 有相对位置,它们就不能重叠,可以吗?【参考方案2】:

你也可以尝试设置一个 position:relative;容器,这使得横幅(#banner 位置:相对;和 img 位置:绝对)然后将绝对位置设置为底部:0,将其与容器底部对齐。如果是整个页面,只需将容器的宽度和高度设置为 100%,并在 body 或 div 上移除多余的 padding/margin。

【讨论】:

谢谢,很高兴知道“bottom:0”可以使其与底部对齐。如何使图像居中对齐?我有一个将文本保留在中间的解决方案:插入一个内部 DIV 并设置其“行高:height_of_outer_div”。另一件事,我想在运行时更改它。如果我必须为这三个位置编写完全不同的棘手 css 代码,那就不太好。 它在工作网页上吗?要让它显示在中间,只需设置 margin:0 auto;,元素可能需要有一个宽度,这取决于它的容器元素。使图像与 div 对齐……这就是技巧部分。正如您所尝试的那样,有一个 css 表格技巧和线路技巧。如果元素的宽度始终相同,您也可以只填充元素,但通常情况并非如此。

以上是关于为啥“位置:绝对”时“显示:表格单元”会损坏的主要内容,如果未能解决你的问题,请参考以下文章

如何在从另一个小部件拖放事件期间突出显示表格单元格

使用javascript,当我单击表格单元格时如何获取它的背景颜色?

如何在表格视图中显示表格单元格的详细视图?

使用 boundRectWIthSize 动态显示表格单元格的高度

Internet Explorer 8 忽略了“显示:表格单元”元素的宽度

table-layout 表格宽度不随文字改变