javascript - 如何使用页面滚动修复页眉+表头和滚动表体和页脚

标签 javascript html css

我正在尝试将表头固定在顶部的页眉,并使页面的其余部分和表体随着页面滚动而移动。

我找到了一个可行的解决方案,它几乎完成了预期的工作,方法是将表头复制到固定顶部,并使一个 div 在顶部的固定 div 下方滑动,但是正文列并不总是与表头和与相同的大小。放大和缩小时效果不佳:有时两个标题都可见或重叠。

//IE 9 compatible
var header = document.getElementById("zmyHeader");
var divResults = document.getElementById("divResults");

var h = header.getBoundingClientRect().bottom - header.getBoundingClientRect().top;

var divheadertbl = document.getElementById("headerResultTblFixedDiv");
if (divheadertbl) {
  var hdivheadertbl = divheadertbl.getBoundingClientRect().bottom - divheadertbl.getBoundingClientRect().top;
  divResults.style.paddingTop = (h - hdivheadertbl - 5) + "px";
}
window.onscroll = function() {
  myFunction()
};

function myFunction() {
  var Y = document.body.scrollLeft;
  var j = Y;
  var supportPageOffset = window.pageXOffset !== undefined;
  var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat");

  var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;
  document.getElementById("zmyHeader").style.marginLeft = -x + "px";
}
.sticky {
  position: fixed;
  top: 0;
  align: center;
  width: 100%;
  background-color: #fff;
}
<div ID="zmyHeader" class="sticky">
  ...
  <div id="headerResultTblFixedDiv">
    <table id="headerResultTblFixed">
      <thead>
        <tr>
          <th>Col1Head</th>
          <th>Col2Head</th>
        </tr>
      </thead>
    </table>
  </div>
</div>
<div id="divResults" style="padding:0px;width:100%">
  <!---div resultados-->
  <table id="resultsTable" width="967" border="0" align="center" cellpadding="2" cellspacing="0" bgcolor="white">
    </tr>
    <td></td>
    </tr>
  </table>
</div>

下面是预期结果的图片: Picture of the expected result

最佳答案

试试这段代码。我没有使用 javascript。只使用了 html 和 css。我没有使用表格标题,而是使用了简单的段落标签,您也可以使用标题标签。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
    *{
        box-sizing: border-box;
    }
    header h1{      
        top: -20px;
        text-align: center;
        background-color: aquamarine;
        padding: 80px;
        position: fixed;
        min-width: 100%;
    } 
    main{
        position: fixed;
        min-width: 100%;
        clear: both;
        margin-top:-79px ;
    }
    main div {
        min-width:100%; 
        margin-left: 5px;
        margin-bottom: -150px;
    }
    main p{
        float:left;
        min-width: 33%;
        text-align: center;
        border: 1px solid ;
        padding: 20px;      
        background-color: aquamarine
    }
    footer h1{
        margin-top: 50px;
        text-align: center;
        background-color: aquamarine;
        padding: 80px;
        min-width: 100%;
    }
    section{
        clear:both;

    }
     table  {
        border: 1px solid blue;
        min-width: 100%;
         clear: both;
         margin-top: 250px;
    }
    tr td{
        border: 1px solid blue;
        padding: 10px;
    }   

    </style>
</head>

<body>
<section>
<header>
    <h1>This Is Header</h1> 
</header>

    <main>
    <div>
    <p>Header 1</p><p>Header 1</p><p>Header 1</p>
    </div>
    </main>
</section>

    <section>
        <table>
         <tr><td>Table Data 1</td><td>Table Data 2</td><td>Table Data 3</td></tr>
        <tr><td>Table Data 3</td><td>Table Data 4</td><td>Table Data 3</td></tr>
         <tr><td>Table Data 1</td><td>Table Data 2</td><td>Table Data 3</td></tr>
        <tr><td>Table Data 3</td><td>Table Data 4</td><td>Table Data 3</td></tr>
        <tr><td>Table Data 1</td><td>Table Data 2</td><td>Table Data 3</td></tr>
        <tr><td>Table Data 3</td><td>Table Data 4</td><td>Table Data 3</td></tr>
         <tr><td>Table Data 1</td><td>Table Data 2</td><td>Table Data 3</td></tr>
        <tr><td>Table Data 3</td><td>Table Data 4</td><td>Table Data 3</td></tr>

        </table>
    </section>  

    <footer>        
        <h1>This Is footer</h1> 
    </footer>

</body>
</html>

关于javascript - 如何使用页面滚动修复页眉+表头和滚动表体和页脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54258345/

相关文章:

javascript - 如何在 safari 和 chrome 的选择框(下拉框)中设置高度或填充?

javascript - 仅使用包含特定值的元素从现有数组创建新数组

html - 用瓷砖构建背景渐变

html - 边框没有回来,从 EDGE 中的元素中删除了悬停

ruby-on-rails - Rails 3.1 和样式表框架

javascript - 如何杀死页面的当前进程

javascript - 在 Dev 环境中加快 Rails 在整页加载时加载 Backbone Javascript Assets 的方法?

html - 如何修复 safari 和 chrome 上的谷歌字体像素化问题

javascript - 如何在 jquery mobile/中使用范围输入

css - 当源代码用 CSS 编写时,无法看到图像