¿Cómo centrar un botón dentro de un div?


220

Tengo un div cuyo ancho es del 100%.

Me gustaría centrar un botón dentro de él, ¿cómo podría hacer esto?

<div style="width:100%; height:100%; border: 1px solid">
  <button type="button">hello</button>
</div>


¿Cuál es el código que está utilizando para el botón?
David Nguyen

2
Sospecho que quiere un centrado vertical y horizontal. Ninguna de las soluciones hasta ahora logra esto. CSS no es muy bueno en el centrado vertical = (.
mrtsherman

permítanme decir que flexbox hace que esta respuesta sea inútil para 2014. ¡sí bebé!
foreyez

Respuestas:


352

Respuesta actualizada

Actualizando porque noté que es una respuesta activa, sin embargo, Flexbox sería el enfoque correcto ahora.

Demo en vivo

Alineamiento vertical y horizontal.

#wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
}

Solo horizontal (siempre que el eje flexible principal sea horizontal, que es el valor predeterminado)

#wrapper {
  display: flex;
  justify-content: center;
}

Respuesta original usando un ancho fijo y sin flexbox

Si el póster original desea una alineación vertical y central, es bastante fácil para el ancho y la altura fijos del botón, intente lo siguiente

Demo en vivo

CSS

button{
    height:20px; 
    width:100px; 
    margin: -20px -50px; 
    position:relative;
    top:50%; 
    left:50%;
}

solo para alineación horizontal use

button{
    margin: 0 auto;
}

o

div{
    text-align:center;
}

21
-1 esto es horrible. Básicamente, establece el ancho al 100% y luego el margen a -50. Pero esto causa otros problemas, como que el botón se eleva por encima del elemento contenedor y no funciona bien con el cambio de tamaño.
CodyBugstein

3
Hola, gracias por al menos explicar tu voto negativo @Imray, también ten en cuenta que dije ancho y altura fijos , no variable. Por lo tanto, cambiar el tamaño no es un factor. "Básicamente" establecí el ancho en 100 px , no 100%, y el margen en -50 px, que es la mitad. Este ha sido un método bastante estándar para centrar. Aunque espero su respuesta :)
Loktar

1
Sus welcs (perdón por la dureza, me alegro de que tenga sentido del humor) quise decir 100px. No me di cuenta de que escribiste "arreglado", pero aun así creo que esta respuesta no será buena en la mayoría de las situaciones
CodyBugstein

109

Podrías simplemente hacer:

<div style="text-align: center; border: 1px solid">
  <input type="button" value="button">
</div>

O podrías hacerlo así:

<div style="border: 1px solid">
  <input type="button" value="button" style="display: block; margin: 0 auto;">
</div>

El primero centrará alineará todo dentro del div. El otro centrará alinear solo el botón.


28

et voila:

button {
  width: 100px; // whatever your button's width
  margin: 0 auto; // auto left/right margins
  display: block;
}

Actualización : si OP está buscando un centro horizontal y vertical, esta respuesta lo hará para un elemento de ancho / altura fijo.


11
También puede necesitar "display: block;"
SoluableNonagon

1
@SoluableNonagon ¡Eso es! "display: block" hace el truco con "margin: 0 auto"
Tomas Lukac

8

Margen: 0 automático; es la respuesta correcta solo para el centrado horizontal. Para centrar en ambos sentidos, algo como esto funcionará, usando jquery:

var cenBtn = function() {
   var W = $(window).width();
   var H = $(window).height();
   var BtnW = insert button width;
   var BtnH = insert button height;
   var LeftOff = (W / 2) - (BtnW / 2);
   var TopOff = (H / 2) - (BtnH /2);
       $("#buttonID").css({left: LeftOff, top: TopOff});
};

$(window).bind("load, resize", cenBtn);

Actualización ... cinco años después , uno podría usar flexbox en el elemento DIV principal para centrar fácilmente el botón tanto horizontal como verticalmente.

Incluidos todos los prefijos del navegador, para un mejor soporte

div {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-box-align : center;
  -moz-box-align    : center;
  -ms-flex-align    : center;
  -webkit-align-items : center;
  align-items : center ;
  justify-content : center;
  -webkit-justify-content : center;
  -webkit-box-pack : center;
  -moz-box-pack : center;
  -ms-flex-pack : center;
}


2
jQuery? ¿Seriamente?
Pranesh Ravi

3
@PraneshRavi: en 2011 no había muchas opciones disponibles en CSS para centrar algo verticalmente, por lo que sí, JavaScript no era raro si no conocía la altura y el ancho exactos de un elemento, y podía restar los márgenes.
adeneo

Siempre puede usar flex para centrar un elemento tanto vertical como horizontalmente.
Pranesh Ravi

66
@PraneshRavi: sí, flexbox es una gran respuesta a esta pregunta, y lo agregaré, pero en 2011 no había flexbox.
adeneo

@JGallardo - Creo que te perdiste la parte en la que las otras respuestas están tratando de centrar el botón no solo horizontalmente, sino también verticalmente, y que hace 9 años no había realmente ninguna buena opción para hacerlo solo con CSS
adeneo


7

Usando flexbox

.Center {
  display: flex;
  align-items: center;
  justify-content: center;
}

Y luego agregando la clase a su botón.

<button class="Center">Demo</button> 

6

Deberías tomarlo simple aquí:

Primero tiene la posición inicial de su texto o botón:

<div style="background-color:green; height:200px; width:400px; margin:0 0 0 35%;">
   <h2> Simple Text </h2>
      <div>
           <button> Simple Button </button>
      </div>
</div>

Al agregar esta línea de código CSS a la etiqueta h2 o a la etiqueta div que contiene la etiqueta del botón

estilo: "text-align: center;"

Finalmente, el código de resultado será:

<div style="background-color:green; height:200px; width:400px; margin:0 0 0 35%;">
<h2 style="text-align:center;"> Simple Text </h2> <!-- <<--- here the changes -->

      <div style="text-align:center">        <!-- <<--- here the changes -->
                <button> Simple Button </button>
      </div>
</div>

ingrese la descripción de la imagen aquí


eres welcom hermano
nadir hamidou


2

Para centrar <button type = "button">tanto vertical como horizontalmente dentro de <div>qué ancho se calcula dinámicamente como en su caso, esto es lo que debe hacer:

  1. Establezca text-align: center;el ajuste <div>: esto centrará el botón cada vez que cambie el tamaño de <div>la ventana (o más bien la ventana)
  2. Para la alineación vertical, deberá configurar margin: valuepx;el botón. Esta es la regla sobre cómo calcular valuepx:

    valuepx = (wrappingDIVheight - buttonHeight)/2

Aquí hay una demostración de JS Bin .


2

La respuesta súper simple que se aplicará a la mayoría de los casos es simplemente establecer el margen 0 autoy establecer la pantalla en block. Puedes ver cómo centré mi botón en mi demo en CodePen

ingrese la descripción de la imagen aquí


1

Lo más fácil es ingresarlo como un "div", darle un "margen: 0 automático", pero si desea que esté centrado, debe darle un ancho

  Div{
   Margin: 0 auto ;
   Width: 100px ;
  }

1

Opción de respuesta CSS para centrar un botón vertical y horizontalmente sin preocuparse por el tamaño del elemento primario (usando ganchos de atributos de datos para cuestiones de claridad y separación) :

HTML

<div data-element="card">
  <div data-container="button"><button>CTA...</button></div>
</div>

CSS

[data-container="button"] {
  position: absolute;
  top: 50%;
  text-align: center;
  width: 100%;
}

Violín: https://jsfiddle.net/crrollyson/zebo1z8f/


1

Manera receptiva de centrar su botón en un div:

<div 
    style="display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 2rem;">
    <button type="button" style="height: 10%; width: 20%;">hello</button>
</div>

1
Esta respuesta podría mejorarse eliminando estilos en línea y mostrando una demostración
JGallardo

1

Supongamos que div es #div y el botón es #button:

#div {
    display: table-cell;
    width: 100%;
    height: 100%;
    text-align: center;
    vertical-align: center;
}

#button {}

Luego anide el botón en div como de costumbre.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.