CSS属性:定位属性
CSS的定位属性有三种,分别是绝对定位、相对定位、固定定位。
css
position: absolute; <!-- 绝对定位 -->
position: relative; <!-- 相对定位 -->
position: fixed; <!-- 固定定位 -->下面逐一介绍。
相对定位
相对定位:让元素相对于自己原来的位置,进行位置调整(可用于盒子的位置微调)。
我们之前学习的背景属性中,是通过如下格式:
css
background-position:向右偏移量 向下偏移量;但这回的定位属性,是通过如下格式:
css
position: relative;
left: 50px;
top: 50px;相对定位的举例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body{
margin: 0px;
}
.div1{
width: 200px;
height: 200px;
border: 1px solid red;
}
.div2{
position: relative; /*相对定位:相对于自己原来的位置*/
left: 50px; /*横坐标:正值表示向右偏移,负值表示向左偏移*/
top: 50px; /*纵坐标:正值表示向下偏移,负值表示向上偏移*/
width: 200px;
height: 200px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="div1">div1</div>
<div class="div2">div2</div>
</body>
</html>上方代码中,我们给div2设置了相对定位,让其向右下方偏移。注意,偏移是相对于自己原来的位置进行偏移。
相对定位的特点:
- 不脱离标准文档流
- 相对于自己原来的位置进行偏移
- 原来的位置继续占有空间
- 可以通过left、top、right、bottom进行偏移
- 层级提高了,可以覆盖其他标准流中的元素
绝对定位
绝对定位:定义横纵坐标。原点在父容器的左上角或左下角。横坐标用left表示,纵坐标用top或者bottom表示。
格式举例如下:
css
position: absolute; /*绝对定位*/
left: 10px; /*横坐标*/
top/bottom: 20px; /*纵坐标*/绝对定位的参考点
绝对定位的参考点,如下:
- 如果用top描述,那么参考点就是页面的左上角,而不是浏览器的左上角:
css
position: absolute;
left: 10px; /*横坐标:距离页面左边框10px*/
top: 20px; /*纵坐标:距离页面上边框20px*/- 如果用bottom描述,那么参考点就是浏览器首屏窗口尺寸(好好理解"首屏"二字),对应的页面的左下角:
css
position: absolute;
left: 10px; /*横坐标:距离页面左边框10px*/
bottom: 20px; /*纵坐标:距离页面下边框20px*/以盒子为参考点
一个绝对定位的元素,如果父辈元素中也出现了已定位(无论是绝对定位、相对定位,还是固定定位)的元素,那么将以父辈这个元素,为参考点。
如果一个盒子既没有设置width,也没有设置left和right,那么,这个盒子的宽度,就是内容的宽度(auto)。
绝对定位的盒子居中
我们知道,标准流中的盒子居中的格式是:
css
margin: 0 auto;但是,对于绝对定位的盒子,margin: 0 auto;无效。
如果想让绝对定位的盒子居中,可以这样做:
css
position: absolute;
left: 50%; /* 让盒子的左边线居中 */
margin-left: -100px; /* 然后向左移动自身宽度的一半 */例如,我们现在要让一个宽度为200px的盒子在屏幕中居中,可以这样设置:
css
.box {
position: absolute;
left: 50%;
margin-left: -100px;
width: 200px;
height: 200px;
background-color: green;
}绝对定位的特点
绝对定位的特点:
- 脱离标准文档流
- 如果没有设置宽度,宽度由内容决定
- 如果没有设置left和right,默认位置在原来的位置
- 层级提高了,可以覆盖其他标准流中的元素
- 不会继承父元素的宽度
固定定位
固定定位:就是相对于浏览器窗口进行定位。无论页面如何滚动,这个盒子显示的位置不变。
格式举例如下:
css
position: fixed;
left: 100px;
top: 100px;固定定位的特点:
- 脱离标准文档流
- 相对于浏览器窗口进行定位
- 无论页面如何滚动,盒子位置不变
- 层级提高了,可以覆盖其他标准流中的元素
网页的五层结构
我们的网页就是一个五层结构:
- 内容层:z-index:auto/0
- 背景层:z-index:-1
- 浮动层:z-index:auto/0
- 定位层:z-index:auto/0/1/2/...
- 最高层:z-index:9999
z-index属性:调整层级
z-index属性用于调整定位元素的层级,值越大层级越高。
css
z-index: 1;需要注意的是:
- z-index的默认值是0
- z-index只能用于定位元素(position不为static的元素)
- 如果父元素的层级低于其他元素,那么子元素的层级再高也没用
定位属性的综合应用
1. 固定导航栏
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>固定导航栏</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.nav {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 50px;
background-color: #333;
color: #fff;
text-align: center;
line-height: 50px;
}
.content {
margin-top: 50px;
height: 2000px;
background-color: #f5f5f5;
}
</style>
</head>
<body>
<div class="nav">固定导航栏</div>
<div class="content">内容区域</div>
</body>
</html>2. 水平垂直居中
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.container {
position: relative;
width: 500px;
height: 500px;
background-color: #f5f5f5;
}
.box {
position: absolute;
top: 50%;
left: 50%;
margin-top: -100px;
margin-left: -100px;
width: 200px;
height: 200px;
background-color: green;
}
</style>
</head>
<body>
<div class="container">
<div class="box"></div>
</div>
</body>
</html>3. 遮罩层
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>遮罩层</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
}
.modal {
position: fixed;
top: 50%;
left: 50%;
margin-top: -150px;
margin-left: -200px;
width: 400px;
height: 300px;
background-color: #fff;
border-radius: 5px;
}
</style>
</head>
<body>
<div class="mask"></div>
<div class="modal"></div>
</body>
</html>总结
CSS的定位属性是布局中非常重要的一部分,它可以让元素脱离标准流,实现更加灵活的布局。
三种定位方式的特点:
相对定位(relative):
- 不脱离标准流
- 相对于自己原来的位置进行偏移
- 原来的位置继续占有空间
绝对定位(absolute):
- 脱离标准流
- 如果父辈元素中有已定位的元素,则以父辈已定位元素为参考点
- 如果父辈元素中没有已定位的元素,则以页面为参考点
固定定位(fixed):
- 脱离标准流
- 相对于浏览器窗口进行定位
- 无论页面如何滚动,盒子位置不变
在实际开发中,我们通常会结合这三种定位方式,实现各种复杂的布局效果。