1.定位的概念:
定位是一种更加高级的布局手段,通过定位可以将元素摆放到页面的任意位置,使用position属性来设置定位。
可选值:
static 默认值,元素是静止的没有开启定位
relative 开启元素的相对定位
absolute 开启元素的绝对定位
fixed 开启元素的固定定位
sticky 开启元素的粘滞定位
2.偏移量的概念:
当元素开启了定位以后,可以通过偏移量来设置元素的位置。
top: 定位元素和定位位置上边的距离(top值越大,定位元素越向下移动)
bottom: 定位元素和定位位置下边的距离(bottom值越大,定位元素越向上移动)
定位元素垂直方向的位置由top和bottom两个属性来控制
left:定位元素和定位位置的左侧距离(left越大元素越靠右)
right:定位元素和定位位置的右侧距离
-
定位元素水平方向的位置由left和right两个属性控制( right越大元素越靠左),通常我们使用元素的top和left值去定位元素的位置。
- 注意和margin的区别:1.margin-top会改变页面布局;而top会覆盖元素,不会改变页面的布局。2.四个方向的偏移都是移动自身,而不会跟margin-bottom/right一样是其他元素在移动
3.相对定位:
position:relative开启了元素的相对定位
3.1当开启元素的相对定位之后,不设置偏移量就不会发生任何的变化,所以通过偏移量(left/right/top/bottom)设置元素的位置(什么时候移动?)
3.2相对定位是相对于元素自身(元素移动之前的位置)移动的(按怎样的规则移动?)
3.3相对定位会提升元素的层级(高于文档流),会覆盖其他的元素。(有什么样的效果?)
3.4相对定位不会脱离文档流(不会影响其他元素),灵魂走了肉体还在,相对定位不会改变元素的性质,块元素还是块元素,行内还是行内。(性质和特点?)
4.绝对定位:
position:absolute开启了元素的绝对定位
4.1当开启元素的绝对定位之后,元素已脱离文档流,不设置偏移量就不会移动,所以通过偏移量(left/right/top/bottom)设置元素的位置(什么时候移动?)
4.2绝对定位是相当于其包含块定位的,绝对定位的包含块就是离它最近的开启了定位(position不是static)的祖先元素移动的,如果所有的祖先元素都没有开启定位则根元素就是它的包含块,一层一层的往上走。- html(根元素、也称初始包含块)(按怎样的规则移动?)
包含块( containing block ) - 正常情况下:
包含块就是离当前元素最近的祖先块元素
- 绝对定位的包含块:
包含块就是离它最近的开启了定位的祖先元素(position不是static),如果所有的祖先元素都没有开启定位则根元素就是它的包含块。
- html(根元素、也称初始包含块)(按怎样的规则移动?)
4.3绝对定位会提升元素的层级(高于文档流),脱离文档流。(有什么样的效果?)
4.4绝对定位会脱离文档流(会影响其他元素),绝对定位会改变元素的性质,块元素还是行内块元素,行内元素可以设置宽高。(性质和特点?)
5.固定定位
position:fixed开启了元素的固定定位
固定定位也是一种绝对定位,所以固定定位的大部分特点都和绝对定位一样, 唯一不同的是固定定位的包含块是视口,永远参照于浏览器的视口(固定不动的可视框的大小)进行定位,所以固定定位的元素不会随网页的滚动条滚动,相对于可视区域滚动的,可视区域不会变化的。
可通过: left:0; top:0来 查看偏移的原点位置。
6.粘滞定位
position:sticky时则开启了元素的粘滞定位
- 粘滞定位和相对定位的特点基本一致,
不同的是粘滞定位可以在元素到达某个位置时(通过偏移设置)将其固定,其包含块是body,但是由于是新的属性,兼容性不好
7.层级
7.1对于开启了定位元素,可以通过z-index属性来指定元素的层级,z-index需要一个整数作为参数,值越大元素的层级越高,元素的层级越高越优先显示
7.2如果元素的层级一样,则优先显示结构上靠下的元素。
如果不设置的话,默认为0.
7.3 祖先的元素的层级再高也不会盖住后代元素,(后代元素继承了祖先元素,简单的理解,伟大的父爱~~~)。