当前位置: 首页 > news >正文

前端学习3--position定位(relative+absolute+sticky)

继上一篇,做下拉菜单的时候,涉及到了position,这篇就来学习下~

先看下position在下拉菜单中的应用:

一、关键代码回顾:

/* 下拉菜单容器 */
.dropdown {position: relative; /* ➊ 关键父级 */
}/* 下拉内容(默认隐藏) */
.dropdown-content {position: absolute; /* ➋ 关键子级 */top: 100%; /* ➌ 定位到父元素底部 *//* 别的不展示了。。。 */
}

为什么呢?来分步骤分析下: 

步骤1:建立定位上下文

/* 下拉菜单容器 */
.dropdown {position: relative;    /* 创建定位基准 */display: inline-block; /* 保持容器宽度与内容一致 */
}
  • 为什么必须设置 relative?
    给内部的 absolute 元素提供一个定位的坐标系。如果不设置,下拉菜单会一直向上查找,直到 <html> 标签。

步骤2:绝对定位子元素

/* 下拉内容(默认隐藏) */
.dropdown-content {position: absolute;top: 100%; /* 从父元素顶部向下偏移100%高度 */left: 0;   /* 与父元素左对齐 */
}
  • 关键数值解析

    • top: 100%:表示「从父元素顶部开始,向下移动父元素高度的100%」

    • 如果设置 bottom: 0 会贴到父元素顶部(try try)

步骤3:处理边界情况

.dropdown-content {width: 100%; /* 与父元素同宽 */min-width: 160px; /* 防止内容过窄 */
}
  • 设计技巧:绝对定位元素默认宽度由内容决定,显式设置 width:100% 可以让下拉菜单和按钮等宽

 区别对比:

属性值特点在下拉菜单中的作用
relative元素仍占据文档流位置,但可以相对自身原始位置偏移为 absolute 子元素提供定位基准
absolute元素脱离文档流,相对于最近的非 static 祖先元素定位让下拉内容悬浮在按钮下方
static默认值,元素按正常文档流排列-

注意:

  1. relative 定位元素经常被用来作为绝对定位元素的容器块。
  2. absolute 定位使元素的位置与文档流无关,因此不占据空间。
  3. absolute 定位的元素和其他元素重叠。

 学习sticky 定位

一、先明确下新需求:

  1. 增加多几个下拉框的选项,然后做滚动条
  2. 第一个做“不吃”的选项,而且是固定的,下滑不会消失

二、HTML 结构修改

<div class="dropdown"><button class="dropdown-btn">今天吃什么?</button><div class="dropdown-content"><div class="sticky-item">不吃</div> <!-- 新增固定项 --><a href="#">火锅</a><a href="#">炸鸡</a><a href="#">麻辣烫</a><a href="#">烧烤</a><a href="#">披萨</a><a href="#">寿司</a>  <!-- 新增选项 --><a href="#">拉面</a><a href="#">咖喱</a><a href="#">沙拉</a><a href="#">牛排</a></div>
</div>

三、CSS 关键修改

1. 实现可滚动下拉框
.dropdown-content {max-height: 200px; /* 限制最大高度 */overflow-y: auto;  /* 垂直滚动 */scrollbar-width: thin; /* 更细的滚动条 */
}
2. 固定首项「不吃」
.sticky-item {position: sticky;top: 0; /* 距离顶部的距离 */z-index: 2; /* 确保粘性元素在其他内容之上 */font-weight: bold;border-bottom: 1px solid #ddd; /* 添加底部边框,视觉分隔 */background-color: #f9f9f9;
}
注意:记得把这块样式添加上去

三、关键知识点解析

1. position: sticky 的妙用
  • 特性:元素在视口内时表现为 fixed,离开视口时表现为 relative

  • 必须配合 top/bottom 等方位属性使用

  • 在下拉菜单中的应用:让“不吃”选项始终可见

2. 层级关系(z-index)
  • sticky-item 的 z-index: 2 确保它始终在滚动内容之上

  • 下拉菜单整体的 z-index: 1 确保悬浮在其他元素上方

3. 如果sticky 无效可能原因
  1. 父元素有 overflow: hidden

  2. 未设置 top/bottom 值

  3. 祖先元素高度不足

http://www.dtcms.com/a/269703.html

相关文章:

  • Android kotlin 协程的详细使用指南
  • SpringBoot校园外卖服务系统设计与实现源码
  • EXCEL链接模板无法自动链接到PowerBI?试试这个方法
  • 自动驾驶的“安全基石”:NVIDIA如何用技术守护未来出行
  • 最新 HarmonyOS API 20 知识库 重磅推出
  • 【计算机网络】王道考研笔记整理(1)计算机网络体系结构
  • 嘉立创黄山派下载watch ui demo 教程(sf32)
  • Modbus TCP转Profinet网关实现视觉相机与西门子PLC配置实例研究
  • OpenCV 图像哈希类cv::img_hash::AverageHash
  • ​扣子Coze飞书多维表插件通用参数和通用返回值
  • Mysql常用内置函数,复合查询及内外连接
  • 利用外部Postgresql及zookeeper,启动Apache Dolphinscheduler3.1.9
  • 小程序订阅消息设计:用户触达与隐私保护的平衡法则
  • STM32-定时器
  • 冷链物流配送中心选址与路径优化模型研究
  • SpringBoot基础特性:自定义Banner与Swagger文档
  • houdini云渲染和云解算新选择
  • 易境通海运系统:赋能海运企业全链路数字化运营!
  • 【Note】《Kafka: The Definitive Guide》第11章:Stream Processing
  • BERT代码简单笔记
  • C#中封装halcon函数的报错
  • 代码详细注释:C语言实现控制台用户注册登录系统
  • Google AI 刚刚开源 MCP 数据库工具箱,让 AI 代理安全高效地查询数据库
  • 前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)
  • JxBrowser 7.43.4 版本发布啦!
  • 人工智能驱动下的可再生能源气象预测:构建绿色能源时代的新大脑
  • 微服务化采集平台:可扩展性与容错机制
  • 相机Camera日志实例分析之五:相机Camx【萌拍闪光灯后置拍照】单帧流程日志详解
  • AiPy实战:问界汽车交付速度破纪录的背后是什么?
  • Vue的初步学习