在Bootstrap 4中垂直对齐项目时遇到问题

时间:2019-05-14 00:42:18

标签: html css bootstrap-4

我知道这是一个有很多线程的问题,但是在尝试了一些建议的答案之后,我却没有这么幸运。

我对编程并不陌生,但是对CSS和HTML还是陌生的。

当前,我正在尝试为我的个人Web应用程序创建一个基本的“登录页面”。

GitHub:https://github.com/n-winspear/cashflow-webapp

通过阅读这里的其他主题,我尝试了:
-为列,行和容器增加高度。
-更改容器类型
-使用许多不同的类(中心文本,对齐内容中心,对齐自我中心,对齐项中心)
-更改表单类型
-直接从URL而不是本地文件加载CSS

<div class="container-fluid">
    <div class="form-row align-items-center">
        <div class="col-sm-4 offset-sm-4">
        <form class="form-signin">
            <div class="form-group">
            <label for="exampleInputEmail1">Email address</label>
            <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
            <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
        </div>
                <div class="form-group">
            <label for="exampleInputPassword1">Password</label>
            <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
        </div>
        <button type="submit" class="btn btn-primary">Submit</button> 
        </form>
    </div>
    </div>
</div>

我希望获得的表单位于网页的中间,但始终停留在顶部。

这是我目前得到的 what it looks like

2 个答案:

答案 0 :(得分:0)

您可以使用绝对位置技巧使div垂直居中,也可以在主体容器和VH单元上使用Flex。在这种情况下,我会选择绝对位置。

绝对:

.container-fluid {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

弹性体:

body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

答案 1 :(得分:0)

我克隆了您的项目并对其进行了一些修改,并且效果很好,所以您必须做的是:

  1. 在css文件夹中创建一个style.css文件(更简洁的代码)
  2. 在html中添加到新样式表的链接,并在容器中添加一个ID,以便您可以识别它(以防以后要添加其他容器,则需要添加ID),因此您最终的html代码将如下所示:

    <!-- Bootstrap CSS -->
        <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.css">
        <link rel="stylesheet" type"text/css" href="bootstrap/css/styles.css">
    
        <title>Cashflow Web App</title>
    </head>
    <body>
        <div class="container-fluid" id="main-block">
            <div class="form-row align-items-center">
                <div class="col-sm-4 offset-sm-4">
                    <form class="form-signin">
                        <div class="form-group">
                            <label for="exampleInputEmail1">Email address</label>
                            <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
                            <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
                        </div>
                        <div class="form-group">
                            <label for="exampleInputPassword1">Password</label>
                            <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
                        </div>
                        <button type="submit" class="btn btn-primary">Submit</button> 
                    </form>
                </div>
             </div>
        </div>
    
        <!-- JavaScript -->
        <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>
    </body>
    
  3. 在style.css文件中,使用display:table和display:table-cell,只需编写以下代码:

    body{
      height: 100%;
    }
    #main-block{
       height: 100%;
       display: table;
    }
    
    .align-items-center{
       display: table-cell;
       vertical-align: middle;
    }
    

这是我添加这些修改后的样子,希望对您有帮助。enter image description here

如果您认为不合适,请随时问其他任何问题。