【问题标题】:Fixed table header with responsive table not working修复了响应式表的表头不起作用
【发布时间】:2019-06-18 08:40:11
【问题描述】:

我正在尝试修复我的表格标题,一旦它向下滚动并固定在顶部位置。

我已经设法通过制作 javascript 来检测滚动位置,然后应用 css 使位置固定在顶部来修复标题

但是标题的列大小丢失了,显然它变小了。

如果有人能提供帮助,我将不胜感激?

<html>

<header>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<style>
.scroll{
   position: fixed;
   top: 0 !important;
}

#myDIV{
   background-color: #ccc;
}

header{
   height: 100px;
}

footer{
   height: 2000px;
}
</style>
</header>
<body> 
<table style="width:1900px" >
        <thead id="myDIV">
            <tr>
                <th style="width:25%"  >Column1</th>
                <th  style="width:25%" >Column2</th>
                <th  style="width:25%" >Column3</th>
                <th  style="width:25%" >Column4</th>
            </tr>
        </thead>
        <tbody >
            <tr>
                <td style="width:25%" >aaaaaaaaaaa</td>
                <td style="width:25%" >bbbbbbbbbbb</td>
                <td style="width:25%" >ccccccccccc</td>
                <td style="width:25%">ddddddddddd</td>         
            </tr>
            <tr>
                <td>aaaaaaaaaaa</td>
                <td>bbbbbbbbbbb</td>
                <td>ccccccccccc</td>
                <td>ddddddddddd</td>
            </tr>
            <tr>
                <td>aaaaaaaaaaa</td>
                <td>bbbbbbbbbbb</td>
                <td>ccccccccccc</td>
                <td>ddddddddddd</td>
            </tr>
            <tr>
                <td>aaaaaaaaaaa</td>
                <td>bbbbbbbbbbb</td>
                <td>ccccccccccc</td>
                <td>ddddddddddd</td>
            </tr>
            <tr>
                <td>aaaaaaaaaaa</td>
                <td>bbbbbbbbbbb</td>
                <td>ccccccccccc</td>
                <td>ddddddddddd</td>
            </tr>
            <tr>
                <td>aaaaaaaaaaa</td>
                <td>bbbbbbbbbbb</td>
                <td>ccccccccccc</td>
                <td>ddddddddddd</td>
            </tr>
            <tr>
                <td>aaaaaaaaaaa</td>
                <td>bbbbbbbbbbb</td>
                <td>ccccccccccc</td>
                <td>ddddddddddd</td>
            </tr>
        </tbody>
    </table>

<p id="demo" style="background-color:yellow">testest</p>
</body>
<script> 

window.onload = function(){

 document.addEventListener("scroll", myFunction);
 var i = 0;
 function myFunction() {
   document.getElementById("demo").innerHTML = "You scrolled in div." + i++;

  var lastScroll = document.getScroll();
   if(lastScroll[1] >= 100){
    document.getElementById("myDIV").classList.add('scroll');
   } else {
    document.getElementById("myDIV").classList.remove('scroll');
   }

 }

 document.getScroll = function() {
  if (window.pageYOffset != undefined) {
   return [pageXOffset, pageYOffset];
  } else {
  var sx, sy, d = document,
   r = d.documentElement,
   b = d.body;
   sx = r.scrollLeft || b.scrollLeft || 0;
   sy = r.scrollTop || b.scrollTop || 0;
  return [sx, sy];
  }

window.onload = function() {

  document.addEventListener("scroll", myFunction);
  var i = 0;

  function myFunction() {
    document.getElementById("demo").innerHTML = "You scrolled in div." + i++;

    var lastScroll = document.getScroll();
    if (lastScroll[1] >= 100) {
      document.getElementById("myDIV").classList.add('scroll');
    } else {
      document.getElementById("myDIV").classList.remove('scroll');
    }

  }

  document.getScroll = function() {
    if (window.pageYOffset != undefined) {
      return [pageXOffset, pageYOffset];
    } else {
      var sx, sy, d = document,
        r = d.documentElement,
        b = d.body;
      sx = r.scrollLeft || b.scrollLeft || 0;
      sy = r.scrollTop || b.scrollTop || 0;
      return [sx, sy];
    }

  }
}
.scroll {
  position: fixed;
  top: 0 !important;
}

#myDIV {
  background-color: #ccc;
}

header {
  height: 100px;
}

footer {
  height: 2000px;
}
<html>

<header>
</header>

<body>
  <table style="width:1900px">
    <thead id="myDIV">
      <tr>
        <th style="width:25%">Column1</th>
        <th style="width:25%">Column2</th>
        <th style="width:25%">Column3</th>
        <th style="width:25%">Column4</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td style="width:25%">aaaaaaaaaaa</td>
        <td style="width:25%">bbbbbbbbbbb</td>
        <td style="width:25%">ccccccccccc</td>
        <td style="width:25%">ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
    </tbody>
  </table>

  <p id="demo" style="background-color:yellow">testest</p>
</body>
<footer></footer>

【问题讨论】:

标签: javascript html css


【解决方案1】:

window.onload = function() {

  document.addEventListener("scroll", myFunction);
  var i = 0;

  function myFunction() {
    document.getElementById("demo").innerHTML = "You scrolled in div." + i++;

    var lastScroll = document.getScroll();
    if (lastScroll[1] >= 100) {
      document.getElementById("myDIV").classList.add('scroll');
    } else {
      document.getElementById("myDIV").classList.remove('scroll');
    }

  }

  document.getScroll = function() {
    if (window.pageYOffset != undefined) {
      return [pageXOffset, pageYOffset];
    } else {
      var sx, sy, d = document,
        r = d.documentElement,
        b = d.body;
      sx = r.scrollLeft || b.scrollLeft || 0;
      sy = r.scrollTop || b.scrollTop || 0;
      return [sx, sy];
    }

  }
}
table {
  width: 1900px;
  position: relative;
}

.scroll {
  position: fixed;
  top: 0 !important;
  width: 1900px;
}

.scroll tr {
  display: flex;
}

.scroll th {
  display: block;
  width: 100%;
  border-right: 2px solid white;
}

#myDIV {
  background-color: #ccc;
}

header {
  height: 100px;
}

footer {
  height: 2000px;
}
<html>

<header>
</header>

<body>
  <table style="">
    <thead id="myDIV">
      <tr>
        <th style="width:25%">Column1</th>
        <th style="width:25%">Column2</th>
        <th style="width:25%">Column3</th>
        <th style="width:25%">Column4</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td style="width:25%">aaaaaaaaaaa</td>
        <td style="width:25%">bbbbbbbbbbb</td>
        <td style="width:25%">ccccccccccc</td>
        <td style="width:25%">ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
    </tbody>
  </table>

  <p id="demo" style="background-color:yellow">testest</p>
</body>
<footer></footer>

【讨论】:

  • 总是很高兴解释您的解决方案,而不仅仅是发布代码。
  • 您需要为表格设置宽度,并使用block 和其他宽度选项设置display 属性。
  • display: block;th 元素 - 这是您可以解决问题的关键。
【解决方案2】:

#myDIV{
    background: #ddd;
}
#myDIV th{
    text-align: left;
}
tbody {
    display:block;
    height:100px;
    overflow:auto;
}
thead, tbody tr {
    display:table;
    width:100%;
    table-layout:fixed;
}
<html>

<header>
</header>

<body>
  <table style="width:1900px">
    <thead id="myDIV">
      <tr>
        <th style="width:25%">Column1</th>
        <th style="width:25%">Column2</th>
        <th style="width:25%">Column3</th>
        <th style="width:25%">Column4</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td style="width:25%">aaaaaaaaaaa</td>
        <td style="width:25%">bbbbbbbbbbb</td>
        <td style="width:25%">ccccccccccc</td>
        <td style="width:25%">ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td style="width:25%">aaaaaaaaaaa</td>
        <td style="width:25%">bbbbbbbbbbb</td>
        <td style="width:25%">ccccccccccc</td>
        <td style="width:25%">ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
    </tbody>
  </table>

  <p id="demo" style="background-color:yellow">testest</p>
</body>
<footer></footer>

【讨论】:

  • 请在答案中添加一些注释,而不仅仅是代码。这样对其他用户来说也更有用和更清晰。
【解决方案3】:

如果您不需要旧浏览器,您可以使用position: sticky。 sticky 是 CSS-3 中的强大属性了解 position sticky link for sticky

如果您需要旧浏览器支持,您可以使用jquery sticky table header cross browser

table thead,
table thead th {
  position: sticky;
  top: 0;
  background: #ccc;
}

header {
  height: 100px;
}

footer {
  height: 2000px;
}
<html>

<header>
</header>

<body>
  <table style="width:1900px">
    <thead>
      <tr>
        <th style="width:25%">Column1</th>
        <th style="width:25%">Column2</th>
        <th style="width:25%">Column3</th>
        <th style="width:25%">Column4</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td style="width:25%">aaaaaaaaaaa</td>
        <td style="width:25%">bbbbbbbbbbb</td>
        <td style="width:25%">ccccccccccc</td>
        <td style="width:25%">ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
      <tr>
        <td>aaaaaaaaaaa</td>
        <td>bbbbbbbbbbb</td>
        <td>ccccccccccc</td>
        <td>ddddddddddd</td>
      </tr>
    </tbody>
  </table>

  <p id="demo" style="background-color:yellow">testest</p>
</body>
<footer></footer>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2015-12-11
    • 2014-12-11
    • 2021-05-18
    • 2015-05-07
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多