前端编程 课程十九、:CSS布局三

定位布局(Position)------ 精准控制元素位置

第一节:定位布局的核心逻辑

1.1 定位的本质

  • 定义 :position属性让元素脱离文档流(或部分脱离),相对于"参考点"精准定位;
  • 定位布局(Position)------ 精准控制元素位置核心要素

✅ 定位模式(position取值):决定参考点;

✅ 偏移属性(top/right/bottom/left):决定元素相对于参考点的位置;

✅ z-index:决定元素的层叠顺序(仅对定位元素生效)。

1.2 定位模式对比表(核心重点)

|--------------|-----------------|-----------|--------|------------------|
| 定位模式 | 参考点 | 是否脱离文档流 | 偏移属性生效 | 应用场景 |
| static(默认) | 无(文档流) | 否 | 否 | 正常布局,无特殊定位需求 |
| relative(相对) | 自身原始位置 | 否(保留原空间) | 是 | 微调元素位置、作为绝对定位的容器 |
| absolute(绝对) | 最近的已定位祖先元素 | 是(不占原空间) | 是 | 弹窗、下拉菜单、精确定位组件 |
| fixed(固定) | 浏览器视口(viewport) | 是(不占原空间) | 是 | 固定导航、回到顶部按钮、悬浮广告 |
| sticky(粘性) | 视口+自身原始位置 | 滚动前否,滚动后是 | 是 | 吸顶导航、侧边栏目录 |

第二节:5种定位模式实战

2.1 相对定位(relative)------ "微调神器"

  • 核心特点

✅ 参考点:元素自己在文档流中的原始位置;

✅ 偏移后仍保留原始空间,不影响其他元素;

  • 实操练习3:按钮hover时向右上偏移2px(交互优化)

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <button class="btn">提交按钮</button> <style> .btn { padding: 8px 20px; border: none; background-color: #2196f3; color: #fff; border-radius: 4px; cursor: pointer; position: relative; /* 相对定位 */ transition: all 0.2s ease; } .btn:hover { top: -2px; /* 向上偏移2px */ left: 2px; /* 向右偏移2px */ box-shadow: 0 2px 8px rgba(0,0,0,0.2); } </style> |

2.2 绝对定位(absolute)------ "精准定位核心"

  • 核心规则

✅ 必须配合"已定位的父元素"使用(父元素设为relative),即"父相子绝";

✅ 脱离文档流,不占据原始空间;

  • 实操练习4:弹窗居中(经典场景)

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <div class="modal-mask"> <!-- 遮罩层 --> <div class="modal-content"> <h3>弹窗标题</h3> <p>这是弹窗内容,基于绝对定位实现居中</p> </div> </div> <style> .modal-mask { position: fixed; /* 遮罩层固定全屏 */ top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); display: flex; /* 也可不用flex,用absolute居中 */ align-items: center; justify-content: center; } .modal-content { position: relative; /* 可选,为子元素定位做准备 */ width: 400px; padding: 20px; background-color: #fff; border-radius: 8px; /* 若不用flex,用以下代码居中: position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); */ } </style> |

2.3 固定定位(fixed)------ "视口绑定"

  • 核心特点:参考点是浏览器视口,页面滚动时位置不变;
  • 实操练习5:回到顶部按钮

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <a href="#" class="back-to-top">↑</a> <div class="long-content"> <!-- 重复多行文本,模拟长页面 --> <p>页面内容...</p><p>页面内容...</p><p>页面内容...</p> <p>页面内容...</p><p>页面内容...</p><p>页面内容...</p> </div> <style> .back-to-top { position: fixed; /* 固定定位 */ bottom: 30px; /* 距离视口底部30px */ right: 30px; /* 距离视口右侧30px */ width: 40px; height: 40px; line-height: 40px; text-align: center; background-color: #2196f3; color: #fff; border-radius: 50%; text-decoration: none; box-shadow: 0 2px 8px rgba(0,0,0,0.2); } .long-content { height: 2000px; /* 模拟长页面 */ } </style> |

性定位(sticky)------ "滚动吸顶"

  • 核心特点:滚动前遵循文档流,滚动到指定位置后变为固定定位;
  • 实操练习6:吸顶导航栏

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <div class="header">页面头部</div> <nav class="sticky-nav"> <a href="#">首页</a> <a href="#">课程</a> <a href="#">关于</a> </nav> <div class="content"> <p>滚动页面,导航栏会吸顶...</p> <!-- 重复多行文本 --> </div> <style> .header { height: 100px; background-color: #e3f2fd; line-height: 100px; text-align: center; } .sticky-nav { position: sticky; /* 粘性定位 */ top: 0; /* 滚动到顶部时固定 */ background-color: #2196f3; padding: 10px 0; text-align: center; z-index: 999; /* 防止被遮挡 */ } .sticky-nav a { color: #fff; margin: 0 10px; text-decoration: none; } .content { height: 1500px; padding: 20px; } </style> |

第二节:定位布局的层叠顺序(z-index)

  • 核心规则

✅ 仅对定位元素(relative/absolute/fixed/sticky)生效;

✅ 值越大,元素越在顶层(默认auto,等价于0);

✅ 同层级下,后渲染的元素覆盖先渲染的;

  • 实操练习7:解决弹窗被遮罩层遮挡的问题

|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| CSS .modal-mask { z-index: 1000; } /* 遮罩层层级 */ .modal-content { z-index: 1001; } /* 弹窗层级更高 */ .back-to-top { z-index: 999; } /* 回到顶部按钮层级更低 */ |

第三节:课堂练习与答疑

  1. 用"父相子绝"实现商品卡片的"新品标签"(右上角角标);
  2. 用fixed实现顶部固定导航栏,下方内容不被遮挡;
  3. 答疑:解决"绝对定位元素偏移异常""z-index不生效"等问题。
相关推荐
RFCEO2 天前
三种美观实用的前端网页排版方式(含文字介绍+参数配置)
前端编程·html排版·栅格(grid)排版·弹性盒(flex)排版·流式排版·css怎样排版·javascript排版技巧
RFCEO2 天前
前端进阶 课程二十二、:CSS核心进阶一
前端进阶·css基础课·进阶选择器的灵活用法·深入理解优先级权重计算规则·攻克样式冲突问题·学习选择器性能优化技巧
RFCEO3 天前
前端编程 课程二十、:CSS布局四
css基础课·前端编程学习·弹性盒模型·一维布局首选·现代布局·垂直居中需要复杂的计算·元素无法自动均分剩余空间
军军君011 个月前
Three.js基础功能学习八:数学库与插值
前端·javascript·3d·前端框架·three·三维·前端编程