如何修复Bootstrap 5侧边栏水平折叠不彻底的问题?
Bootstrap 5侧边栏无法完全折叠的解决方法
问题原因
你看到的深色空白区域,是因为bg-dark样式加在了外层的列容器上,而折叠组件只作用于容器内部的内容。点击折叠按钮时,内部内容隐藏了,但带背景色的外层列容器还留在页面上,所以会留下空白。
修复步骤
- 将
bg-dark类从外层列容器移动到折叠内容的最外层div(带min-vh-100的那个div)上,让背景色只跟随折叠内容显示/隐藏。 - 外层列容器移除固定宽度类
col-md-3 col-xl-2,只保留col-auto,这样它的宽度会完全由内部内容决定,折叠后就不会占据空间。 - 给折叠容器
collapse-horizontal添加w-100,确保内容展开时宽度铺满列容器。
修改后的完整代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> </head> <body> <div class="container-fluid"> <div class="row flex-nowrap"> <div class="col-auto px-sm-2 px-0"> <div class="collapse collapse-horizontal w-100" id="collapseWidthExample"> <div class="d-flex flex-column align-items-center align-items-sm-start px-3 pt-2 text-white min-vh-100 bg-dark"> <a href="/" class="d-flex align-items-center pb-3 mb-md-0 me-md-auto text-white text-decoration-none"> <span class="fs-5 d-none d-sm-inline">Menu</span> </a> <ul class="nav nav-pills flex-column mb-sm-auto mb-0 align-items-center align-items-sm-start" id="menu"> <li class="nav-item"> <a href="#" class="nav-link align-middle px-0"> <i class="fs-4 bi-house"></i> <span class="ms-1 d-none d-sm-inline">Home</span> </a> </li> <li> <a href="#submenu1" data-bs-toggle="collapse" class="nav-link px-0 align-middle"> <i class="fs-4 bi-speedometer2"></i> <span class="ms-1 d-none d-sm-inline">Dashboard</span> </a> <ul class="collapse show nav flex-column ms-1" id="submenu1" data-bs-parent="#menu"> <li class="w-100"> <a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Item</span> 1 </a> </li> <li> <a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Item</span> 2 </a> </li> </ul> </li> <li> <a href="#" class="nav-link px-0 align-middle"> <i class="fs-4 bi-table"></i> <span class="ms-1 d-none d-sm-inline">Orders</span></a> </li> <li> <a href="#submenu2" data-bs-toggle="collapse" class="nav-link px-0 align-middle "> <i class="fs-4 bi-bootstrap"></i> <span class="ms-1 d-none d-sm-inline">Bootstrap</span></a> <ul class="collapse nav flex-column ms-1" id="submenu2" data-bs-parent="#menu"> <li class="w-100"> <a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Item</span> 1</a> </li> <li> <a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Item</span> 2</a> </li> </ul> </li> <li> <a href="#submenu3" data-bs-toggle="collapse" class="nav-link px-0 align-middle"> <i class="fs-4 bi-grid"></i> <span class="ms-1 d-none d-sm-inline">Products</span> </a> <ul class="collapse nav flex-column ms-1" id="submenu3" data-bs-parent="#menu"> <li class="w-100"> <a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Product</span> 1</a> </li> <li> <a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Product</span> 2</a> </li> <li> <a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Product</span> 3</a> </li> <li> <a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Product</span> 4</a> </li> </ul> </li> <li> <a href="#" class="nav-link px-0 align-middle"> <i class="fs-4 bi-people"></i> <span class="ms-1 d-none d-sm-inline">Customers</span> </a> </li> </ul> <hr> <div class="dropdown pb-4"> <a href="#" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle" id="dropdownUser1" data-bs-toggle="dropdown" aria-expanded="false"> <img src="https://github.com/mdo.png" alt="hugenerd" width="30" height="30" class="rounded-circle"> <span class="d-none d-sm-inline mx-1">loser</span> </a> <ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="dropdownUser1"> <li><a class="dropdown-item" href="#">New project...</a></li> <li><a class="dropdown-item" href="#">Settings</a></li> <li><a class="dropdown-item" href="#">Profile</a></li> <li> <hr class="dropdown-divider"> </li> <li><a class="dropdown-item" href="#">Sign out</a></li> </ul> </div> </div> </div> </div> <div class="col py-3"> <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWidthExample" aria-expanded="false" aria-controls="collapseWidthExample"> Menu </button> <h3>Left Sidebar with Submenus</h3> <p class="lead"> An example 2-level sidebar with collasible menu items. The menu functions like an "accordion" where only a single menu is be open at a time. While the sidebar itself is not toggle-able, it does responsively shrink in width on smaller screens.</p> <ul class="list-unstyled"> <li><h5>Responsive</h5> shrinks in width, hides text labels and collapses to icons only on mobile</li> </ul> </div> </div> </div> </body> </html>
内容的提问来源于stack exchange,提问作者Tara Raine
相关产品推荐
相关产品推荐

