新闻中心

创建固定 Header 和 Footer 之间的可滚动 Overlay

2025-11-01
浏览次数:
返回列表

创建固定 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">Start 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;
}

代码解释

  1. .footer-wrapper 的 position: absolute 使其相对于其包含块(这里是 .footer,因为 .footer 设置了 position: relative)进行定位。

  2. bottom: calc(100%) 将 .footer-wrapper 的底部定位到 .footer 的顶部。这里的 100% 指的是 .footer 的高度。

    Mureka Mureka

    Mureka是昆仑万维最新推出的一款AI音乐创作工具,输入歌词即可生成完整专属歌曲。

    Mureka 1091 查看详情 Mureka
  3. max-height: calc(100vh - 100% - 58px) 计算 .footer-wrapper 的最大高度。其中:

    • 100vh 是视口的高度。
    • 100% 是 .footer 的高度。
    • 58px 是 .header 的高度加上 margin-top (38px + 20px)。
  4. 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响应式表单:实现提交后表单及按钮的禁用与只读化 

搜索