文章目录
一、定位
为什么需要定位?
当实现某些盒子固定在屏幕中的某个位置等效果或者小盒子在大盒子内自由移动位置时,需要使用到定位。定位让盒子自由地在某个盒子内移动位置或者固定屏幕中的某个位置,并且可以压住其他盒子。
二、定位组成
定位:将盒子定在某一个位置,所以定位也是在摆盒子,按照定位的方式移动盒子。
定位=定位模式+ 边偏移
定位模式用于指定一个元素在文档中的定位方式,边偏移决定元素的最终位置。
2.1 定位模式
定位模式决定元素的定位方式,它通过CSS的position属性来设置,其值可以分为四个:
值 | 语义 |
---|---|
static | 静态定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
2.2 边偏移
边偏移是定位的盒子移动的最终位置,有top、bottom、left和right4个属性。
属性 | 描述 |
---|---|
top | 顶端偏移量,相对于其父元素上边线的距离 |
bottom | 底部偏移量,相对于其父元素下边线的距离 |
left | 左侧偏移量,相对于其父元素左边线的距离 |
right | 右侧偏移量,相对于其父元素右边线的距离 |
三、定位介绍
3.1 静态定位
静态定位是元素的默认定位方式,无定位的意思。
语法:
选择器 {
position: static;
}
静态定位按照标准流特性摆放位置,它没有边偏移;它在布局中很少用到。
3.2相对定位
相对定位是元素在移动位置的时候,相对于它原来的位置移动。
选择器 {
position: relative;
}
原来在标准流的位置继续占用,后面的盒子依然以标准流的方式对待它。
3.3 绝对定位
绝对定位是元素在移动位置的时候,相对于它的父元素来说的。
选择器 {
position: absolute;
}
3.3.1 特点:
1.如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位
<style>
.father {
width: 500px;
height: 500px;
background-color: green;
margin: 0px;
}
.son {
position: absolute;
bottom: 0;
left: 0;
width: 200px;
height: 200px;
background-color: blue;
}
</style>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
上述代码效果图如下所示:
可以看出如果没有父元素或者父元素没有定位时,则以浏览器为准定位。
2.如果父元素有定位,则以最近一级的有定位祖先元素为参考点移动位置。
<style>
.father {
width: 500px;
height: 500px;
background-color: green;
margin: 0px;
position: relative;
}
.son {
position: absolute;
bottom: 0;
left: 0;
width: 200px;
height: 200px;
background-color: blue;
}
</style>
父元素添加定位后,则以父元素为参考点移动位置,效果如下:
同理,如果父元素没有定位,父元素的父元素(即爷爷元素)有定位,则以爷爷元素为准。
3.绝对定位不再占有原先位置(脱标)
3.3.2 子绝父相
- 子级绝对定位,不占用位置
- 父盒子需要加定位限制子盒子
- 父盒子布局时,需要占有位置,因此父盒子只能是相对定位
因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位。
3.4 固定定位
固定定位是元素固定于浏览器可视区的位置,主要使用场景:可以在浏览器页面滚动时元素的位置不会改变。
选择器 {
position: fixed;
}
特点:
- 以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条的滚动而滚动;
- 固定定位不占用原先位置(脱标)
固定定位小技巧:固定在版心右侧位置
小算法:
- 让固定定位的盒子left:50%,走到浏览器可视区(也可以看作版心)的一半位置
- 让固定定位的盒子margin-left:版心宽度的一半距离
3.5粘性定位
粘性定位可以认为是相对定位和固定定位的混合。
语法:
选择器 {
position: sticky;
top: 10px;
}
粘性定位的特点:
- 以浏览器的可视窗口为参照点移动元素(固定定位特点)
- 粘性定位占有原先的位置(相对定位特点)
- 必须添加top、left、right、bottom其中一个有效
跟页面滚动搭配使用,兼容性较差,IE不支持
四、定位叠放顺序
在使用定位布局时,可能会出现盒子重叠的情况,可以使用z-index来控制盒子的前后次序
语法:
选择器 {
z-index: 1;
}
- 数值可以是正整数、父整数或者0,默认是auto,数值越大越靠上
- 如果属性值相同,则按照书写顺序
- 数字后面不能加单位
- 只有定位的盒子才有z-index属性
五、定位拓展
4.1 居中
加了绝对定位的盒子不能通过margin:auto水平居中,通过以下方法实现:
left:50%:让盒子的左侧移动到父级元素的水平中心位置
margin-left:-100px;让盒子向左移动自身宽度的一半
垂直居中方法类似:
top:50%:让盒子的上侧移动到父级元素的水平中心位置
margin-top:-100px;让盒子向下移动自身宽度的一半
4.2 定位特性
- 行内元素添加绝对或相对定位,可以直接设置高度和宽度
- 块级元素添加绝对或相对定位,如果不给宽度或者高度,默认是内容的大小
- 脱标的盒子不会触发外边距塌陷:浮动元素、绝对定位元素都不会触发外边距合并的问题
- 绝对定位(固定定位)会完全压住盒子:浮动元素只会压住它下面标准流的盒子,但是不会压住下面标准流盒子的文字(图片);绝对定位会压住它下面标准流的所有内容;
总结
总结了定位的相关知识~