CSS位置如何工作,为什么绝对元素堆叠在一起,而不是堆叠在一起

如何在下面的代码中同时获得#row1#row2 ,并且一个接一个地垂直显示,就好像没有任何absolute/relative定位一样?

 <body> <div class="container"> <div id="row1" class="row"> <div class="col1">Hello</div> <div class="col2">World</div> </div> <div id="row2" class="row"> <div class="col1">Salut</div> <div class="col2">le monde</div> </div> </div> 

 body {position:relative;} .container {position:absolute;} .row {position:relative;} .col1, .col2 {position: absolute;} 

http://jsfiddle.net/wjrNQ/

更新

我需要这些元素具有CSS规则中提供的定位,这里排除的原因。 所以我的问题是如果有可能实现我所期待的而不删除上面的CSS? 即有两个.row div显示为“正常” block元素。

更新2

如果在px指定了足够的高度,则结果具有预期的外观。 但内容是programmitacallydynamic的,所以我不知道事先的高度:(

那么你在这里有一些奇怪的愿望,所以让我解释一下这些职位在CSS中的真正含义以及他们是如何工作的,使用position: relative; 就像使用static position ,不同的是做一个元素的position: relative; ,您将能够使用toprightbottomleft属性,虽然元素将移动,但物理上它将在文档stream中。

在这里输入图像描述

来的position: absolute; ,当你做任何元素的position: absolute; ,它就离开了文档stream程,因此,它与任何其他元素无关,所以在你的例子中你有.col1, .col2 {position: absolute;}这些是absolute定位的,因为两者都不在文档中stream,它们会重叠…因为它们已经嵌套在position: absolute; 父母即.container ,因为没有width分配,它将采取最小的width ,因此,你的元素重叠,如果你不能改变你的CSS(根据我没有任何意义,为什么你不能改变)仍然如果你想,比你能做的是这个..

演示 (不删除任何你的position属性)这真的很脏


对于s字符,它将位于top因为您的容器元素不在stream中,因此,在文档stream中不会考虑height ,除非您将某个元素包装到某个元素中,并将其放下, margin padding或CSS定位。


CSS职位解释

正如我所评论的,这里有几个CSS定位实际工作的例子,首先,有4个position属性的值,即static ,这是默认的, relativeabsolutefixed ,所以从static开始,在这里没什么好学的,元素只能堆叠在一起,除非它们被浮动或display: inline-block ,但static定位, topright

演示


前来position: relative; 我已经解释了一般情况,它和static ,它堆积在其他元素上,它在文档stream中,但是你可以使用toprightbottomleft ,物理上调整元素的position停留在stream程中,只有元素的position被改变。

演示2


现在是absolute ,一般很多人不明白,当一个元素是absolute它离开文档stream,因此它保持独立,除非它与其他位置重叠,否则与其他元素的定位无关position: absolute可以是position: absolute元素使用z-index修改更改堆栈级别。 这里要记住的主要是要有一个position: relative; 容器,以便您的absolute定位元素是对于relative定位的元素,否则您的元素将飞出野外。

值得注意的是position: absolute; 元素absolute;定位时absolute;absolute定位的父元素内部,而不是相对于该元素而不是相对于可能relative定位的macros父元素

演示3 (无position: relative;容器)

演示4position: relative;容器)


最后是position fixed ,这是absolute相同的,但它滚动时,它stream动,它不在文档stream,但它滚动,而且, position: fixed; 元素不能relative对于具有任何types的position任何容器元素,甚至不是relativefixed元素总是relative对于视口,所以devise者使用position: absolute; 当他们想要有一个fixed position行为,但relative对于父母,并调整top属性onScroll

演示5

你想要什么,不可能修改CSS position属性。 然而,你可以做什么,而不用触摸现有的CSS,用更具体的select器来覆盖它

 .row .col1, .row .col2 { position: relative; } 

看JSFiddle

position:relative被使用时, 页面布局将在被top, left值偏移之前正常发生 ,然而position:absolute会忽略文档stream 。 relative的工作没有变化,但绝对必须改变

 .col1, .col2 {display:inline-block;} 

http://jsfiddle.net/C4bQN/

编辑:根据你的情况,也许你可以把你的表放在一个绝对定位的div然后使用正常的文件stream在表内?

 <div class="absolute-wrap"> <div class="row"> <div class="col"> </div> </div> </div>