页面布局 学习 absolute和relative区别

1、 position的几种选择
static:无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用。
relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。
absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。
fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性定义。

2、 简单总结:
a. 元素使用relative之后,如果没有设置top等属性,则元素还在正常的文档流中,即元素按顺序一个接一个排序;如果设置了top等属性,则位置以正常的文档流位置为准,进行偏移,如图
这里写图片描述
这里写图片描述

b. 元素使用absolute之后,如果没有设置top等属性,则元素的位置为left: 0,top: 0的位置(一般情况必须设置位置偏移属性);如果设置了top等属性,则按照属性进行偏移
注:如果元素的父元素设置了position属性(一般设置position: absolute),则偏移时参照父元素进行偏移;否则,参照窗体进行偏移。一般都会讲父元素的postion设置为absolute
这里写图片描述

这里写图片描述

  absoulte定位,也称为绝对定位,虽然它的名字号曰“绝对”,但是它的功能却更接近于"相对"一词,为什么这么讲呢?原来,使用absoult定位的元素脱离文档流后,就只能根据祖先类元素(父类以上)进行定位,而这个祖先类还必须是以postion非static方式定位的, 举个例子,a元素使用absoulte定位,它会从父类开始找起,寻找以position非static方式定位的祖先类元素(注意,一定要是直系祖先才算哦~),直到<html>标签为止,这里还需要注意的是,relative和static方式在最外层时是以<body>标签为定位原点的,而absoulte方式在无父级是position非static定位时是以<html>作为原点定位。<html>和<body>元素相差9px左右。

  为什么absoulte定位要加 top:0; left:0; 属性,这不是多此一举呢?
       其实加上这两个属性是完全必要的,因为我们如果使用absoulte或fixed定位的话,必须指定 leftright、 top、 bottom 属性中的至少一个,否则left/right/top/bottom属性会使用它们的默认值 auto ,这将导致对象遵从正常的HTML布局规则,在前一个对象之后立即被呈递,简单讲就是都变成relative,会占用文档空间,这点非常重要,很多人使用absolute定位后发现没有脱离文档流就是这个原因,这里要特别注意。

  我们同时设置了top和bottom的属性值,那元素又该往哪偏移好呢?记住下面的规则:
如果top和bottom一同存在的话,那么只有top生效。
如果leftright一同存在的话,那么只有left生效。

参考1
参考2

猜你喜欢

转载自blog.csdn.net/miracle_8/article/details/80291502
今日推荐