html固定table表头的实现思路

实现步骤
1.将table放在可滚动容器中;
2.可滚动容器外层还需要一个容器,这个容器需设置超出范围隐藏和定位(相对、绝对都行);
3.利用脚本克隆一个目标table,调整克隆table的列宽与原table相同,隐藏tbody,追加到外层的容器中;
4.监听滚动容器的滚动事件,动态调整克隆table的左偏移,上偏移不需要调整,因为已经固定了。

效果演示

<html>
<head>
<style>
    .tablebox{height:300px;overflow:auto;width:100%;}
    .tableboxcontainer table td{white-space:nowrap;}
     .tableboxcontainer table thead{background:#ddd;}
    .tableboxcontainer{position:relative;width:300px;overflow:hidden;}
</style>
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="tableboxcontainer">
<div class="tablebox" id="tablebox">
    <table class="table">
        <thead>
            <tr>
                <td>列1</td><td>列2</td><td>列3</td><td>列4</td><td>列5</td>
                <td>列6</td><td>列7</td><td>列8</td><td>列9</td><td>列10</td>
            </tr>
        </thead>
        <tbody>
            
        </tbody>
    </table>
</div>
</div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
    $(function(){
        //生成表格测试数据
        var $table=$("#tablebox").find("table");
        var $tbody=$table.find("tbody");
        for(var i=0;i<20;i++){
            var $tr=$("<tr>");
            for(var j=0;j<10;j++){
                $tr.append(function(){
                    return $("<td>").text("行:"+(i+1)+"列:"+(j+1));
                });
            }
            $tr.appendTo($tbody);
        }
        //克隆原表,追加到最外层容器中
        var $table_fixed=$table.clone();
        var colwidths=[];
       //设置克隆表的列宽
        $tbody.find("tr:eq(0)").find("td").each(function(){
             var width=$(this).width()+parseFloat($(this).css("padding-left"))+parseFloat($(this).css("padding-right"));
             colwidths.push(width);
       });
          $table_fixed.find("thead td").each(function(i){
            $(this).width(colwidths[i]);
       });
        $table_fixed.css({"position":"absolute","left":0,"top":0,"table-layout":"fixed"});
        $table_fixed.find("tbody").hide();//隐藏克隆表的tbody
        $("#tablebox").parent().append($table_fixed);
        //监听原表容器的滚动事件
        $("#tablebox").bind("scroll",function(){
            var left=$(this).scrollLeft();
            $table_fixed.css({"left":-left});
        });
    });
</script>
</body>
</html>

WEB前端学习交流群21 598399936

时间: 2024-08-29 21:18:56

html固定table表头的实现思路的相关文章

固定table表头

项目中设计的报表table设计的列数相对过多,当拖动下方的滚动条时无法对应表头所对应的列,因此在网上搜索了好一段日子,最后在网上找到了一些参考资料,然后总结归纳出兼容行列合并的固定表头demo. 多浏览器没有做太多测试,但是在ie9.火狐.360浏览器中已测试通过. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

前端固定table表头方法之css和js结合实现

由于我的页面比较复杂就不贴完整代码了,这里就讲大概思路 先设置css /** 隐藏滚动条 */ ::-webkit-scrollbar { width: 8px; background-color: transparent; } table tbody { display: block; width: calc(100% + 8px); /*这里的8px是滚动条的宽度*/ /*height: 600px;*/ height: auto; overflow-y: scroll; -webkit-o

bootstrap table 实现固定悬浮table 表头并可以水平滚动

在开发项目中,需要将表格头部固定,而且表格大多数情况下是会水平滚动的.项目的css框架是bootstrap 3,故也可以叫做bootstrap table. 需要实现的是:表格头部固定,并且支持水平滚动 html code(source table): <table id="top_fix_table" border="0" cellpadding="4" cellspacing="0" class="tabl

table表头固定

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>固定表格表头</title> <meta http-equiv="X-UA-Compatible" content="IE=7

table 表头固定 thead固定. 1) 使用jquery.freezeheader.js

方法一: 使用jquery.freezeheader.js 固定表头: 1-: 初始化: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>表格table固定thead表头</title> 6 <style type="text/css"> 7 8 tab

ASP.NET 如何固定表格表头(fixed header)

[摘要]本文介绍ASP.NET 如何固定表格表头(fixed header),并提供详细的示例代码供参考. 你在HTML中渲染一张表格(可能是GridView或者Repeater),如果表格的行数太多,你就得向下拖东滚动条,但你一旦向下拖动滚动条,表头的信息就不见了.具体见下图. 向下拖动滚动条后,表头信息消失: 在本文中,我向大家讲解如何固定住表头.网上可以搜索到很多种方法来实现这个功能,但这些方法基本的原理都是一样的.就是利用div,将表头的信息复制到表身之上的一个div中. 1 <div>

使用css固定table第一列

.table{width:100%;overflow-x: scroll;background-color:#7c95b5;} .fixedTable{width:160%;text-align: center;color:#fff;font-size:14px; border-collapse:collapse;} .fixedTable tr{line-height: 30px;border:1px solid #fff;} .fixedTable tr:first-child{height

javascript: 带分组数据的Table表头排序

如下图: 要求:点击表头排序时,"分组"及"分组明细"的数据层次关系不变 从网上找了一段常规的table排序,改了改,以满足“分组支持”,贴在这里备份 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <htm

怎样固定Excel表头

许多人在打印表格时会遇到这个问题,如果数据多了,第一页有表头,翻页后就没有了,非常烦恼,那么怎么固定表头呢?其实很简单. 1.选中你要固定的表头的下面一行,例如:要固定前两行,点击第3行 2.选中后,点击"窗口"选择"冻结窗格". 3.这样就OK了,是不是很简单?快动手试试吧! 注意事项:不要选错行!记住是选中表头的下面一行来固定!,固定竖列的方法也与此类似,大家不妨尝试一下.