新闻中心

创建可滚动的覆盖层,位于固定头部和底部之间

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

创建可滚动的覆盖层,位于固定头部和底部之间

本文旨在解决如何使用纯CSS创建一个可滚动的覆盖层,该覆盖层位于页面固定头部和动态高度的底部之间,且不与头部和底部重叠。我们将利用`calc()`函数和相对定位,根据视口高度、头部高度和底部高度动态计算覆盖层的最大高度,实现预期的布局效果。

实现原理

核心思想是利用CSS的calc()函数动态计算覆盖层的最大高度。具体来说,覆盖层的最大高度等于视口高度减去头部高度和底部高度。为了确保覆盖层位于底部之内,我们将使用position: relative和bottom: calc(100%)将覆盖层相对于底部定位。

具体步骤

  1. 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>

    保持与原HTML结构一致,wrapper包含header, content, footer,footer内部包含footer-wrapper,footer-wrapper内部包含footer-content。

  2. CSS样式:

    Mureka Mureka

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

    Mureka 1091 查看详情 Mureka
    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;
      position: absolute;
      bottom: calc(100%); /* 将footer-content的底部放置在footer的顶部 */
      max-height:calc(100vh - 100% - 58px); /* 视口高度 - footer高度 - header高度 */
      width: 100%; /* 确保宽度与footer一致 */
    }
    
    .footer-wrapper {
      position: relative; /* 相对于footer定位 */
    }
    
    .footer {
      position: relative;
    }

    关键在于#footer-content的样式:

    • position: absolute;:使其可以相对于父元素(.footer-wrapper)进行定位。
    • bottom: calc(100%);:将覆盖层的底部与底部的顶部对齐,利用了底部的高度作为计算的基准。
    • max-height:calc(100vh - 100% - 58px);:计算覆盖层的最大高度,100vh是视口高度,100%是底部的高度,58px是头部的高度(包含margin-top)。
    • overflow-y: auto;:允许内容滚动。
    • width: 100%;: 确保宽度与footer一致。 .footer-wrapper的position: relative;是使#footer-content可以相对于它进行绝对定位的关键。
  3. J*aScript (jQuery) 保持不变:

    $(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
    
        });
    
    });

    这段J*aScript代码负责切换覆盖层的显示和隐藏,以及阻止事件冒泡。

完整示例

<!DOCTYPE html>
<html>
<head>
  <style>
    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;
      position: absolute;
      bottom: calc(100%); /* 将footer-content的底部放置在footer的顶部 */
      max-height:calc(100vh - 100% - 58px); /* 视口高度 - footer高度 - header高度 */
      width: 100%; /* 确保宽度与footer一致 */
    }

    .footer-wrapper {
      position: relative; /* 相对于footer定位 */
    }

    .footer {
      position: relative;
    }
  </style>
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script>
    $(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

      });

    });
  </script>
</head>
<body>
  <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>
</body>
</html>

注意事项

  • 确保引入jQuery库,以便使用J*aScript代码。
  • 头部高度和底部高度的计算需要根据实际情况进行调整。
  • 如果底部高度是动态变化的,则需要考虑使用J*aScript来动态更新覆盖层的最大高度。

总结

通过结合CSS的calc()函数和相对定位,我们可以创建一个可滚动且位于固定头部和动态底部之间的覆盖层,而无需使用J*aScript来动态计算高度。这种方法简单有效,适用于各种需要类似布局的场景。

以上就是创建可滚动的覆盖层,位于固定头部和底部之间的详细内容,更多请关注其它相关文章!


# 拖拽  # 三水网站优化方案书  # 昆明网站建设公司价格  # wps企业品牌营销推广方案  # 定海区网站优化企业  # 建阳区企业seo公司  # 鼓楼行业网站建设教程  # 信息化seo优化趋势  # 网站建设投资策划  # 福建抖音seo商家推广  # 快捷酒店的营销推广  # 相关文章  # 我们可以  # 这段  # 适用于  # 容器内  # css  # 创建一个  # 自定义  # 复选框  # 相对于  # overf  # 绝对定位  # css样式  # 事件冒泡  # app  # js  # html  # jquery  # java  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: QQ官网正版登录链接 QQ在线登录入口最新  如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  服务端验证_j*ascript输入检查  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  必由学官方登录入口 必由学教师学生账号快速访问  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  Kafka Streams中基于消息头条件过滤消息的实现指南  Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量  自定义Bag-of-Words实现:处理带负号的词汇权重  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  “在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法  新三国志曹操传110级星符试炼夏侯渊极难攻略  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度  优化Log4j2控制台输出性能:解决异步日志瓶颈  Linux如何排查内存不足OOME问题_LinuxOOM分析教程  蛙漫2台版漫画地址 Manwa2正版网页版链接  神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正  网站内容防复制粘贴的实现策略与局限性  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  火锅吃太多会怎样 火锅吃太多会上火吗  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  顺丰快件物流信息 官方网站查询入口  Win11网速慢怎么解决 Win11网络设置优化解除限速  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  顺丰国际快递查询 国际件官方查询入口  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  Python Socket多播通信中指定源IP地址的实践指南  Django表单验证失败时保留用户输入数据的最佳实践  必由学官方网站入口 必由学学生教师共用登录通道  vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法  TikTok国际版官网直达_TikTok国际版官网直达进入在线观看  Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  解决Bootstrap卡片顶部边距导致背景图下移的问题  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】  58动漫网在线官方网 58动漫网正版动漫入口网址  照顾宝贝2小游戏点击立即在线玩  深入理解J*aScript Promise异步执行与微任务队列  深入理解J*a链表中的IPosition接口与使用  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  双系统安装时,如何设置默认启动系统? msconfig命令了解一下! 

搜索