En Bootstrap 4, uno debería usar la text-centerclase para alinear bloques en línea .
NOTA: si se text-align:center;define en una clase personalizada que aplique a su elemento principal, funcionará independientemente de la versión de Bootstrap que esté utilizando. Y eso es exactamente lo que se .text-centeraplica.
<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>
Si el contenido a centrar es block o flex (no inline-), se podría usar flexbox para centrarlo:
<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: centera los padres.
Nota: no use en .row.justify-content-centerlugar de .d-flex.justify-content-center, ya que .rowaplica márgenes negativos en ciertos intervalos de respuesta, lo que da como resultado barras de desplazamiento horizontales inesperadas (a menos que .rowsea un hijo directo de .container, que aplica relleno lateral para contrarrestar el margen negativo, en los intervalos de respuesta correctos). Si debe usar .row, por cualquier razón, anule su margen y relleno .m-0.p-0, en cuyo caso terminará con prácticamente los mismos estilos que .d-flex.
Nota importante: la segunda solución es problemática cuando el contenido centrado (el botón) excede el ancho del padre ( .d-flex), especialmente cuando el padre tiene ancho de ventana gráfica, específicamente porque hace que sea imposible desplazarse horizontalmente hasta el inicio del contenido (izquierda- más).
Por lo tanto, no lo use cuando el contenido que se va a centrar podría ser más ancho que el ancho principal disponible y todo el contenido debería ser accesible.