You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bootstrap5中如何让.table-responsive表格自适应父div高度且不溢出

问题描述

我使用Bootstrap 5进行开发,用带有.table-responsive类的div包裹table元素,在CSS中给.table-responsive设置height: 100%,预期它会占满父div的全部高度,但实际出现了父div溢出的问题。如果我把高度设为固定值例如300px,表格会变为响应式且出现垂直滚动条,但调整视口高度或浏览器窗口大小时无法动态适配,移动端依然会溢出。

JS动态生成表格代码示例

function populatePersonnelTable(data) {
    var directoryDiv = $("<div></div>").addClass("table-responsive").appendTo('#nav-personnel');
    var companyDirectoryPersonnel = $("<table></table>").attr("id", "companyDirectoryPersonnel").addClass("table table-striped table-hover").appendTo(directoryDiv);
    var directoryHead = $("<thead></thead>").appendTo(companyDirectoryPersonnel);
    var directoryBody = $("<tbody></tbody>").appendTo(companyDirectoryPersonnel);
    $('#companyDirectoryPersonnel tbody').empty();

    var directoryResult = data;

    $("<th></th>").text("Full Name").appendTo(directoryHead);
    $("<th></th>").text("Location").appendTo(directoryHead);
    $("<th></th>").text("Department").appendTo(directoryHead);
    $("<th></th>").text("Edit").appendTo(directoryHead);
    $("<th></th>").text("Delete").appendTo(directoryHead);

    directoryResult.forEach(function (entry){

     ... // GENERATING ROWS //

我最初是把<table>和<thead>直接写在HTML文件中,后来为了避免异常DOM错误,改为全部动态生成。

HTML文档结构参考

<body>

        <div class="container custom flex-column">

            <div class="row">
                <div class="col m-auto p-3"><h1 class="text-center">Company Directory</h1></div>
            </div>

            <div class="flex-row p-3 mb-2" id="searchAndGo">
                <div class="col flex-fill btn-group-sm">
                    <div class="input-group mb-3">
                        <input class="form-control" type="text" id="searchQuery" size="20" placeholder="Search Names">
                        <select id="locations" class="_locations">
                        </select>
                        <select id="departments" class="_departments">
                        </select>
                        <div class="float-end btn-group">
                            <button class="btn btn-success" id="startSearch" onclick="startSearch()">GO</button>
                            <button class="btn btn-danger" onclick="resetAll()">Reset</button>
                        </div>
                    </div>
                    
                    
                </div> 
                <div class="flex-row text-center">
                    <div class="dropdown" id="dropDownContainer">
                        <button class="btn btn-outline-info dropdown-toggle" type="button" id="dropdownMenu2" data-bs-toggle="dropdown" aria-expanded="false">
                            Advanced Settings
                        </button>
                        <ul class="dropdown-menu" aria-labelledby="dropdownMenu2" id="radioSelect">
                            <li><span class="dropdown-item-text">Search by:</span></li>
                            <li><span class="dropdown-item"><input class="custom-control-input" id="any" type="radio" value="any" name="name" checked><label for="any">Any</label></span></li>                           
                            <li><span class="dropdown-item"><input class="custom-control-input" id="forename" type="radio" value="forename" name="name"><label for="forename">Forename</label></span></li>                           
                            <li><span class="dropdown-item"><input class="custom-control-input" id="surname" type="radio" value="surname" name="name"><label for="surname">Surname</label></span></li>                       
                        </ul>
                    </div>
                </div>
            </div>

            <nav>
                <div class="nav nav-tabs" id="nav-tab" role="tablist">
                  <a class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" href="#nav-personnel" role="tab">Personnel</a>
                  <a class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" href="#nav-departments" role="tab">Departments</a>
                  <a class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" href="#nav-locations" role="tab">Locations</a>
                </div>
            </nav>

            <div class="tab-content container p-3" id="myTabContent">
                
                <div class="tab-pane fade show active" id="nav-personnel" role="tabpanel" aria-labelledby="personnel-tab">

                    <button id="addEntry" class="btn btn-success" onclick="openAddModal()">Add Personnel</button>

                </div>

当前使用的CSS代码

body {
    background-color: #85daf1;
    height: 100vh;
}

.custom {
    background-color: hsl(47, 100%, 93%);
    height: 100%;
}

.table-responsive {
    height: 100%;
}

效果截图

效果截图1
效果截图2

当我设置固定height如300px时的效果如下:
固定高度效果截图

.custom是浅黄色的主内容div。为什么我的响应式表格一直溢出?如果我设置overflow: hidden,内容无法访问,也不会生成滚动条。

开发者工具面板截图如下:
开发者工具截图

我也尝试过将#myTabContent的CSS高度设置为100%或者固定像素值,依然会出现溢出问题,看起来height: 100%是直接取了父div的精确像素高度,而不是自适应占满父容器高度并适配布局。


内容的提问来源于stack exchange,提问作者Ranisimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:51:00