Position:
absolute | 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。 |
relative | 生成相对定位的元素,相对于其正常位置进行定位。 |
fixed | 生成绝对定位的元素,相对于浏览器窗口进行定位。 |
static | 默认值。没有定位。 |
inherit | 规定应该从父元素继承 position 属性的值。 |
1.relative,相对定位:
(1)单模块从原点位置相对移动,从原来的位置移动对应的距离:如下,父元素从原来的位置向上和向右移动了100rpx的距离。
<view class='father'>
<view class='bro'>大儿子</view>
<view class='son'>二儿子</view>
</view>
.father{
background-color: yellow;
width: 300rpx;
height: 300rpx;
margin-top: 100rpx;
margin-left: 100rpx;
position: relative;
}
(2)两个模块从相对位置进行移动:
两个模块从自己的相对位置进行移动,都是从之前自己原来的位置出发。
.bro{
background-color: red;
width: 100rpx;
height: 100rpx;
position: relative;
top: 100rpx;
right: 100rpx;
}
.son{
background-color: blue;
width: 100rpx;
height: 100rpx;
position: relative;
top: 20rpx;
left: 20rpx;
}
2.绝对定位:相对于 static 定位以外的第一个父元素进行定位。
(1)如果大儿子变为绝对定位,那么二儿子的位置也会发生改变,变为从原点出发。
可以看到,当大儿子变为绝对定位后,二儿子的位置从原来的地点变为了父元素的起点位置,大儿子采用绝对定位后,覆盖在二儿子上面,绝对定位存在着层级的关系。
.bro{
background-color: red;
width: 100rpx;
height: 100rpx;
position: absolute;
}
.son{
background-color: blue;
width: 100rpx;
height: 100rpx;
}
如果给二儿子加上一个绝对/相对定位,二儿子就会达到最上层:
.bro{
background-color: red;
width: 100rpx;
height: 100rpx;
position: absolute;
}
.son{
background-color: blue;
width: 100rpx;
height: 100rpx;
position: absolute;
}
也可以通过相对定位将二儿子和大儿子一起放出来:
.bro{
background-color: red;
width: 100rpx;
height: 100rpx;
position: absolute;
}
.son{
background-color: blue;
width: 100rpx;
height: 100rpx;
position: relative;
top: 100rpx;
left: 100rpx;
}
3.固定定位:生成绝对定位的元素,相对于浏览器窗口进行定位。
.bro{
background-color: red;
width: 100rpx;
height: 100rpx;
position: fixed;
top: 10rpx;
left: 10rpx;
}
.son{
background-color: blue;
width: 100rpx;
height: 100rpx;
position: relative;
top: 100rpx;
left: 100rpx;
}
相对定位可以看作特殊的普通流定位,元素位置是相对于他在普通流中位置发生变化,而绝对定位使元素的位置与文档流无关,也不占据文档流空间,普通流中的元素布局就像绝对定位元素不存在一样。
绝对定位的元素的位置是相对于距离他最近的非static祖先元素位置决定的。如果元素没有已定位的祖先元素,那么他的位置就相对于初始包含块儿(body或html神马的)元素。
因为绝对定位与文档流无关,所以绝对定位的元素可以覆盖页面上的其他元素,可以通过z-index属性控制叠放顺序,z-index越高,元素位置越靠上。