绝对定位就是寻找父级标签中设置为定位流的标签(相对定位、绝对定位、固定定位),自身相对于这个标签进行移动,如果父级标签不存在定位流的标签则会找body作为参考标签,如果父级标签存在多个定位流标签,则会选择离自身近的标签作为参考标签。
绝对定位使用position:absolute,同样需要设置top、bottom、left、right,并且top和bottom、right和left只能同时设置一个。
另外绝对定位是完全脱离文档流的,这就意味着绝对定位不区分块级、行内、行内块级元素,可以给这些元素设置宽高,同时绝对定位在文档流中不占用位置,下方元素会顶上设置绝对定位的元素位置。
此外绝对定位还有几个注意点:
- 绝对定位把body作为参考标签时实际参考的是首屏(当前屏幕)的宽高,因此设置 bottom: 0;right: 0;会将标签设置在首屏的最下侧,该标签不会随滚动条的移动而移动。
- 绝对定位会忽视父级标签的padding。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
*{
padding: 0;
margin: 0;
}
.box1 {
background-color: red;
position:absolute;
bottom: 0;
right: 0;
width: 100px;
height: 100px;
}
.box2 {
background-color: green;
width: 1000px;
height: 1000px;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
另外在绝对定位中不能使用margin:0 auto;进行盒子居中了,如果想让盒子居中可以设置left: 50%; top:50%;margin-left:-元素宽度一半px; margin-top:-元素高度度一半px;
如果设置绝对定位的盒子是参考body标签,则可以设置
{background-color:red;position:absolute;top:0;bottom:0;left:0;right:0}实现填满整个网页的效果。
另外在实际应用中还有一个小技巧,可以将父标签设置为相对定位但是不移到位置,以此来实现子标签绝对定位*移动位置的效果,称之为子绝父相。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
* {
margin: 0;
padding: 0;
}
.box1 {
width: 100px;
height: 100px;
background-color: red;
position: relative;
}
.box2 {
width: 50px;
height: 50px;
background-color: yellow;
position: absolute;
left: 100px;
top:100px;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
</html>