前言
上一篇文章了解了浮动float 文章地址:https://blog.csdn.net/qazzwx/article/details/104923386
这篇文章主要了解position属性 相对定位、绝对定位和固定定位
一、position属性的定义和用法
1.1、如上图所示,一个盒子压住另一个盒子增加层次感用浮动是做不了,如果盒子浮动会并排但不会出现有层级的观感。所以想要有层级的观感,就得用定位。定位可以将盒模型中的盒子显示在我们想要的位置。
1.2、position属性语法为:
<style>
.div1 {
position: relative;
right: 400px;
top: 50px;
}
</style>
常用值如下:
absolute |
生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
fixed |
生成绝对定位的元素,相对于浏览器窗口进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
relative |
生成相对定位的元素,相对于其正常位置进行定位。 因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。 |
static | 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 |
inherit | 规定应该从父元素继承 position 属性的值。 |
二、使用示例
2.1、相对定位
实例一
<style>
.div1 div {
width: 100px;
height: 100px;
background-color: pink;
float: left;
}
.div2 {
position: relative;/* 相对定位,相对于原来的位置 */
top: 60px; /* 正数往下,负数往上 bottom反之*/
left: 100px;/* 正数往右,负数往左 right反之*/
}
</style>
<div></div>
<div class="div2"></div>
<div></div>
<div></div>
实例二 使用浮动和相对定位制作导航栏
<style>
.div4 {
width: 400px;
height: 50px;
list-style: none;
text-align: center;
}
li {
list-style: none;
width: 100px;
float: left;
text-align: center;
line-height: 50px;
background-color: pink;
}
a {
text-decoration: none;
display: block;
color: #000;
}
a:hover {
position: relative;
bottom: -5px;
border-bottom: 3px solid yellow;
}
</style>
<div class="div4">
<li><a href="">首页</a></li>
<li><a href="">活动</a></li>
<li><a href="">专题</a></li>
<li><a href="">特价</a></li>
</div>
实例三
<style>
span {
font-size: 12px;
position: relative;
top: -5px;
color: blue;
}
.div5 {
width: 400px;
height: 50px;
line-height: 50px;
text-align: center;
}
</style>
<div class="div5">
人生 <span>123</span> 路漫漫兮其修远,<span>456</span> 吾将上下而求索。
<span>789</span>
</div>
相对定位的特征
1.相对定位的元素不会脱离文档流不会改变元素的性质(块元素仍然是块元素,行内元素仍然是行内元素)。但是注意一点行内元素 使用相对定位不能转行内块。
2.相对定位元素会提升一个层级(如果与其他元素发生重叠 它会在上面)
3.相对定位设置定位之后其原来的位置还会保留不会被覆盖,不设置偏移值,.元素则不会有任何变化,所以一般用于元素之间偏移。
4.子绝父相(父元素相对定位,子元素绝对定位)
5.相对定位的位置偏移,是从自身位置出发。
2.3、绝对定位
实例一
<style>
.div1 div {
width: 100px;
height: 100px;
background-color: pink;
float: left;
}
.div2 {
position:absolute;/* 相对定位,相对于原来的位置 */
top: 100px; /* 正数往下,负数往上 bottom反之*/
left: 60px;/* 正数往右,负数往左 right反之*/
}
</style>
<div class="div1">
<div>div1</div>
<div class="div2">div2</div>
<div >div3</div>
<div>div4</div>
</div>
实例二
<style>
.div1 {
width: 500px;
height: 200px;
padding: 50px;
border: 5px solid red;
text-align: center;
}
.div2 {
width: 400px;
height: 100px;
padding: 50px;
border: 5px solid greenyellow;
position: relative;
}
.div3 {
width: 300px;
height: 50px;
padding: 20px;
border: 5px solid yellow;
}
p {
width: 20px;
height: 20px;
position: absolute;
top: 0px;
left: 10px;
background: green;
}
</style>
<div class="div1">
div1
<div class="div2">
div2
<div class="div3">
div3
<p>11</p>
</div>
</div>
</div>
绝对定位的特征
1.绝对定位如果不设定任何偏移值,元素位置不会有任何改变。设置偏移值之后元素原来位置会被其他元素占用(如实例一)
2.绝对定位会使得元素脱离文档流,会改变元素的性质.行内元素会变成块状元素(因为会脱离文档流,也就是脱离文档流的特性)
3.绝对定位是相对于离他最近的开启了定位的元素进行定位的,如果都没有,则相对于body进行定位(所以通常给父元素也加一个定位) 如实例二
4.绝对定位也会使得元素提升一个层级
2.4、固定定位
实例
<style>
.div1 {
width: 80px;
height: 80px;
background-color: darkorange;
position: fixed;
bottom: 100px;
right: 50px;
}
.div2 {
width: 200px;
height: 2000px;
}
</style>
<body>
<div class="div1">div1</div>
<div class="div2">div2</div>
</body>
固定定位特征
1.固定定位也是绝对定位的一种.拥有绝对定位的大部分特点
2.固定定位相对于浏览器窗口的位置进行定位.比如漂浮的客服,回到顶部.这类的按钮都是使用的固定定位
三、position层级z-index
当定位元素重叠,可通过z-index设置层叠次序。
<style>
.div1 {
width: 80px;
height: 80px;
background-color: darkorange;
position: absolute;
top: 100px;
left: 50px;
z-index: 3;
}
.div2 {
width: 80px;
height: 80px;
position: absolute;
top: 120px;
left: 50px;
background-color: yellow;
}
</style>
<body>
<div class="div1">div1</div>
<div class="div2">div2</div>
</body>
未设置 z-index属性之前 设置z-index属性之后
值得注意的是z-index属性只对定位元素有效,数值越大层级高,数值相等,以后面的设置的元素为主,数值大于零时,层级大于浮动,层级为负时小于浮动相同一层级元素,看父元素,父元素层级大,子元素层级就大。