定位类型
static
默认值,该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时top, right, bottom, left
和z-index
属性无效。
relative
- 元素框偏移某个距离,原本所占空间仍保留;
- 未设置
top, right, bottom, left
属性时表现与static
相同。
absolute
- 脱离文档流,相对于最近的非 static 定位祖先元素定位;
- 如果绝对定位的元素没有最近的非 static 定位祖先元素,那么它相对于文档的
body
元素定位。
fixed
- 相对于屏幕视口(viewport,浏览器窗口内的内容区域,不包含工具栏、标签栏等,也就是网页实际显示的区域)定位。
sticky
粘性定位,相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。
对元素的影响
元素被设为position: absolute
之后,其display
计算值就变为block
,尽管其表现形式和inline-block
类似–包裹内部元素且不超出包含块的特性。
1 | var span = document.createElement('span'); |
元素设置了position: absolute
或fixed
之后,如果没有设置top, right, bottom, left
属性,浏览器会默认将这些属性设置成auto
,而auto
的值是该元素的“默认位置”。即设置position: absolute
或fixed
前后的offsetTop
和offsetLeft
属性值不变。
position
为static
或relative
的元素,设置width
或height
为百分比时,相对的是父容器的content
;
position
为absolute
的元素,设置width
或height
为百分比时,相对的是定位父容器的padding+content;
position
为fixed
的元素,设置width
或height
为百分比时,相对的是浏览器内容区域(不包括滚动条)的宽高。