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;
,您将能够使用top
, right
, bottom
和left
属性,虽然元素将移动,但物理上它将在文档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
,这是默认的, relative
, absolute
和fixed
,所以从static
开始,在这里没什么好学的,元素只能堆叠在一起,除非它们被浮动或display: inline-block
,但static
定位, top
, right
演示
前来position: relative;
我已经解释了一般情况,它和static
,它堆积在其他元素上,它在文档stream中,但是你可以使用top
, right
, bottom
和left
,物理上调整元素的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;
容器)
演示4 ( position: relative;
容器)
最后是position fixed
,这是absolute
相同的,但它滚动时,它stream动,它不在文档stream,但它滚动,而且, position: fixed;
元素不能relative
对于具有任何types的position
任何容器元素,甚至不是relative
, fixed
元素总是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;}
编辑:根据你的情况,也许你可以把你的表放在一个绝对定位的div然后使用正常的文件stream在表内?
<div class="absolute-wrap"> <div class="row"> <div class="col"> </div> </div> </div>