定位的那些事

定位的类型

通过position属性,可以选择四种不同类型的定位:static    relative   absolute   fixed  ;

应用于所有元素,无继承性。

static : 块级元素生成矩形框,行内元素生成行内框,处于正常文档流中。

relative:元素相对自身偏移某个距离,仍保持定位前的状态,处于正常文档流中,原本所占的空间仍保留。

absolute:完全脱离文档流,相对于其包含块定位。元素在正常文档流中所占的空间关闭,仿佛不存在一样,生成块级框无论原来何种类型框。

fixed:与absolute类似,不过其包含块为视窗本身。

包含块的概念

css2.1定义了以下行为

1 根元素(html)的包含块为初始包含块,是一个视窗大小的矩形。

2 对于非根元素,如果其position的值是static或relative,包含块由最近的块级框,表单元格以及行内块级祖先元素的内容边界构成。

3 对于非根元素,如果position的值为absolute,包含块设置为最近的position的值不是static的祖先元素(可以是任何类型)。

如果祖先元素为块级元素,则包含块设置为由边框界定的区域。(没有设置偏移属性为内容边界)。

如果祖先元素为行内元素,则包含块设置为该祖先元素的内容边界。

如果没有祖先,元素的包含块定义为初始包含块。

注意:元素可以定位到其包含块的外面,这说明,包含块一词实际上应该是“定位上下文”。

偏移属性

top   right   bottom    left    初始值为auto。

应用于定位元素

top和bottom的百分数相对于包含块的高度计算

left和right的百分数相对于包含块的宽度计算。

正值会导致向内偏移,使边界朝着包含块的中心移动,而负值导致向外偏移。

所有浏览器使用外边距边界来完成偏移计算。

即元素的所有一切(外边距,边框,内边距和内容)都会在定位过程中移动,这些会随着定位元素一直保留,并包含在偏移属性定义的区域内。

注意:偏移属性定义了距离包含块相应边的偏移,而不是距离包含块左上角的偏移。

对于auto没有定义行为,为初始值。

包含块和绝对定位元素

1 定位元素不会流入其它元素的内容,反之亦然。这说明,定位元素可能覆盖其它元素或者被其它元素覆盖。

2 通常会选择一个元素作为绝对定位元素的包含块,将其position的值定义为relative,而且没有偏移。

3 元素绝对定位时,还会为其后代元素建立一个包含块。即为子定位元素的包含块。

4 如果文档可滚动,绝对定位元素会随它滚动。其原因是定位元素最终会相对于正常流中的某一部分定位。

自动边偏移

除bottom外,其他偏移属性设置为auto或不设置偏移属性,定位元素会定位在其未定位前的位置。静态位置:元素在正常流中原来的位置。

注意:由于它已经定位,其正常流空间关闭,导致定位元素与正常流元素重叠覆盖。

 

posted @ 2017-02-20 16:29  chaoms  阅读(154)  评论(0编辑  收藏  举报