CSS 定位核心笔记:子绝父相 & 固定定位锚点
CSS 定位核心笔记:子绝父相 & 固定定位锚点
一、相对定位与绝对定位的联动(子绝父相)
1. 核心口诀
子绝父相 —— 子级用 absolute,父级用 relative,这是最稳妥的搭配。
2. 包含块(参照物)规则
- 绝对定位元素会向上寻找最近的非 static 定位(即
relative、absolute、fixed或sticky)的祖先元素作为参照物。 - 若父级设置了
position: relative,则子元素的偏移参考系就是父元素的 border-box 左上角(即包含边框 padding 和 content 的区域,偏移原点在边框外边缘)。
3. 偏移量的方向感(重点)
left: -110px→ 元素向左移动 110px(超出父级左边界)。top: -110px→ 元素向上移动 110px(超出父级上边界)。- 负值就是“反方向”,用于将元素拉出父容器范围。
4. 文档流的特性
- 绝对定位会完全脱离文档流。
- 父元素不会感知子元素的存在,父元素的高度不会被绝对定位的子元素撑开(即使子元素很大,父元素高度依然为 0 或由其他内容决定)。
5. 溢出可见性
- 子元素移动到父容器外部后,默认是可见的(会浮在其他元素上方)。
- 如果不想让超出的部分显示,可以在父级设置
overflow: hidden进行裁剪。
二、固定定位(position: fixed)与锚点返回顶部
1. 固定定位的核心特性
position: fixed让元素相对于浏览器视口(可视窗口)定位。- 无论页面滚动到哪里,它都纹丝不动地固定在屏幕的指定位置。
2. 常用悬浮按钮配置
bottom: 30px→ 距离视口底部 30px。right: 30px→ 距离视口右侧 30px。- 组合使用即可实现“右下角悬浮按钮”效果,常用于返回顶部、在线客服等。
3. 与锚点链接的配合
- HTML 中:
<a href="#top">点击后会跳转到当前页面内id="top"的元素位置。 - 实现原理:浏览器检测到
#top锚点,自动滚动到匹配该 id 的标签处。 - 如果想返回页面最顶部,只需在页面最上方放一个
id="top"的标签(如<h1 id="top">顶部</h1>或<div id="top"></div>)。
4. 脱离文档流 & 不受父级限制
fixed同样脱离文档流,不占用页面空间。- 即使把它写在某个深层的父容器内,它也不受父元素的 overflow、position 或层级影响,依然坚定地相对于视口定位。
三、两大定位方式的易错点对比(避坑指南)
| 对比维度 | 子绝父相(absolute) | 固定定位(fixed) |
|---|---|---|
| 参照物 | 最近的非 static 定位祖先(通常是父级) | 浏览器视口(viewport) |
| 滚动影响 | 跟随页面滚动(因为参考父级,父级滚它就滚) | 固定不动,无视滚动条 |
| 典型用途 | 图标叠加、自定义下拉菜单、装饰性漂浮层 | 返回顶部按钮、侧边悬浮广告、固定导航栏 |
| 布局影响 | 完全脱离文档流,父级高度塌陷 | 完全脱离文档流,不影响其他元素排列 |
| 溢出处理 | 超出的部分默认可见(除非父级加 overflow) | 超出的部分随视口裁剪(但通常不会溢出视口) |
四、补充记忆点(实战细节)
- 制造滚动条:在演示固定定位时,常给
body或某个容器设置height: 3000px或min-height: 200vh,让页面变长以出现滚动条,这样才能看出 fixed 元素“固定不动”的效果。 - 父级水平居中不影响子绝定位:父容器设置
margin: 0 auto只是让其本身水平居中,子元素的left/top偏移量依然是参照父元素的border-box左上角,计算方式不受影响。 - 锚点 id 严格区分大小写:
href="#top"必须与目标元素的id="top"完全一致(包括大小写),否则跳转失效。 - 层级覆盖问题:如果绝对定位或固定定位元素被其他元素遮挡,可以设置
z-index提高层级(需配合position使用)。
浙公网安备 33010602011771号