<p style="width: 40%; background-color: #aa0000; float: left">
<p >
<p style="position: absolute">
111
</p>
<p style="position: absolute">
222
</p>
</p>
</p>
<p style="width: 20%; background-color: #00aa00; float: left">222</p>
<p style="width: 40%; background-color: #0000aa; float: left">333</p>
<p style="width: 40%;height: 100px; background-color: #aa0000; float: left">
<p >
<p style="position: absolute">
111
</p>
<p style="position: absolute">
222
</p>
</p>
</p>
<p style="width: 20%; background-color: #00aa00; float: left">222</p>
<p style="width: 40%; background-color: #0000aa; float: left">333</p>
怪我咯2017-06-30 10:00:16
你的第一个例子父元素是没有设置高度的,子元素也没有高度,所以不显示。
position:absolute
是绝对定位,脱离文档流,而且你没有设置top/right/bottom/left等值,所以同级的两个p会重叠
黄舟2017-06-30 10:00:16
static
:默认定位(即无定位,文档流怎么排下来就怎么定位)
relative
:相对定位,相对于原始位置定位,所谓的原始位置,即relative
:相对定位,相对于原始位置定位,所谓的原始位置,即static
定位的位置
absolute
:绝对定位,相对于absolute
:绝对定位,相对于static
定位以外的第一个父元素定位。从当前元素开始向上查找定位元素直至根元素,无论遇到的第一个父级元素是relative
还是absolute
,或者是fixed
定位的元素,当前元素就相对于该元素进行定位,并且这个父级元素不一定是当前元素的第一级父元素。如果没有找到任何非static
的父级元素,则相对于根元素html
定位以外的第一个父元素定位。从当前元素开始向上查找定位元素直至根元素,无论遇到的第一个父级元素是relative
还是absolute
,或者是
html
进行定位。
fixed
初学者记住上面这些就行了。
按w3school的说法:绝对定位使元素的位置与文档流无关,因此不占据空间。绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块。
设置为绝对定位的元素框
从文档流完全删除,并
相对于其包含块定位,包含块可能是文档中的另一个元素或者是初始包含块。
relative
的元素。(应该去查下w3c...衰)
什么是包含块?
containing block
css 包含块(Containing Box)
包含块是浏览器计算元素位置的一个虚拟的矩形区域,计算元素定位的起始位置是该矩形区域的左上角,也就是原点,坐标位置为(0,0),定位元素的top
、left
引用中的内容我认为确切的说法应该是“相对于最近的已定位的包含块或初始包含块”,因为如果说法是“相对于包含块”,那为什么一定要至少是relative
的元素。(应该去查下w3c...衰)
containing blockcss 包含块(Containing Box)包含块是浏览器计算元素位置的一个虚拟的矩形区域,计算元素定位的起始位置是该矩形区域的左上角,也就是原点,坐标位置为(0,0),定位元素的top
、left
相对于该原点确定。包含块就是元素定位的参考系。
<!-- p元素会创建一个包含块,用于计算p元素的尺寸和位置 -->
<!-- 可以认为包含块就是p元素 -->
<p>
<p>Hello word.<p>
</p>
🎜🎜包含块只是用于计算元素的位置和尺寸。🎜🎜因为设置为position: absolute
的元素脱离了文档流(normal flow),形成了独立的BFC。
页面中每个BFC都是独立的一块渲染区域,互不影响,但是它的位置信息,依然由它在normal flow中的包含块决定。
所谓的流就是浏览器将元素在浏览器视口从上到下,从左到右一个一个的排版渲染出来,形成的一个类似水流一样 的概念。
默认一个页面只有一个“流”,就是文档流(normal flow),如果页面有定位元素、浮动元素,就会形成定位流、浮动流,而normal flow由文档的根元素html
形成。
流你可以认为是桌面上叠起来的一张张纸,每一张纸都是一个“流”,只是这些纸不一定都是一样的大小。
我对BFC的理解 - wmsj100
漂亮男人2017-06-30 10:00:16
这里你将绝对定位和浮动混合在使用,不方便初学者理解。两者应该分开更容易理解一些。
使用绝对定位的情况,要注意:
1.绝对定位absolute一般是要配合相对定位relative一起使用的。绝对定位到底是相对于哪个元素进行定位的,就给这个定位父级添加属性 position:relative;
要是没有设置这个定位父级,那么绝对定位的元素就会默认<html>是定位父级。
2.所有绝对定位的元素,一定要初始化top/left,即使是0,也要写上。top: 0; left:0;
3.绝对定位的元素相当于脱离了文档流,就不再占据空间了。所以自然也无法再撑起父级元素的宽高
<!-- 这个父级p是定位父级,那么添加属性 position:relative; -->
<p style='position:relative'>
<!-- 绝对定位元素初始化位置top/left -->
<p style="position: absolute;top: 0;left: 0">
111
</p>
<p style="position: absolute;top: 0;left: 0">
222
</p>
</p>
关于浮动float的相关理解要另行百度啦~