我正在使用一个数据表我正在使用传统的表格标记,但我想要的是我的表从页面的某个地方开始,我希望我的表格标题在它开始的地方固定,并且表格主体应该通过删除其余页面来滚动高度
我在这里展示一个小例子
https://codepen.io/avreddy/pen/eyYBdB?editors=1100
我在这里展示一个小例子
https://codepen.io/avreddy/pen/eyYBdB?editors=1100
.datatable{ width: 50%; border-collapse: collapse; } td{ text-align: center; border: 1px solid; padding:5px; }
<body> <div class="somecontent"> <h4>Some Content</h4><h4>Some Content</h4><h4>Some Content</h4> </div> <table class="datatable"> <thead> <tr> <th>col1</th> <th>col2</th> <th>col3</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr><tr> <td>1</td> <td>2</td> <td>3</td> </tr> </tbody> </table> </body>
我知道我们可以从flex-Box响应表中获取它,但我的限制是我必须使用传统的表标记,所以如果告诉我是否有任何其他方式比flexBox响应表
谢谢
解决方法
可滚动表固定标题技巧不能用于自动列宽.这是因为它们更改了tbody元素的display属性,从而创建了一个具有不同列宽的新(匿名)表.
我能想到的最好的解决方案是创建表的副本(以便两者具有相同的内容,因此具有相同的列宽)并独立操作它们.
在下面的示例中,我使用jQuery创建表和可见性的副本:折叠以隐藏表头和正文:
$(function() { $("#button-1").one("click",function() { $(".datatable").clone().insertAfter(".datatable"); $(".datatable").eq(0).addClass("tablehead"); $(".datatable").eq(1).addClass("tablebody"); }); });
/* full height */ html { height: 100%; } body { height: 100%; margin: 0; padding: 0; font: medium monospace; } /* make last item scrollable and occupy available height */ #wrapper { height: 100%; display: flex; flex-direction: column; overflow-y: hidden; } #wrapper > :last-child { display: block; flex: 1; overflow-y: auto; } /* make thead and tbody collapse when JavaScript adds the classes */ .datatable.tablehead tbody { visibility: collapse; } .datatable.tablebody thead { visibility: collapse; } /* beautify */ .datatable { border-collapse: collapse; } .datatable th { border: 1px solid; background-color: #CCC; } .datatable td { border: 1px solid; padding: 5px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <!-- Notes: 1) Using a wrapper div instead of body because third party scripts often append elements to body element breaking our flex model 2) Width of second column is determined by thead > 1st row > 2nd column while width of third column is determined by tbody > 1st row > 3rd column 3) If JavaScript fails the result is still usable --> <div id="wrapper"> <div> <h4>Some Content</h4> <h4>Some Content</h4> <p><button type="button" id="button-1">Convert to fixed header</button></p> </div> <table class="datatable"> <thead> <tr> <th>col 1</th> <th>col 2 (wide header)</th> <th>col 3</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>2</td> <td>3 (wide content)</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> </tbody> </table> </div>
请注意,在所有浏览器中都无法正确实现可见性:崩溃.替代解决方案是将两个表包装在div中:固定高度div用于头表,可滚动div用于body表.但是你需要设置标题的高度.