Come centrare un pulsante all'interno di un div?


220

Ho un div che ha una larghezza del 100%.

Vorrei centrare un pulsante al suo interno, come potrei farlo?

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


qual è il codice che stai usando per il pulsante?
David Nguyen,

2
Sospetto che voglia centrare sia verticale che orizzontale. Nessuna delle soluzioni ha finora raggiunto questo obiettivo. CSS non è molto bravo a centrare verticalmente = (.
mrtsherman,

lasciatemi solo dire che flexbox rende questa risposta inutile per il 2014. sì piccola!
foreyez,

Risposte:


352

Risposta aggiornata

Aggiornamento perché ho notato che è una risposta attiva, tuttavia Flexbox sarebbe l'approccio corretto ora.

Dimostrazione dal vivo

Allineamento verticale e orizzontale.

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

Solo orizzontale (purché l'asse flessibile principale sia orizzontale, che è l'impostazione predefinita)

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

Risposta originale usando una larghezza fissa e nessuna flexbox

Se il poster originale vuole che l'allineamento verticale e centrale sia abbastanza facile per la larghezza e l'altezza fisse del pulsante, provare quanto segue

Dimostrazione dal vivo

CSS

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

per un solo allineamento orizzontale usare entrambi

button{
    margin: 0 auto;
}

o

div{
    text-align:center;
}

21
-1 questo è terribile. Fondamentalmente, imposta la larghezza al 100% e quindi il margine a -50. Ma causa altri problemi, come il pulsante sale sopra l'elemento di contenimento e non funziona bene con il ridimensionamento.
CodyBugstein,

3
Ehi grazie almeno per aver spiegato il tuo voto negativo @Imray, nota anche che ho detto larghezza e altezza fisse , non variabili. Quindi il ridimensionamento non è un fattore. "Fondamentalmente" ho impostato la larghezza a 100px , non 100%, e il margine di -50px che è la metà. Questo è stato un metodo piuttosto standard per la centratura. Non vedo l'ora di avere la tua risposta :)
Loktar

1
I tuoi welc (scusami per la durezza, felice di avere un senso dell'umorismo) intendevo 100px. Non mi rendevo conto che hai scritto "risolto", ma penso comunque che questa risposta non sarà buona nella maggior parte delle situazioni
CodyBugstein

109

Potresti semplicemente fare:

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

Oppure potresti farlo così:

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

Il primo allineerà al centro tutto all'interno del div. L'altro allinea al centro solo il pulsante.


28

et voilà:

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

Aggiornamento : Se OP cerca un centro orizzontale e verticale, questa risposta lo farà per un elemento larghezza / altezza fisso.


11
potresti anche aver bisogno di "display: block;"
SoluableNonagon,

1
@SoluableNonagon Questo è tutto! "display: block" fa il trucco con "margin: 0 auto"
Tomas Lukac il

8

Margine: 0 auto; è la risposta corretta solo per la centratura orizzontale. Per centrare entrambi i modi in cui qualcosa di simile funzionerà, 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);

Aggiornamento ... cinque anni dopo , si potrebbe usare la flexbox sull'elemento DIV principale per centrare facilmente il pulsante sia in orizzontale che in verticale.

Compresi tutti i prefissi del browser, per il miglior supporto

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? Sul serio?
Pranesh Ravi,

3
@PraneshRavi - nel 2011 non c'erano molte opzioni disponibili nei CSS per centrare qualcosa in verticale, quindi sì, JavaScript non era insolito se non si conosceva l'altezza e la larghezza esatte di un elemento e si potevano sottrarre i margini.
adeneo,

Puoi sempre usare la flessione per centrare un elemento sia in verticale che in orizzontale.
Pranesh Ravi,

6
@PraneshRavi - sì, è possibile, flexbox è un'ottima risposta a questa domanda, e lo aggiungerò, ma nel 2011 non c'era flexbox.
adeneo,

@JGallardo - Penso che ti sia sfuggita la parte in cui le altre risposte stanno provando a centrare il pulsante non solo in orizzontale, ma anche in verticale, e che 9 anni fa non c'erano davvero buone opzioni per farlo solo con CSS
adeneo


7

Utilizzando Flexbox

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

E quindi aggiungendo la classe al tuo pulsante.

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

6

Dovresti prenderlo semplice qui:

per prima cosa hai la posizione iniziale del tuo testo o pulsante:

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

Aggiungendo questa riga di codice CSS al tag h2 o al tag div che contiene il tag button

style: "text-align: center;"

Finaly Il codice risultato sarà:

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

inserisci qui la descrizione dell'immagine


sei il benvenuto fratello
nadir hamidou


2

Per centrare <button type = "button">sia verticalmente che orizzontalmente all'interno di una <div>larghezza calcolata in modo dinamico come nel tuo caso, ecco cosa fare:

  1. Imposta text-align: center;sul wrapping <div>: questo centrerà il pulsante ogni volta che ridimensionerai la <div>(o meglio la finestra)
  2. Per l'allineamento verticale, dovrai impostare margin: valuepx;il pulsante. Questa è la regola su come calcolare valuepx:

    valuepx = (wrappingDIVheight - buttonHeight)/2

Ecco una demo di JS Bin .


2

La risposta semplicissima che si applica alla maggior parte dei casi è semplicemente impostare il margine su 0 autoe impostare il display su block. Puoi vedere come ho centrato il mio pulsante nella mia demo su CodePen

inserisci qui la descrizione dell'immagine


1

La cosa più semplice è inserirla come "div" dandogli un "margine: 0 auto" ma se vuoi che sia centrato devi dargli una larghezza

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

1

Opzione CSS reattiva per centrare un pulsante in verticale e in orizzontale senza preoccuparsi della dimensione dell'elemento principale (utilizzando i ganci dell'attributo dei dati per motivi di chiarezza e separazione) :

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%;
}

Fiddle: https://jsfiddle.net/crrollyson/zebo1z8f/


1

Modo reattivo per centrare il tuo pulsante in 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
Questa risposta potrebbe essere migliorata rimuovendo gli stili in linea e mostrando una demo
JGallardo

1

Supponendo che div sia #div e il pulsante sia #button:

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

#button {}

Quindi annidare il pulsante in div come al solito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.