如何将Bootstrap底部导航栏固定在页面底部且避免内容遮挡?
这个问题其实很常见,核心是要实现粘性页脚(Sticky Footer)——短页面时footer固定在视口底部,长页面时footer正常跟随内容下方,不会遮挡内容。不用fixed-bottom,用Bootstrap 4的flex布局就能轻松搞定,步骤如下:
1. 调整页面结构的flex布局
给<body>标签添加flex相关的类和最小高度,让整个页面成为垂直方向的flex容器:
<body class="d-flex flex-column" style="min-height: 100vh;">
d-flex:把body设为flex容器flex-column:设置flex方向为垂直(从上到下)min-height: 100vh:让body最小高度占满整个视口高度
2. 让主内容区域填充剩余空间
找到你中间的内容容器(就是那个包含Lorem ipsum的.container),给它添加flex-grow-1类,这样它会自动填充header和footer之外的所有剩余空间,把footer推到底部:
<div class="container py-5 flex-grow-1"> Lorem ipsum </div>
flex-grow-1:让这个容器在flex布局中“伸展”,占满可用空间
3. 移除footer的fixed-bottom类
把底部导航栏的fixed-bottom去掉,保持原来的样式即可,现在它会根据页面内容自动定位:
<nav class="navbar navbar-light bg-light"> <div class="container"> <a class="nav-link" href="privacy.php">سیاست حریم خصوصی</a> <p>کلیه حقوق این سایت محفوظ است.</p> </div> </nav>
修改后的完整代码
<!doctype html> <html lang="fa"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link href="css/style.css" rel="stylesheet"> <link rel="stylesheet" href="jqueryui/jquery-ui.min.css"> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> <title></title> </head> <body class="d-flex flex-column" style="min-height: 100vh;"> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <a class="navbar-brand" href="index.php"> <img src="http://getbootstrap.com/docs/4.3/assets/brand/bootstrap-solid.svg" width="30" height="30" alt=""></a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavDropdown"> <ul class="navbar-nav"> <li class="nav-item active"> <a class="nav-link" href="index.php">خانه<span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="about.php">درباره ما</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> حساب کاربری </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> <a class="dropdown-item" href="signup.php">ثبت نام</a> <a class="dropdown-item" href="login.php">ورود</a> </div> </li> </ul> </div> </nav> <div class="container py-5 flex-grow-1"> Lorem ipsum </div> <nav class="navbar navbar-light bg-light"> <div class="container"> <a class="nav-link" href="privacy.php">سیاست حریم خصوصی</a> <p>کلیه حقوق این سایت محفوظ است.</p> </div> </nav> </body> </html>
原理说明
这种方式利用了flex布局的特性:
- 整个页面作为垂直flex容器,最小高度占满视口
- 主内容区域设置
flex-grow:1,会自动填充header和footer之间的所有空白空间 - 当内容足够长时,页面会正常滚动,footer跟着内容下方;当内容较短时,footer会被“推”到视口底部,完美解决你的两个问题
内容的提问来源于stack exchange,提问作者user4271704
相关产品推荐
相关产品推荐

