【发布时间】:2020-05-04 20:34:06
【问题描述】:
我有一张这样的桌子:
<table cellspacing="0">
<tr>
<td>Row 1</td>
<td><button>Button 1</button></td>
</tr>
<tr>
<td>Row 2</td>
<td><button>Button 2</button></td>
</tr>
<tr>
<td>Row 3</td>
<td><button>Button 3</button></td>
</tr>
</table>
我想将每个按钮绝对定位在表格行的右上角,所以我使用了这个 CSS,期望 <tr> 包含 <button>:
tr {
position:relative;
}
button {
position:absolute;
top:0;
right:0;
}
但是,这些按钮都堆叠在同一个位置。它通常使用<div>s 可以正常工作,但在使用display:table-row 时它仍然会以这种方式运行,这是我在测试时发现的,这让我很惊讶。
演示:http://jsfiddle.net/QU2zT/1/
注意:我的实际标记更复杂,我试图定位的元素可能出现在它所在行的任何表格单元格中的任何位置,这就是我认为我需要position:absolute 的原因。
- 为什么会这样?
- 如何在不更改标记的情况下使用 CSS 解决此问题?
编辑:Firefox 中的结果与 Chrome 和 IE9 中的结果不同(除此之外还没有测试过)。 FF 完全失败,而其他浏览器仅包含“divs with table display”设置失败,见demo。
【问题讨论】:
-
在 Chrome 中为我工作,您使用的是哪种浏览器?
-
使用 FF8 问题是最严重的,但其他浏览器似乎也存在
<div>设置问题,使用各种模拟表格的display设置(演示中的第二个示例),请参阅编辑。 -
检查this SO question。基本上,将
display:block;添加到单元格或行中就可以了,但它会弄乱整个表格样式。您可以尝试在单元格内添加一个元素并为其指定相对位置。更多的标记,更少的头痛:P -
@thirtydot:包装技巧似乎在任何浏览器中都不起作用:jsfiddle.net/QU2zT/18