z-index值的大小决定层级高低,决定相同位置的元素谁会被覆盖,定位元素的z-index值默认是0但是都比普通元素要大,所以默认情况下相同位置的元素,定位元素可以覆盖在普通元素上。
1.相对定位
position: relative
相对定位是相对自己原来的位置来进行偏移,但是没有脱离文档流它所在的位置仍然被它占据着
lef: 相对原来位置向左偏移量:
right: 相对原来位置向右偏移量:
top: 相对原来位置向上偏移量:
bottom:相对原来位置向下偏移量
2.绝对定位
position: absolute
绝对定位是脱离文档流的
绝对定位是相对距离自己最近的开启定位的父类元素一级一级的往上找直到找到第一个开启定位的父元素如果一直找不到则默认为<html>,称之为包含块
left: 距离包含块左边的距离:
right: 距离包含块右边的距离:
top: 距离包含块上边的距离:
bottom: 距离包含快下边的距离:
同一个水平方向只写一个:如left和right只能写一个
演示:在没有开启定位时子元素inner1和inner2是块级元素各自占用整个宽度
<!DOCTYPE html>
<html lang="ZH-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.outer {
width: 500px;
height: 500px;
background-color: aqua;
margin: 0 auto;
}
.inner1 {
width: 100px;
height: 100px;
background-color: brown;
}
.inner2 {
width: 100px;
height: 100px;
background-color: yellow;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner1"></div>
<div class="inner2"></div>
</div>
</body>
</html>
当给父元素开启相对定位时再给子元素开启绝对定位并且定位距离父元素left: 200px,top: 0px
<!DOCTYPE html>
<html lang="ZH-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.outer {
width: 500px;
height: 500px;
background-color: aqua;
margin: 0 auto;
position: relative;
}
.inner1 {
width: 100px;
height: 100px;
background-color: brown;
font-size: 20px;
}
.inner2 {
width: 100px;
height: 100px;
background-color: yellow;
font-size: 20px;
position: absolute;
left: 200px;
top: 0;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner1">inner1</div>
<div class="inner2">inner2</div>
</div>
</body>
</html>
效果图可以说明绝对定位是脱离文档流的并且是相对第一个开启定位的父元素而言的
3.固定定位
position: fixed
固定定位,相对与网页是固定的,你滑动网页它也不会动,视口,列如广告
直接写距离网页边框的距离
left: 距离网页左边框的距离:
right: 距离网页右边框的距离:
top: 距离网页上边框的距离:
bottom: 距离网页下边框的距离:
4.粘性定位
position: sticky
是相对最近的一个可滑动的块内生效(一般是指body元素)当滑动到它时它会固定在网页直到划过它的父元素。注意开启粘性定位后父元素不能overflow不能设置为hidden和auto
通常只用写top值即可就是距离网页上边框距离为多大时黏住
直到所在的父元素结束。
开启定位的都是定位元素定位元素,定位元素不影响其他元素的布局
大小由内容撑开,可以写大小,但是一个绝对定位的元素没有写大小(由内容决定的)不能撑满整个包含块时,需要设置left :0;right:0;撑满
定位可以解决块内元素布局的问题,可以实现二级菜单下次再说如何只利用css实现二级菜单