一、定位的使用场景
定位使某一元素可以自由的在盒子内移动位置或者固定在屏幕中的某个位置,并且可以压住其他盒子。
典型应用:轮播图手动换图的左右键以及下方小圆点。

二、定位的组成
定位=定位模式+边偏移
定位模式:指定一个元素在文档中的定位方式。
边偏移:决定该元素的最终位置。
三、定位模式与边偏移
定位模式用于指定一个元素在文档中的定位方式。它通过 CSS 中的position 属性来设置,它的属性值共有五个:
| 值 | 语义 |
|---|---|
| static | 静态定位 |
| relative | 相对定位 |
| absolutey | 绝对定位 |
| fixed | 固定定位 |
| sticky | 粘性定位 |
边偏移就是定位的盒子移动到最终的位置。盒子通过定义边偏移的值,而向相应的方向移动相应的位置。
| 边偏移属性 | 示例 | 描述 |
| top | top: 80px | 顶部偏移量,定义元素相对于其父元素上边线的距离 |
| bottom | bottom: 50px | 底部偏移量,定义元素相对于其父元素下边线的距离 |
| left | left: 60px | 左部偏移量,定义元素相对于其父元素左边线的距离 |
| right | right: 50px | 右部偏移量,定义元素相对于其父元素右边线的距离 |
1.静态定位 (static)
1.1 解释
静态定位是元素本身默认的定位方式,静态定位即无定位。
1.2 语法
选择器 :{position : static;}
1.3 特点
静态定位按照标准流特性摆放位置,它没有边偏移。
静态定位在布局中很少用到。
2.相对定位 (relative)
2.1 解释
相对定位是在元素移动位置的时候,相对于本身原来的位置而言的。
2.2 语法
选择器 :{position : relative;}
2.3 特点
它是相对于原来自己的位置来移动的(移动位置的时候参照点是自己原来的位置。)
原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。(不脱标,继续保留原来位置。)相对定位不脱标。
3.绝对定位 (absolute )
3.1 解释
绝对定位是元素在移动位置的时候,是相对于它祖先元素的。
3.2 语法
选择器 { position: absolution ;}
3.3 特点
如果没有祖先元素(祖先元素包括父元素,“爷爷”,“爷爷的爸爸”)或者祖先元素没有定位,则以浏览器为准定位(Document文档)
如果祖先元素有定位(相对,绝对,固定定位),则以最近一级的有定位祖先元素为参考点移动位置。
绝对定位不再占有原来的位置。(脱标)(典型应用-轮播图)
4.子绝父相
4.1 解释
子级是绝对定位的话,父级要用相对定位。
子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
父盒子需要加定位限制盒子在父盒子内显示。
父盒子布局时,需要占有位置,因此父亲只能是相对位置。
4.2 总结
因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位.
相对定位经常用来做绝对定位的父级。
子绝父相并不绝对,其他情况也可能存在。
5.固定定位
5.1 解释
固定定位是元素固定于浏览器可视区的位置。
5.2 主要使用场景
可以在浏览器页面滚动时元素的位置不会改变。
5.3 语法
选择器{ position : fixed;}
5.4 特点
以浏览器的可视窗口为参照点移动元素。
跟父元素没有任何关系。
不随着滚动条滚动。
固定定位不占有原来的位置(脱标)
固定定位也是脱标的,其实固定定位也可以看作是一种特殊的绝对定位。
5.5 固定定位小技巧:固定在版心右侧位置。
让固定定位(position: absolute;)的盒子 left:50%,走到浏览器可视区(也可看作版心)的一半位置。
让固定定位的盒子 margin-left:版心宽度的一半距离。多走版心宽度的一般位置就可以让固定定位的盒子贴着版心右侧对齐了。
6. 粘性定位 (sticky )
6.1 解释
粘性定位可以被认为是相对定位和固定定位的混合。
6.2 语法
选择器 { position: sticky; top:10px }
6.3 特点
以浏览器的可视窗口为参照点移动元素
粘性定位占有原先的位置
必须添加 top, left, right, bottom 其中一个才有效跟页面滚动搭配使用。兼容性较差,IE不支持。
四、定位总结
| 定位模式 | 是否脱标 | 移动位置 | 是否常用 |
| static静态定位 | 否 | 不能使用边偏移 | 很少 |
| relative相对定位 | 否(占有位置) | 相对于自身位置移动 | 常用 |
| absolute绝对定位 | 是(不占有位置) | 带有定位的父级 | 常用 |
| fixed固定定位 | 是(不占有位置) | 浏览器可视区 | 常用 |
| sticky粘性定位 | 否(占有位置) | 浏览器可视区 | 较少 |
五、定位叠放次序 z-index
1.1 解释
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用 z-index 来控制盒子的前后顺序。
2.2 语法
选择器 { z-index : 1;}
3.3 特点
数值可以是正整数,负整数,0,默认是auto,数值越大,盒子越靠上。
如果属性值相同,则按照书写顺序,后来居上。
数字后面不能加单位。
只有定位的盒子才有 z-index 的属性。
六、定位扩展
1.1 绝对定位,固定定位的盒子居中
加了绝对定位的盒子不能通过 margin:0 auto 水平居中,但是可以通过一下方法实现水平和垂直居中。
该方法较为灵活,放大缩小浏览器仍然处于浏览器的水平垂直居中。
left:50%; 让盒子的左侧移动到父级元素的水平中心位置。
margin-left:-100px; 让盒子向左移动自身宽度的一半。
1.2 定位特殊特性
绝对定位和固定定位也和浮动类似:
行内元素添加绝对或者固定定位,可以直接设置高度和宽度。
块级元素添加绝对或者固定定位,如果不给宽度或高度,默认大小是内容的大小。
1.3脱标的盒子不会触发外边距塌陷
浮动元素,绝对定位(固定定位)元素都不会触发外边距合并的问题。
七、小知识
如果一个盒子既有left属性,又有right属性,则默认会执行left属性。同理,既有top属性,又有bottom属性,则默认执行top属性。