Bootstrap网格布局问题求助:登录页面列排版异常排查
登录页面Bootstrap布局问题排查与修复
问题描述
使用Bootstrap开发登录页面,创建了两个分别带有col-lg-5和col-lg-7类的div,计划左侧div放置图片、右侧div放置登录表单。但实际效果是,无论在何种屏幕分辨率下,col-lg-5始终显示在上方,col-lg-7始终显示在下方。
原代码如下:
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <title>Hello, world!</title> </head> <body> <section class="Form my-4 mx-5"> <div class="container"> <div class="row"> <div class="col"> <div class="col-lg-5"> <img src="./images/login2.png" alt=""> </div> <div class="col-lg-7"> <form action=""> <div class="form-row"> <div class="col-lg-7"> <input type="email" placeholder="Email-Address" class="form-control"> </div> </div> <div class="form-row"> <div class="col-lg-7"> <input type="passsword" placeholder="******" class="form-control"> </div> </div> <div class="form-row"> <div class="col-lg-7"> <button type="button" class="btn1">Login</button> </div> </div> <a href="#">Forgot Password</a> <p>Don't have a account yet? <a href="#">Register here</a></p> </form> </div> </div> </div> </div> </section> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <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://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html>
效果截图:
问题原因
Bootstrap栅格系统的核心规则是列元素(.col-*)必须直接作为.row的子元素。你在.row和目标列之间多嵌套了一层.col,这个额外的.col会占据整行宽度,内部的col-lg-5和col-lg-7会成为它的子元素,自然会上下堆叠,无法触发横向排列的逻辑。
修复方案
移除.row内部多余的.col容器,让col-lg-5和col-lg-7直接作为.row的子元素,这样栅格系统就能在大屏幕(≥992px)上自动将两列横向排列,小屏幕下则保持堆叠。
修正后的代码:
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <title>Hello, world!</title> </head> <body> <section class="Form my-4 mx-5"> <div class="container"> <div class="row"> <!-- 移除了外层多余的.col --> <div class="col-lg-5"> <img src="./images/login2.png" alt=""> </div> <div class="col-lg-7"> <form action=""> <div class="form-row"> <div class="col-lg-7"> <input type="email" placeholder="Email-Address" class="form-control"> </div> </div> <div class="form-row"> <div class="col-lg-7"> <input type="password" placeholder="******" class="form-control"> </div> </div> <div class="form-row"> <div class="col-lg-7"> <button type="button" class="btn1">Login</button> </div> </div> <a href="#">Forgot Password</a> <p>Don't have a account yet? <a href="#">Register here</a></p> </form> </div> </div> </div> </section> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <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://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html>
注:顺便修正了原代码中input的type="passsword"拼写错误,改为type="password"。
内容的提问来源于stack exchange,提问作者lakshitha dilhan
相关产品推荐
相关产品推荐

