文章目录
定位 position 属性
position 属性规定应用于元素的定位方法的类型。
有五个不同的位置值:
- static
- relative
- fixed
- absolute
- sticky
元素其实是使用 top、bottom、left 和 right 属性定位的。但是,除非首先设置了 position 属性,否则这些属性将不起作用。根 据不同的 position 值,它们的工作方式也不同。
position: static;
HTML 元素默认情况下的定位方式为 static(静态)。
静态定位的元素不受 top、bottom、left 和 right 属性的影响。
position: static; 的元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位。
实例:
<style>
.div1 {
width: 400px;
height: 50px;
position: static;
top: 100px;
left: 200px;
background-color: aqua;
border: 2px solid red;
}
</style>
</head>
<body>
<div class="div1">使用position: static进行定位</div>
</body>
效果:
如下图显示当我们使用静态定位时,是根据文档流进行排列。在添加 top、left等方位时是不会出现效果。
我们在打开开发人员工具也可以看到箭头标识上显示没有生效的提示。
position: fixed;
position: fixed; 的元素是相对于视口定位的,这意味着即使滚动页面,它也始终位于同一位置。 top、right、bottom 和 left 属性用于定位此元素。
固定定位的元素不会在页面中通常应放置的位置上留出空隙。
实例:
<style>
/* 静态定位 */
.div1 {
width: 400px;
height: 50px;
position: static;
top: 100px;
left: 200px;
background-color: aqua;
border: 2px solid red;
}
/* 视口定位 */
.div2 {
position: fixed;
bottom: 100px;
right: 100px;
width: 200px;
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<div class="div1">使用position: static进行定位</div>
<div class="div2">使用使用position: static进行定位</div>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
<h1>1644</h1>
效果:
因为当前元素无法撑开页面,在里面插入h1标签撑开窗口。如下图一显示,观察当在浏览器最顶部时视口定位的粉色盒子的位置。当我们进行滚动窗口时内容会发生改变,但是粉色盒子不会受到影响
第二张图片:
position: relative;
相对定位position: relative; 的元素相对于其正常位置进行定位。设置相对定位的元素的 top、right、bottom 和 left 属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素 留下的任何空间。
代码:
style>
/* 静态定位 */
.div1 {
width: 400px;
height: 50px;
position: static;
top: 100px;
left: 200px;
background-color: aqua;
border: 2px solid red;
}
/* 视口定位 */
.div2 {
position: fixed;
bottom: 100px;
right: 100px;
width: 200px;
height: 200px;
background-color: pink;
}
/* 相对定位 */
.div3,
.div4 {
position: relative;
height: 100px;
border: 2px solid blue;
}
.div3 {
top: -20px;
left: 10px;
}
</style>
</head>
<body>
<div class="div1">使用position: static进行定位</div>
<div class="div2">使用position: static进行定位</div>
<div class="div3">使用position: relative;进行定位</div>
<div class="div4">测试</div>
</body>
效果:相对定位相对的是它原本在文档流中的位置而进行的偏移,而我们也知道relative定位也是遵循正常的文档流,它没有脱离文档流,但是它的top/left/right/bottom属性是生效的,可以说它是static到absoult的一个中间过渡属性,最重要的是它还占有文档空间,而且占据的文档空间不会随 top / right / left / bottom 等属性的偏移而发生变动
position: absolute;
绝对定位是元素以带有定位的父级元素来移动位置
-
完全脱标 —— 完全不占位置;
-
父元素没有定位,则以浏览器为准定位(body)。
-
父元素要有定位
将元素依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。绝对定位的特点:
- 绝对是以带有定位的父级元素来移动位置 如果父级都没有定位,则以浏览器文档为准移动位置
- 不保留原来的位置,完全是脱标的。
定位口诀 —— 子绝父相
子绝父相 —— 子级是绝对定位,父级要用相对定位。
代码:
<style>
/* 静态定位 */
.div1 {
width: 400px;
height: 50px;
position: static;
top: 100px;
left: 200px;
background-color: aqua;
border: 2px solid red;
}
/* 视口定位 */
.div2 {
position: fixed;
bottom: 100px;
right: 100px;
width: 200px;
height: 200px;
background-color: pink;
}
/* 相对定位 */
/* .div3,
.div4 {
position: relative;
height: 100px;
border: 2px solid blue;
}
.div3 {
top: -20px;
left: 10px;
} */
/* 父元素相对定位 */
.div5 {
position: relative;
height: 400px;
background-color: pink;
}
/* 子元素绝对定位 */
.div6 {
position: absolute;
width: 400px;
height: 200px;
top: 100px;
left: 300px;
background-color: red;
}
</style>
</head>
<body>
<div class="div1">使用position: static进行定位</div>
<div class="div2">使用position: static进行定位</div>
<!-- <div class="div3">使用position: relative;进行定位</div> -->
<!-- <div class="div4">测试</div> -->
<div class="div5">父元素相对定位
<div class="div6">子元素绝对定位</div>
</div>
</body>
效果:
position: sticky;
position: sticky; 的元素根据用户的滚动位置进行定位。 粘性元素根据滚动位置在相对(relative)和固定(fixed)之间切换。起先它会被相对定位,直到在视口中遇到给定的偏移位置为 止,然后将其“粘贴”在适当的位置。
代码:
<style>
/* 静态定位 */
.div1 {
width: 400px;
height: 50px;
position: static;
top: 100px;
left: 200px;
background-color: aqua;
border: 2px solid red;
}
/* 视口定位 */
.div2 {
position: fixed;
bottom: 100px;
right: 100px;
width: 200px;
height: 200px;
background-color: pink;
}
/* 相对定位 */
/* .div3,
.div4 {
position: relative;
height: 100px;
border: 2px solid blue;
}
.div3 {
top: -20px;
left: 10px;
} */
/* 父元素相对定位 */
.div5 {
position: relative;
height: 400px;
background-color: pink;
}
/* 子元素绝对定位 */
.div6 {
position: absolute;
width: 400px;
height: 200px;
top: 100px;
left: 300px;
background-color: red;
}
.div7 {
position: -webkit-sticky;
position: sticky;
height: 100px;
top: 50px;
background-color: green;
}
</style>
</head>
<body>
<div class="div1">使用position: static进行定位</div>
<div class="div2">使用position: static进行定位</div>
<!-- <div class="div3">使用position: relative;进行定位</div> -->
<!-- <div class="div4">测试</div> -->
<div class="div5">父元素相对定位
<div class="div6">子元素绝对定位</div>
</div>
<div class="div7">粘性定位</div>
当图片达到设定top时会从静态定位转为固定定位,如下图显示