新闻中心
创建固定 Header 和 Footer 之间的可滚动 Overlay

本文旨在解决如何在固定头部和底部之间创建一个可滚动的覆盖层 (Overlay) 的问题。我们将利用 CSS 的定位属性和 `calc()` 函数,实现一个高度自适应的 Overlay,使其始终位于 Header 和 Footer 之间,并且内容可以滚动,无需 J*aScript 参与。
解决方案
核心思路是利用 CSS 的 position: absolute 和 calc() 函数来计算 Overlay 的高度和位置,使其始终位于 Header 和 Footer 之间,并且内容可以滚动。
HTML 结构
HTML 结构保持不变,如下所示:
<div class="wrapper">
<div class="header">Header</div>
<div class="content">
Long middle content.....
</div>
</div>
<div class="footer">
Footer <a href="#" id="button">Click me</a>
<div class="footer-wrapper">
<div id="footer-content">S
tart of footer content
Long footer content....
</div>
</div>
</div>CSS 样式
关键在于修改 footer-wrapper 和 #footer-content 的 CSS 样式:
.footer-wrapper {
position: absolute;
bottom: calc(100%); /* 将 wrapper 的底部定位到 footer 的顶部 */
left: 0;
right: 0;
max-height: calc(100vh - 100% - 58px); /* 计算 wrapper 的最大高度 */
overflow-y: auto; /* 允许内容滚动 */
background-color: rgba(0, 0, 0, 0.5); /* 可选:添加背景色以区分 overlay */
}
#footer-content {
display: none;
background: white;
padding: 10px;
}代码解释
.footer-wrapper 的 position: absolute 使其相对于其包含块(这里是 .footer,因为 .footer 设置了 position: relative)进行定位。
bottom: calc(100%) 将 .footer-wrapper 的底部定位到 .footer 的顶部。这里的 100% 指的是 .footer 的高度。
Mureka
Mureka是昆仑万维最新推出的一款AI音乐创作工具,输入歌词即可生成完整专属歌曲。
1091
查看详情
-
max-height: calc(100vh - 100% - 58px) 计算 .footer-wrapper 的最大高度。其中:
- 100vh 是视口的高度。
- 100% 是 .footer 的高度。
- 58px 是 .header 的高度加上 margin-top (38px + 20px)。
overflow-y: auto 允许 .footer-wrapper 中的内容在垂直方向上滚动。
J*aScript (保持不变)
J*aScript 代码用于切换 #footer-content 的显示状态,不需要修改。
$(document).ready(function(){
$('#button').click( function(e) {
e.preventDefault(); // stops link from making page jump to the top
e.stopPropagation(); // when you click the button, it stops the page from seeing it as clicking the body too
$('#footer-content').toggle();
});
$('#footer-content').click( function(e) {
e.stopPropagation(); // when you click within the content area, it stops the page from seeing it as clicking the body too
});
});完整 CSS 代码示例
body { height: 600px; }
#content { background: salmon; display: none; height: 300px; width: 100%; }
html, body {
height: 100%;
margin: 0;
}
.wrapper {
height: 100%;
display: flex;
flex-direction: column;
max-height: calc(100vh - 1.5rem);
}
.header, .footer {
padding: 10px;
background: silver;
}
.header
{
margin-top: 20px;
}
.content {
overflow-y: auto;
min-height: 2.5rem;
padding: 2.5rem;
flex-grow: 1;
position: relative;
background: pink;
}
#footer-content { display: none; background: white; padding: 10px; overflow-y:auto; }
.footer-wrapper
{
position: absolute;
bottom: calc(100%); /* 将 wrapper 的底部定位到 footer 的顶部 */
left: 0;
right: 0;
max-height: calc(100vh - 100% - 58px); /* 计算 wrapper 的最大高度 */
overflow-y: auto; /* 允许内容滚动 */
background-color: rgba(0, 0, 0, 0.5); /* 可选:添加背景色以区分 overlay */
}
.footer
{
position: relative;
}注意事项
- 确保 .footer 具有 position: relative 属性,以便 .footer-wrapper 可以相对于它进行定位。
- .header 的高度和 margin-top 值需要在 max-height 的计算中正确反映,否则 Overlay 的位置可能会不正确。
- 如果 Header 的高度是动态的,那么需要使用 J*aScript 来动态计算 max-height 的值。
总结
通过使用 CSS 的 position: absolute 和 calc() 函数,我们可以创建一个位于固定 Header 和 Footer 之间的可滚动 Overlay,无需 J*aScript 参与,并且可以适应动态的 Footer 高度。这种方法简单有效,可以应用于各种 Web 开发场景。
以上就是创建固定 Header 和 Footer 之间的可滚动 Overlay的详细内容,更多请关注其它相关文章!
# 拖拽
# 中山seo网络营销推广方案
# 玩具飞镖营销推广文案
# 做谷歌网站推广
# 神马网站推广公司哪家好
# 西瓜代刷推广网站
# 抖音seo优化收费详情
# 品牌产品推广营销方案
# 江苏网站优化推广企业
# 义乌网站建设系统介绍
# 天河网络营销推广代理
# 我们可以
# 不需要
# 容器内
# css
# 背景色
# 创建一个
# 可选
# 自定义
# 使其
# 复选框
# silver
# overflow
# app
# html
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
支付宝如何设置安全保护_支付宝安全设置的全面教程
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】
理解Python模块与全局变量的作用域管理
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践
解决Tabulator日期时间排序问题的专业指南
steam官方网页快速访问 steam账号注册全流程
C++如何生成随机数_C++ random库使用方法与范围设置
Python多线程中正确使用sigwait处理SIGALRM信号
c++20的std::jthread是什么_c++可中断线程与RAII式管理
在命令行怎么运行html项目_命令行运行html项目方法【教程】
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
qq游戏大厅官方下载_qq游戏免费下载安装入口
《噬血代码2》新预告片发布 展示游戏剧情
uc浏览器网页版入口 uc浏览器网页版最新网址
Python异步编程实践:使用Binance API构建实时交易数据流
斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
邮政快递单号查询入口 邮政快递物流信息在线查询入口
Python中如何避免重复条件判断:利用数据结构实现动态逻辑
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践
铁路12306的积分有效期是多久_铁路12306积分有效期说明
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
css绝对定位元素脱离父容器怎么办_确保父元素position非static
HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全
C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
J*a里如何使用forEach遍历Map_Map遍历方法说明
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
快速CSGO开箱网站指南 CSGO开箱平台推荐
QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用
Promise错误处理:在catch后终止链式then执行的策略
ACG动漫视频网入口 ACG动漫*免费正版观看地址
J*aScript中管理异步API调用:确保操作顺序与数据一致性
Golang如何优雅处理error_Golang error处理最佳实践总结
美团外卖商家服务中心入口 美团商家版官网入口
解决Bootstrap卡片顶部边距导致背景图下移的问题
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
如何在J*a中使用Locale处理多语言环境
Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法
字由网在线版登录地址 字由网网页版安全入口
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
Angular响应式表单:实现提交后表单及按钮的禁用与只读化


2025-11-01
浏览次数:次
返回列表
tart of footer content
Long footer content....
</div>
</div>
</div>