No Bootstrap 4 deve-se usar a text-center
classe para alinhar blocos embutidos .
NOTA: text-align:center;
definido em uma classe personalizada que você aplica ao seu elemento pai, funcionará independentemente da versão do Bootstrap que você estiver usando. E é exatamente isso que .text-center
se aplica.
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<div class="container">
<div class="row">
<div class="col text-center">
<button class="btn btn-default">Centered button</button>
</div>
</div>
</div>
Se o conteúdo a ser centralizado for block ou flex (not inline-
), pode-se usar o flexbox para centralizá-lo:
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<div class="d-flex justify-content-center">
<button class="btn btn-default">Centered button</button>
</div>
... que se aplica display: flex; justify-content: center
ao pai.
Observação: não use em .row.justify-content-center
vez de .d-flex.justify-content-center
, pois .row
aplica margens negativas em determinados intervalos de resposta, o que resulta em barras de rolagem horizontais inesperadas (a menos que .row
seja filho direto de.container
, que aplica preenchimento lateral para neutralizar a margem negativa, nos intervalos de resposta corretos). Se você deve usar .row
, por qualquer motivo, substitua sua margem e preenchimento com .m-0.p-0
, nesse caso, você acabará com praticamente os mesmos estilos que.d-flex
.
Observação importante: a segunda solução é problemática quando o conteúdo centralizado (o botão) excede a largura do pai ( .d-flex
), especialmente quando o pai tem largura de janela de visualização, especificamente porque torna impossível rolar horizontalmente para o início do conteúdo (à esquerda a maioria).
Portanto, não o use quando o conteúdo a ser centralizado puder se tornar mais largo do que a largura pai disponível e todo o conteúdo estiver acessível.