如何“清除”绝对定位的元素

好吧,我知道1)这可能不仅仅用CSS而且2)它真的不可能。
不幸的是,由于用户的一些要求,我需要找到一种方法使其成为可能。

好的,所以一些大大简化的标记:

    
Stuff1
Stuff2
Stuff3
Stuff4

我需要清除#wrapper中的div。 假设他们都有左上角和左上角。

这里的主要障碍是包装内的div是可移动的。 不仅如此,还可以在任何地方添加或删除更多内部div。

我认为这可能是jQuery的可能……以某种方式找到该div中的最低点并设置div高度以匹配。 我正在努力这样做,但不知道从哪里开始。

有人有主意吗?

解决方案基于Torgamus建议的javascript

 var maxHeight = 0; $('#wrapper div').each(function () { var tmpHeight = $(this).height() + $(this).position().top; if (tmpHeight > maxHeight) { maxHeight = tmpHeight; $('#wrapper').height(maxHeight); } }); 

根据你的评论

以某种方式找到该div中的最低点并设置div高度以匹配。 我正在努力这样做,但不知道从哪里开始。

并且你愿意使用jQuery,我用JavaScript掀起了一些东西:

   Clearing abs positions    
foo
Stuff1
Stuff2
Stuff3
Stuff4
bar

实际上,如果您使用类似于“人造绝对定位”技术的技术,可以使用CSS:

http://www.alistapart.com/articles/fauxabsolutepositioning/

在你的情况下,你可以这样做:

     
Stuff1
Stuff2
Stuff3
Stuff4

使用margin-top和margin-left,你将在实际绝对定位中使用top和left。

使用以下CSS:

 .wrapper { overflow: hidden; /* To clear contents */ zoom: 1; /* To fix IE6 bugs with floats */ } .container { float: left; margin-left: -100%; position: relative; left: 100%; width: 100%; } .stuff { float: left; } 

当然,这需要在物品周围添加额外的容器。 但是你得到的东西的行为与绝对定位的物品完全一样,但是可以清除。

可能最简单的解决方案是使用jQuery来获取从页面顶部到#wrapper div和高度的距离,然后将内容

置于此下方。 就像是:

 $("#div").css('top', ($("#wrapper").offset().top + $("#wrapper").height()) + "px") 

为什么你不能绝对定位容器然后让它的孩子相对?

你不应该’清除’一个绝对定位的元素。 div是如何定位的? 也许你应该将内容div相对于绝对div放置,以便它自然地在它之后流动。

也许将内容div粘贴在包装器中,使其相对,然后将其放在其他div之后,它应该“清除”。 试试吧!