2013-10-25 40 views
5

我想添加绝对定位的元素作为表行的:after(的:before)。是否可以安全地使用表格行上的伪元素(:after,:before)?

看这个http://jsbin.com/IGumoye/5/edit

我认为,当我加入这样的元素渲染引擎(至少基于Webkit)认为这是某种形式的表格单元格。

:before在所有浏览器中都不好用。但是:在Firefox中运行得很好,在webkit中运行得很好。在webkit中,它保留了很小的空间,并且使整个桌子的宽度更大。

enter image description here - 这是webkit中困扰我的东西。

如何解决这个问题?我在哪里可以阅读它为何发生?

UPDATE 1

可能的解决方法:使用第一表单元在该行中,作为绝对定位的元素的宿主。

http://jsbin.com/IGumoye/10/edit

更新2

好吧,我想我找到了我最初的问题的解决方案。而且我认为可能会有更好的一个。但我想尽量使用CSS。问题是 - 使一些静态文本可编辑,如果用户点击其他地方 - 关闭此编辑模式。

http://jsbin.com/IGumoye/23/edit

+0

这是一个有趣的问题,但目前还不清楚你想用布局做什么。你能详细说明吗? –

+0

Thx。为你的答案吼声。将看看我能在那里找到什么。我用解决方案和最初的问题更新了这个问题。请检查一下。 –

+0

脚本似乎运作良好,绝对是正确的方法。 –

回答

8

在这个例子中,您使用的是::after::before伪元素后或表行,基本上将打破表布局,并导致不可预测的结果之前添加的内容。

如果要将生成的内容添加到表格单元格,结果会更加一致。

没有太多提及,除了生成的内容的原始规范:

http://www.w3.org/TR/2009/CR-CSS2-20090908/generate.html#before-after-content

另外,请记住,CSS的渲染引擎创建表时产生匿名框:

http://www.w3.org/TR/2009/CR-CSS2-20090908/tables.html#anonymous-boxes

但是,由于生成的内容不是DOM的一部分,因此整个表格渲染过程可能无法处理一个额外的伪元素明智的方式。

您正在钻研一个没有明确指定的区域,并且任何支持都将是浏览器特定的。

根据您的布局要求,您可能需要使用JavaScript或jQuery来将表格的DOM更改为所需的效果。

相关问题