Centro de alinhamento vertical no Bootstrap 4

322

Estou tentando centralizar meu contêiner no meio da página usando o Bootstrap 4. Até agora, não obtive êxito. Qualquer ajuda seria apreciada.

Eu o construí no Codepen.io para que vocês possam brincar com ele e me informar o que funciona como eu sou sem ideias ...

canaan seaton
fonte

Respostas:

675

Importante! O centro vertical é relativo à altura do pai

Se o pai do elemento que você está tentando centralizar não tiver altura definida , nenhuma das soluções de centralização vertical funcionará!

Agora, na centralização vertical no Bootstrap 4 ...

Você pode usar os novos utilitários flexbox e size para criar a containeraltura total e display: flex. Essas opções não requerem CSS extra (exceto que a altura do contêiner (por exemplo: html, body) deve ser 100% ).

Opção 1 align-self-centerno filho flexbox

<div class="container d-flex h-100">
    <div class="row justify-content-center align-self-center">
     I'm vertically centered
    </div>
</div>

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

Opção 2 align-items-centerno pai do flexbox ( .rowé display:flex; flex-direction:row)

<div class="container h-100">
    <div class="row align-items-center h-100">
        <div class="col-6 mx-auto">
            <div class="jumbotron">
                I'm vertically centered
            </div>
        </div>
    </div>
</div>

insira a descrição da imagem aqui

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

Opção 3 justify-content-centerno pai do flexbox ( .cardé display:flex;flex-direction:column)

<div class="container h-100">
    <div class="row align-items-center h-100">
        <div class="col-6 mx-auto">
            <div class="card h-100 border-primary justify-content-center">
                <div>
                    ...card content...
                </div>
            </div>
        </div>
    </div>
</div>

https://www.codeply.com/go/3gySSEe7nd


Mais sobre a centralização vertical do Bootstrap 4

Agora que o Bootstrap 4 oferece flexbox e outros utilitários , existem muitas abordagens para o alinhamento vertical. http://www.codeply.com/go/WG15ZWC4lf

1 - Centro vertical usando margens automáticas:

Outra maneira de centralizar verticalmente é usar my-auto. Isso centralizará o elemento dentro de seu contêiner. Por exemplo, h-100aumenta a altura da linha e my-autocentraliza verticalmente a col-sm-12coluna.

<div class="row h-100">
    <div class="col-sm-12 my-auto">
        <div class="card card-block w-25">Card</div>
    </div>
</div>

Demonstração de centro vertical usando margens automáticas

my-auto representa margens no eixo y vertical e é equivalente a:

margin-top: auto;
margin-bottom: auto;

2 - Centro vertical com Flexbox:

colunas verticais da grade central

Desde o Bootstrap 4 .row é agora, display:flexvocê pode simplesmente usar align-self-centerem 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>

ou use align-items-centerem toda a.row para alinhar verticalmente o centro col-*na linha ...

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

Demonstração de colunas de altura vertical no centro vertical

Veja este Q / A para centralizar, mas mantenha a mesma altura


3 - Centro vertical usando os utilitários de exibição:

Bootstrap 4 tem utils de visualização que podem ser utilizados para display:table, display:table-cell, display:inline, etc .. Estes podem ser usados com os utils alinhamento vertical para alinhar em linha, em linha ou bloco de elementos de célula de tabela.

<div class="row h-50">
    <div class="col-sm-12 h-100 d-table">
        <div class="card card-block d-table-cell align-middle">
            I am centered vertically
        </div>
    </div>
</div>

Centro vertical usando os utilitários de exibição demonstração dos

Mais exemplos
Imagem central vertical no <div>
centro vertical .row no .container
Centro vertical e inferior no <div>
filho do centro vertical dentro do pai pai Vertical jumbotron em
tela cheia do centro


Importante! Eu mencionei altura?

Lembre-se de que a centralização vertical é relativa à altura do elemento pai . Se você deseja centralizar a página inteira, na maioria dos casos, esse deve ser o seu CSS ...

body,html {
  height: 100%;
}

Ou use min-height: 100vh( min-vh-100no Bootstrap 4.1+) no pai / contêiner. Se você deseja centralizar um elemento filho dentro do pai. O pai deve ter uma altura definida .

Veja também:
Alinhamento vertical no bootstrap 4
Bootstrap 4 Center, alinhamento vertical e horizontal

Zim
fonte
1
Ao usar acima em uma página com uma barra de navegação, estou recebendo uma barra de rolagem. Eu acho que está adicionando 100% de altura abaixo da barra de navegação e centralizando-a. Como posso consertar isso?
Newdimension
Estou tentando alinhar várias linhas para centralizar com caixa flexível. Eu quero alinhar todos os botões no centro. codeply.com/go/5abdqC33cU
Coder
Eu preparei um codepen mostrando atualmente três maneiras de centralizar com base nas formas mostradas aqui: codepen.io/yigith/pen/oNjmGEL
KodFun
23

você pode alinhar verticalmente seu contêiner, flexionando o contêiner pai e adicionando align-items:center:

body {
  display:flex;
  align-items:center;
}

Caneta atualizada

Pete
fonte
1
ohhh lol, eu perdi o link na descrição ... você também adicionou html, body {height:100%}... adicionando isso fez funcionar! Obrigado!
Canaan Seaton
1
sua resposta does not resolver o problema da maneira perguntou (usando inicialização)
AlexNikonov
1
Não concordo totalmente com você, você propõe uma solução alternativa, apesar da pergunta ser sobre como fazê-lo com as classes do Bootstrap.
AlexNikonov 14/06/19
@AlexNikonov em nenhum lugar da pergunta do OP, eles dizem que estão limitados a usar apenas o bootstrap - essa é uma alternativa para outras pessoas que podem acessar esta página procurando alinhar verticalmente as coisas sem o uso de classes de bootstrap. Apenas siga em frente - há muitas outras respostas aqui para você usar. Não vejo por que você está se preocupando com isso - este é um fórum para todas as idéias que ajudarão - não apenas para respostas simples. É usuários como você estragar este site por downvoting respostas que oferecem uma solução para o problema, mas só porque você não gosta
Pete
@AlexNikonov também se você ler o post não editada original (quando eu adicionei a minha resposta), você também vai ver OP estava tentando centro sem o uso de classes de bootstrap-lo no momento de responder, isto era correto
Pete
23

Após o bootstrap, 4 classes me ajudaram a resolver isso

<div class="col text-center justify-content-center align-self-center">
    <img width=3rem src=".." alt="...">
</div>
Manoj
fonte
1
Isso não centralizou minha div verticalmente.
madrugada
Você pode elaborar seu código css. compartilhar um trecho dele, gostaria de analisar o problema que você está enfrentando.
Manoj
12

Como nenhuma das opções acima funcionou para mim, estou adicionando outra resposta.

Objetivo: alinhar vertical e horizontalmente uma div em uma página usando as 4 classes flexbox de autoinicialização.

Etapa 1: defina sua div mais externa para uma altura de 100vh. Isso define a altura para 100% da altura do Veiwport. Se você não fizer isso, nada mais funcionará. A configuração para uma altura de 100%é apenas relativa ao pai, portanto, se o pai não tiver a altura total da janela de visualização, nada funcionará. No exemplo abaixo, defino o corpo como 100vh.

Etapa 2: defina o contêiner div como o contêiner flexbox da d-flexclasse

Etapa 3: centralize a div horizontalmente com a justify-content-centerturma.

Etapa 4: centralize a div verticalmente com o align-items-center

Etapa 5: execute a página, visualize sua div centralizada na vertical e na horizontal.

Observe que não há classe especial que precise ser definida no próprio div centralizado (o div filho)

<body style="background-color:#f2f2f2; height:100vh;">

<div class="h-100 d-flex justify-content-center align-items-center">
    <div style="height:600px; background-color:white; width:600px;">
</div>

</div>

</body>
Greg Gum
fonte
@AjayKumar, gostaria de compartilhar suas modificações?
Greg Gum
Obrigado, especialmente o 100vhtruque me ajudou muito. O Bootstrap também fornece a vh-100classe para isso.
Svens
10
.jumbotron {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}
Nate Beers
fonte
5

Eu tentei todas as respostas aqui, mas descobri aqui a diferença entre h-100 e vh-100 Aqui está minha solução:

      <div className='container vh-100 d-flex align-items-center col justify-content-center'>
        <div className="">
             ...
        </div>
      </div >
AlexNikonov
fonte
4

No Bootstrap 4 (beta), use align-middle. Consulte a documentação do Bootstrap 4 sobre alinhamento vertical :

Altere o alinhamento dos elementos com os utilitários de alinhamento vertical . Por favor note que vertical-align afeta apenas em linha , inline-block , inline-table , e de célula de tabela elementos.

Escolha a partir de .align-baseline, .align-top, .align-middle, .align-bottom, .align-text-bottom, e .align-text-top, conforme necessário.

vallismortis
fonte
4
<div class="col-lg-5 col-sm-5 offset-1 d-flex">
            <div class="offer-txt justify-content-center align-self-center">
                <span class="inner-title">Our Offer</span>
                <h2 class="section-title">Today’s Special </h2>
                <p>One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into vermin. He lay on his armour-like back, and if he lifted his head a little he could see his brown belly.</p>
            </div>
        </div>

insira a descrição da imagem aqui

Tariqul_Islam
fonte
suas fotos me fez thik o stackoverflow começou as advs: D
AlexNikonov
4
<div class="row">
  <div class="col-md-6">
     <img src="/assets/images/ebook2.png" alt="" class="img-fluid">
  </div>
  <div class="col-md-6 my-auto">
     <h3>Heading</h3>
     <p>Some text.</p>
   </div>
</div>

Nesta linha é onde a mágica acontece <div class="col-md-6 my-auto">, o my-autocentro será o conteúdo da coluna. Isso funciona muito bem em situações como o exemplo de código acima, em que você pode ter uma imagem de tamanho variável e precisa ter o texto na coluna na linha correta.

Roubar
fonte
3

Fiz dessa maneira com o Bootstrap 4.3.1:

<div class="d-flex vh-100">
  <div class="d-flex w-100 justify-content-center align-self-center">
    I'm in the middle
  </div>
</div>
webjay
fonte
2
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
</head>
<body>  
<div class="container">
    <div class="row align-items-center justify-content-center" style="height:100vh;">     
         <div>Center Div Here</div>
    </div>
</div>
</body>
</html>
Anu
fonte
@AjayKumar Adicionar a flex-grow-1classe ao cartão impede que ele encolha .
Fred
1

Alinhamento vertical Usando este bootstrap 4 classes:

pai: d-table

E

filho: d-table-cell & align-middle & text-center

por exemplo:

<div class="tab-icon-holder d-table bg-light">
   <div class="d-table-cell align-middle text-center">
     <img src="assets/images/devices/Xl.png" height="30rem">
   </div>
</div>

e se você quiser que o pai seja um círculo:

<div class="tab-icon-holder d-table bg-light rounded-circle">
   <div class="d-table-cell align-middle text-center">
     <img src="assets/images/devices/Xl.png" height="30rem">
   </div>
</div>

quais são as duas classes CSS personalizadas:

.tab-icon-holder {
  width: 3.5rem;
  height: 3.5rem;
 }
.rounded-circle {
  border-radius: 50% !important
}

O uso final pode ser como, por exemplo:

<div class="col-md-5 mx-auto text-center">
    <div class="d-flex justify-content-around">
     <div class="tab-icon-holder d-table bg-light rounded-circle">
       <div class="d-table-cell align-middle text-center">
         <img src="assets/images/devices/Xl.png" height="30rem">
       </div>
     </div>

     <div class="tab-icon-holder d-table bg-light rounded-circle">
       <div class="d-table-cell align-middle text-center">
         <img src="assets/images/devices/Lg.png" height="30rem">
       </div>
     </div>

     ...

    </div>
</div>
Jafar Amini
fonte
0

Coloque o seu conteúdo em um contêiner flexbox 100% alto, ou seja, h-100. Justifique o conteúdo centralmente usando a classe justify-content-center .

<section class="container h-100 d-flex justify-content-center">
    <div class="jumbotron my-auto">
        <h1 class="display-3">Hello, Malawi!</h1>
    </div>
</section>
Mwiza
fonte
-1

.my-autoclasse css use (bootsrap4) em yor div

Preshan Pradeepa
fonte
-2

No Bootstrap 4.1.3:

Isso funcionou para mim quando eu estava tentando centralizar um crachá de inicialização dentro de um container > row > columnpróximo a um h1título.

O que funcionou foi um css simples:

.my-valign-center {
  vertical-align: 50%;
}

ou

<span class="badge badge-pill" style="vertical-align: 50%;">My Badge</span>
phyatt
fonte