css-8.4-定位
定位
1.定位与浮动一样,都是改变元素在正常文档流中的位置,对网页内容进行重新排版
2.当元素没有定位,出现在正常的文档流中,将不会受left、right、top、bottom和z-index的影响
定位属性
1.relative:相对定位
2.absolute:绝对定位
3.fixed:固定定位
4.static:默认,没有定位
注意
1.三种定位方法均使用top、right、bottom、left调整位置
2.当left和right同时存在时,left生效
3.当top和bottom同时存在时,top生效
一:relative:相对定位
position:relative;设置元素为相对定位,其定位机制
1.相对于自己原来在文档流中的位置定位,当不指定top、left等定位值时,不会改变元素位置
2.相对定位元素仍会占据原有文档流中的位置,不会释放
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>realtive:相对定位</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
line-height: 100px;
text-align: center;
}
.div1{
border: 1px solid #0ff;
/* 相对定位
元素原来的空间没有被释放 */
position: relative;
top: 50px;
left: 50px;
}
.div2{
background-color: #ff0;
}
</style>
</head>
<body>
<div class="div1">相对定位</div>
<div class="div2">未设定位</div>
</body>
</html>
效果图
二:absolute:绝对定位
position:absolute;设置元素为绝对定位,其定位机制
1.相对于第一个非static的祖先元素(即使用了relative、absolute、fixed定位的祖先元素)进行定位
2.如果所有祖先元素均未定位,则相对于浏览器左上角定位
3.使用absolute的元素会从文档流中完全删除,原有空间释放不再占据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>绝对定位</title>
<style type="text/css">
/* 当父元素未设置相对定位时
div1相对浏览器左上角进行定位 */
.wrap{
width: 200px;
height: 200px;
border: 1px solid red;
margin: 0 auto;
/* 父元素相对定位 */
position: relative;
}
.div1{
width: 100px;
height: 100px;
background-color: #ff0;
line-height: 100px;
text-align: center;
/* 绝对定位 */
position: absolute;
top:50px;
left: 50px;
}
/* div2不设置定位
div1空间释放,被div2占据 */
.div2{
width: 100px;
height: 100px;
background-color: #0ff;
line-height: 100px;
text-align: center;
}
</style>
</head>
<body>
<div class="wrap">
<div class="div1">绝对定位</div>
<div class="div2">未设定位</div>
</div>
</body>
</html>
效果图
结论
1.当对div1进行定位时原来的空间会被释放,被未定位的div2所占据
2.当居中的父容器没有进行相对定位时,绝对定位的div1相对于浏览器左上角进行定位
3.当居中的父容器进行相对定位时,绝对定位的div1相对于居中的父元素的左上角进行定位
三:fixed:固定定位
- 固定定位是一种特殊的绝对定位
- 它于普通定位的区别是
- 无论父元素是否定位,子元素如果采用固定定位,都将相对于浏览器左上角定位
- 固定在指定位置,不随浏览器滚动条的滚动而滚动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>固定定位</title>
<style type="text/css">
.wrap{
width: 200px;
height: 200px;
border: 1px solid #f00;
/* 居中 */
margin: 0 auto;
/* 相对定位
固定定位的div1位置依旧不变 */
position: relative;
}
/* 固定定位 */
.div1{
width: 100px;
height: 100px;
background-color: #ff0;
line-height: 100px;
text-align: center;
position: fixed;
top: 50px;
left: 50px;
}
/* 不进行定位,占据div1位置 */
.div2{
width: 100px;
height: 100px;
background-color: #0ff;
line-height: 100px;
text-align: center;
}
</style>
</head>
<body>
<div class="wrap">
<div class="div1">固定定位</div>
<div class="div2">未设定位</div>
</div>
</body>
</html>
效果图
结论
1.当对div1进行固定定位时原来的空间会被释放,被未定位的div2所占据
2.即使父容器添加了相对定位,固定定位的div1依然相对于浏览器左上角定位
四:使用定位实现元素的绝对居中
- 定位可以设置元素的绝对居中
基本思路
1.设置父子元素均为定位元素
2.对子元素进行设置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>居中</title>
<style type="text/css">
.wrap{
width: 200px;
height: 200px;
background-color: #ff0;
/* 将父元素固定 */
position: fixed;
}
.div1{
width: 100px;
height: 100px;
background-color: #0ff;
/* 子元素相对于浏览器进行定位 */
margin: 50px;
line-height: 100px;
text-align: center;
}
</style>
</head>
<body>
<div class="wrap">
<div class="div1">div1</div>
</div>
</body>
</html>
效果图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>居中</title>
<style type="text/css">
.wrap{
width: 200px;
height: 200px;
background-color: #ff0;
margin: 0 auto;
/* 相对定位 */
position: relative;
}
.div1{
width: 100px;
height: 100px;
background-color: #0ff;
line-height: 100px;
text-align: center;
/* 绝对定位 */
position: absolute;
top: 50%;
margin-top:-50px;
left: 50%;
margin-left: -50px;
}
</style>
</head>
<body>
<div class="wrap">
<div class="div1">div1</div>
</div>
</body>
</html>
效果图
五:z-index
z-index
1.z-index的作用
2.z-index的使用要求
3.z-index:auto 和 z-index:0 的异同
4.z-index相同(处于同一平面的定位元素)的层叠关系
1、z-index的作用
- 设置定位元素的层叠顺序
2、z-index的使用要求
- 必须是定位(relative、absolute、fixed)元素才能使用 z-index
- 使用 z-index需要考虑父容器的约束
- 如果父容器没有设置 z-index,或父容器设置位 z-index:auto,则子容器的 z-index 可以不受父容器的约束
- 如果父容器对 z-index 进行了设置,则子容器的层叠顺序将以父容器的 z-index为准(此时子元素的 z-index 只能调整自身与父容器中不同子元素之间的层叠顺序)
3、z-index:auto 和 z-index:0 的异同
- z-index:auto 为默认值,与z-index:0 处于同一平面
- z-index:auto 不会约束子元素的 z-index 层次,而 z-index:0 会约束子元素必须与父元素处于同一平面
4、z-index相同(处于同一平面的定位元素)的层叠关系
- 后来者居上,即写在后面的元素在上一层
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>定位元素的层叠</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
text-align: center;
}
.div1{
background-color: #ff0;
position: absolute;
top: 20px;
left: 20px;
/* 设置div1将在div2上 */
z-index: 1;
}
.div2{
background-color: #0ff;
position: absolute;
top:40px;
left: 40px;
}
</style>
</head>
<body>
<div class="div1">div1</div>
<div class="div2">div2</div>
</body>
</html>
效果图