Alinhamento vertical e horizontal centralizado do Bootstrap 4

163

Eu tenho uma página onde apenas o formulário existe e quero que o formulário seja colocado no centro da tela.

<div class="container">
  <div class="row justify-content-center align-items-center">
    <form>
      <div class="form-group">
        <label for="formGroupExampleInput">Example label</label>
        <input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input">
      </div>
      <div class="form-group">
        <label for="formGroupExampleInput2">Another label</label>
        <input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input">
      </div>
    </form>   
  </div>  
</div>

O justify-content-centeralinha o formulário horizontalmente, mas não consigo descobrir como alinhar verticalmente. Eu tentei usar align-items-centerealign-self-center , mas não funciona.

o que estou perdendo?

DEMO

user348173
fonte

Respostas:

322

Atualização 2019 - Bootstrap 4.3.1

Não há necessidade de CSS extra . O que já está incluído no Bootstrap funcionará. Verifique se os contêineres do formulário estão com a altura total . O Bootstrap 4 agora tem uma h-100classe para 100% de altura ...

Centro vertical:

<div class="container h-100">
  <div class="row h-100 justify-content-center align-items-center">
    <form class="col-12">
      <div class="form-group">
        <label for="formGroupExampleInput">Example label</label>
        <input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input">
      </div>
      <div class="form-group">
        <label for="formGroupExampleInput2">Another label</label>
        <input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input">
      </div>
    </form>   
  </div>
</div>

https://www.codeply.com/go/raCutAGHre

a altura do contêiner com o (s) item (s) para o centro deve ser de 100% (ou qualquer que seja a altura desejada seja relativa ao item centralizado)

Nota: Ao usar height:100%( porcentagem de altura ) em qualquer elemento, o elemento recebe a altura de seu contêiner . Nos navegadores modernos, unidades vh height:100vh;podem ser usadas em vez de% obter a altura desejada.

Portanto, você pode definir html, body {height: 100%} ou usar a nova min-vh-100classe no container em vez de h-100.


Centro horizontal:

  • text-centerpara centralizar display:inlineelementos e conteúdo da coluna
  • mx-auto para centralizar dentro de elementos flexíveis
  • offset-*ou mx-autopode ser usado para centralizar colunas ( .col-)
  • justify-content-centerpara centralizar colunas ( col-*) dentrorow

Centro de alinhamento vertical no Bootstrap 4
Formulário centralizado em tela cheia do
Bootstrap 4 Grupo de entrada central do Bootstrap 4 Grupo
Bootstrap 4 horizontal + vertical em tela cheia do centro

Zim
fonte
É permitido usar a <section>tag ou deve-se manter <div>s para centralizar o conteúdo horizontal e verticalmente na janela de exibição? Já tenho um site com páginas com seções que mudam de cor e / ou imagens de plano de fundo.
Adrian
Nenhum filho direto da linha deve ser um .col?
Miguel Stevens
7
Esta resposta está um pouco quebrada. Você declara explicitamente "NÃO É NECESSÁRIO CSS adicional", mas isso está errado. No seu exemplo de código, mostra que você deve definir body e html como 100% em CSS fora do Bootstrap 4. Sem esse CSS adicional, sua solução não funciona.
Major Major
1
Não, body e html não estão "fora". As classes CSS do Bootstrap também podem ser adicionadas a elas! codeply.com/go/5ifNMHKUEy @dawn .. o que especificamente não funcionou? Seu comentário não é útil.
Zim
Container não precisa de 100%, mas h-100 justify-content-center align-items-centerfuncionou
JMP
18

Este trabalho para mim:

<section class="h-100">
  <header class="container h-100">
    <div class="d-flex align-items-center justify-content-center h-100">
      <div class="d-flex flex-column">
        <h1 class="text align-self-center p-2">item 1</h1>
        <h4 class="text align-self-center p-2">item 2</h4>
        <button class="btn btn-danger align-self-center p-2" type="button" name="button">item 3</button>
      </div>
    </div>
  </header>
</section>
karembadawy
fonte
1
Não se esqueça de adicionar estilos css:<style type="text/css"> html, body{ height: 100%; } .full-page{ height: 100vh; width: 100vw; } </style>
pyOwner 26/08/19
15

O flexbox pode ajudá-lo. informação aqui

<div class="d-flex flex-row justify-content-center align-items-center" style="height: 100px;">
    <div class="p-2">
     1
    </div>
    <div class="p-2">
     2
    </div>
</div>
shades3002
fonte
10

Você precisa de algo para centralizar seu formulário. Mas como você não especificou uma altura para seu html e seu corpo, isso envolveria apenas o conteúdo - e não a viewport. Em outras palavras, não havia espaço onde centralizar o item.

html, body {
  height: 100%;
}
.container, .row.justify-content-center.align-items-center {
  height: 100%;
  min-height: 100%;
}
Bram Vanroy
fonte
1
Além disso, a h-100classe util pode ser usada height:100%no Bootstrap 4.
Zim
1
Aconselho agora a usar a solução do @ZimSystem porque ele não precisa de CSS personalizado e utiliza apenas as classes fornecidas pelo Bootstrap.
Bram Vanroy 18/08/19
1
@BramVanroy, como você disse, usei a solução do ZimSystem, mas não funcionou para mim. sua solução trabalhando nas atualizações da versão 4.0.0 e 4.1.0 também
Sahan Pasindu Nirmal
9

O Bootstrap possui um centro de texto para centralizar um texto. Por exemplo

<div class="container text-center">

Você altera o seguinte

<div class="row justify-content-center align-items-center">

para o seguinte

<div class="row text-center">
ciaran kehoe
fonte
7

Nenhum funcionou para mim. Mas o dele fez.

Como a classe Bootstrap 4 .row agora é exibida: flex, você pode simplesmente usar o novo utilitário flexbox align-self-center em qualquer coluna para centralizá-lo verticalmente:

<div class=”row”>
   <div class=”col-6 align-self-center>
      <div class=”card card-block>
      Center
      </div>
   </div>
   <div class=”col-6">
      <div class=”card card-inverse card-danger>
      Taller
      </div>
   </div>
</div>

Aprendi sobre isso em https://medium.com/wdstack/bootstrap-4-vertical-center-1211448a2eff

Paulo Pedroso
fonte
2

Isso está funcionando no IE 11 com o Bootstrap 4.3 . Enquanto as outras respostas não estavam funcionando no IE11 no meu caso.

 <div class="row mx-auto justify-content-center align-items-center flex-column ">
    <div class="col-6">Something </div>
</div>
Waqas Bukhary
fonte
0

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    <div class="col-12 border border-info">
          <div class="d-flex justify-content-center align-items-center" style="height: 100px">
              <a href="#" class="btn btn-dark">Transfer</a>
              <a href="#" class="btn btn-dark mr-2 ml-2">Replenish</a>
              <a href="#" class="btn btn-dark mr-3">Account Details</a>
          </div>
    </div>

Levan Jintcharadze
fonte
0

Use este código em CSS:

.container {
    width: 600px;
    height: 350px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: inline-flex;
}
Balwinder Singh Sohi
fonte
0

Acabei aqui porque estava tendo um problema com o sistema de grade do Bootstrap 4 e um loop Angular * ngFor. Corrigi-o aplicando uma classe col justify-content-center à div que implementa o ngFor:

<div class="row" style="border:1px solid red;">
  <div class="col d-flex justify-content-center">
    <button mat-raised-button>text</button>
  </div>
  <div *ngFor="let text of buttonText" class="col d-flex justify-content-center">
    <button mat-raised-button>text</button>
  </div>
</div>

que fornece o resultado: insira a descrição da imagem aqui

Fletch
fonte
0

No documento (bootsrap 4):

https://getbootstrap.com/docs/4.0/utilities/flex/#justify-content

.justify-content-start
.justify-content-end
.justify-content-center
.justify-content-between
.justify-content-around
.justify-content-sm-start
.justify-content-sm-end
.justify-content-sm-center
.justify-content-sm-between
.justify-content-sm-around
.justify-content-md-start
.justify-content-md-end
.justify-content-md-center
.justify-content-md-between
.justify-content-md-around
.justify-content-lg-start
.justify-content-lg-end
.justify-content-lg-center
.justify-content-lg-between
.justify-content-lg-around
.justify-content-xl-start
.justify-content-xl-end
.justify-content-xl-center
.justify-content-xl-between
.justify-content-xl-around
Mohamed Allal
fonte