position: relative;和position: absolute;的区别
时间: 2025-07-06 19:01:26 浏览: 15
CSS 中 `position` 属性的 `relative` 和 `absolute` 是两种常见的定位方式,它们在行为和效果上有显著的区别。
### 相对定位(`relative`)
当一个元素设置为 `position: relative;` 时,它会相对于其默认位置进行偏移。这种偏移不会影响文档流中的其他元素,也就是说,即使该元素被移动了,它原本占据的空间仍然保留[^3]。相对定位通常用于作为绝对定位子元素的参考点[^2]。
- **特点**:
- 不会使元素脱离文档流。
- 元素的位置是基于自身原来的位置进行偏移。
- 如果没有指定 `top`, `bottom`, `left`, 或 `right` 值,则相对定位对元素没有视觉上的影响。
- 可以通过 `z-index` 属性来控制层叠顺序,从而提升层级。
### 绝对定位(`absolute`)
当一个元素设置为 `position: absolute;` 时,它会被从文档流中完全移除,并且根据最近的设置了非 `static` 定位的祖先元素来定位。如果不存在这样的祖先元素,那么这个绝对定位的元素就会一直追溯到视口(浏览器窗口)来进行定位[^1]。
- **特点**:
- 使元素脱离文档流,因此不会占用原来的空间。
- 定位是基于最近的设置了非 `static` 定位的祖先元素;如果没有这样的祖先,则基于初始包含块(通常是视口)。
- 在可视区域之外可能导致滚动条出现,而相对定位则不会导致这种情况。
- 与相对定位不同的是,父级元素如果有 `padding` 属性,对于绝对定位的子元素没有任何影响。
### 示例代码
以下是一个简单的例子,展示了如何使用 `relative` 和 `absolute`:
```css
.box {
width: 200px;
border: 5px solid black;
position: relative; /* 父容器设置为relative */
}
.box > .same,
.box > .one,
.box > .two,
.box > .three {
width: 200px;
height: 200px;
margin-bottom: 20px;
text-align: center;
}
.box > .one {
background: #CCCCCC;
}
.box > .two {
background: pink;
position: absolute; /* 子元素设置为absolute */
top: 15px;
left: 50px;
}
.box > .three {
background: burlywood;
}
```
在这个例子中,`.box` 是一个设置了 `position: relative;` 的容器。`.box > .two` 是 `.box` 的直接子元素,并且被设置为了 `position: absolute;`,这样 `.two` 就会根据 `.box` 来定位,因为 `.box` 是第一个设置了非 `static` 定位的祖先元素[^2]。
### 总结
理解 `relative` 和 `absolute` 的区别对于创建复杂的网页布局至关重要。简而言之,`relative` 是让元素在其原始位置的基础上进行偏移,但保持在文档流中;而 `absolute` 则是让元素完全脱离文档流,并依据最近的定位祖先元素或视口进行定位。
阅读全文
相关推荐



















