¿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>

foreyez
fuente
¿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;
}
Loktar
fuente
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.

RenatoSz
fuente
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.

Palmadita
fuente
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;
}

adeneo
fuente
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

Con los detalles limitados proporcionados, asumiré la situación más simple y le diré que puede usar text-align: center:

http://jsfiddle.net/pMxty/

James Montagne
fuente
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> 
yask
fuente
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í

nadir hamidou
fuente
eres welcom hermano
nadir hamidou
2

Encontré esto y pensé que también dejaría la solución que utilicé, que utiliza line-heighty text-align: centerpara centrar tanto vertical como horizontalmente:

Haga clic aquí para trabajar JSFiddle

lhan
fuente
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 .

Billal Begueradj
fuente
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í

JGallardo
fuente
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 ;
  }
Ashhad Sameer
fuente
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/

CR Rollyson
fuente
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>
Maijied Hasan Shuvo
fuente
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.

Victor Nițu
fuente