Wie zentriere ich eine Schaltfläche innerhalb eines Div?

220

Ich habe ein Div, dessen Breite 100% beträgt.

Ich möchte einen Knopf darin zentrieren. Wie kann ich das tun?

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

foreyez
quelle
Welchen Code verwenden Sie für die Schaltfläche?
David Nguyen
2
Ich vermute, dass er sowohl vertikale als auch horizontale Zentrierung wünscht. Keine der bisherigen Lösungen erreicht dies. CSS ist nicht sehr gut in vertikaler Zentrierung = (.
Mrtsherman
Lassen Sie mich nur sagen, dass Flexbox diese Antwort für 2014 unbrauchbar macht. Ja Baby!
Foreyez
1
Mögliches Duplikat des Versuchs, die HTML-Schaltfläche in der Mitte meiner Seite
auszurichten

Antworten:

352

Aktualisierte Antwort

Aktualisieren, weil ich bemerkt habe, dass es eine aktive Antwort ist, aber Flexbox wäre jetzt der richtige Ansatz.

Live-Demo

Vertikale und horizontale Ausrichtung.

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

Nur horizontal (solange die Hauptflexachse horizontal ist, was standardmäßig ist)

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

Originalantwort mit fester Breite und ohne Flexbox

Wenn das Originalposter eine vertikale und mittlere Ausrichtung für eine feste Breite und Höhe der Schaltfläche wünscht, versuchen Sie Folgendes

Live-Demo

CSS

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

Verwenden Sie entweder nur für die horizontale Ausrichtung

button{
    margin: 0 auto;
}

oder

div{
    text-align:center;
}
Loktar
quelle
21
-1 das ist schrecklich. Grundsätzlich setzen Sie die Breite auf 100% und dann den Rand auf -50. Dies führt jedoch zu anderen Problemen, z. B. wenn sich die Schaltfläche über dem enthaltenen Element befindet und die Größenänderung nicht gut funktioniert.
CodyBugstein
3
Hey, danke, dass du zumindest deine Abwahl @Imray erklärt hast. Beachten Sie auch, dass ich feste Breite und Höhe gesagt habe , nicht variabel. Die Größenänderung spielt also keine Rolle. "Grundsätzlich" Ich habe die Breite auf 100px und nicht auf 100% und den Rand auf -50px eingestellt, was der Hälfte entspricht. Dies war eine ziemlich übliche Methode zum Zentrieren. Ich freue mich jedoch auf Ihre Antwort :)
Loktar
1
Ihre Begrüßung (Entschuldigung für die Härte, ich bin froh, dass Sie einen Sinn für Humor haben) Ich meinte 100px. Ich wusste nicht, dass Sie "behoben" geschrieben haben, aber ich denke trotzdem, dass diese Antwort in den meisten Situationen nicht gut ist
CodyBugstein
109

Sie könnten einfach machen:

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

Oder Sie könnten es stattdessen so machen:

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

Der erste wird alles innerhalb des Div zentrieren. Der andere richtet nur die Taste in der Mitte aus.

RenatoSz
quelle
28

et voila:

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

Update : Wenn OP nach horizontaler und vertikaler Mitte sucht, wird diese Antwort dies für ein Element mit fester Breite / Höhe tun.

Klopfen
quelle
11
Möglicherweise benötigen Sie auch "display: block;"
SoluableNonagon
1
@ SoluableNonagon Das war's! "display: block" macht den Trick mit "margin: 0 auto"
Tomas Lukac
8

Margin: 0 auto; ist die richtige Antwort nur für die horizontale Zentrierung. Für die Zentrierung in beide Richtungen funktioniert so etwas mit 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);

Update ... fünf Jahre später könnte man die Flexbox auf dem übergeordneten DIV-Element verwenden, um die Schaltfläche einfach horizontal und vertikal zu zentrieren.

Einschließlich aller Browserpräfixe für beste Unterstützung

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
quelle
2
jQuery? Ernsthaft?
Pranesh Ravi
3
@PraneshRavi - 2011 gab es in CSS nicht viele Optionen, um etwas vertikal zu zentrieren. Ja, Javascript war keine Seltenheit, wenn Sie die genaue Höhe und Breite eines Elements nicht kannten und die Ränder subtrahieren konnten.
Adeneo
Sie können Flex jederzeit verwenden, um ein Element sowohl vertikal als auch horizontal zu zentrieren.
Pranesh Ravi
6
@PraneshRavi - ja, Sie können, Flexbox ist eine großartige Antwort auf diese Frage, und ich werde das hinzufügen, aber 2011 gab es keine Flexbox.
Adeneo
@JGallardo - Ich denke, Sie haben den Teil verpasst, in dem die anderen Antworten versuchen, die Schaltfläche nicht nur horizontal, sondern auch vertikal zu
zentrieren
7

Mit den begrenzten Details gehe ich von der einfachsten Situation aus und sage, dass Sie Folgendes verwenden können text-align: center:

http://jsfiddle.net/pMxty/

James Montagne
quelle
7

Flexbox verwenden

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

Und dann fügen Sie die Klasse zu Ihrer Schaltfläche hinzu.

<button class="Center">Demo</button> 
yask
quelle
6

Sie sollten es hier einfach angehen lassen:

Zuerst haben Sie die Anfangsposition Ihres Textes oder Ihrer Schaltfläche:

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

Durch Hinzufügen dieser CSS-Codezeile zum h2- Tag oder zum div- Tag, das das Button-Tag enthält

Stil: "Textausrichtung: Mitte;"

Endlich Der Ergebniscode lautet:

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

Geben Sie hier die Bildbeschreibung ein

Nadir Hamidou
quelle
Sie sind willkommen Bruder
Nadir Hamidou
2

Ich stieß auf diesem und dachte , dass ich die Lösung , die ich als gut verlassen würde, die verwendet line-heightund text-align: centersowohl vertikale als auch horizontale Zentrierung zu tun:

Klicken Sie hier, um JSFiddle zu bearbeiten

lhan
quelle
2

Um eine <button type = "button">sowohl vertikal als auch horizontal innerhalb einer <div>Breite zu zentrieren, die wie in Ihrem Fall dynamisch berechnet wird, gehen Sie wie folgt vor:

  1. Auf text-align: center;Umbruch setzen <div>: Hiermit wird die Schaltfläche zentriert, wenn Sie die Größe <div>des Fensters (oder besser gesagt des Fensters) ändern.
  2. Für die vertikale Ausrichtung müssen Sie margin: valuepx;die Schaltfläche festlegen . Dies ist die Regel für die Berechnung valuepx:

    valuepx = (wrappingDIVheight - buttonHeight)/2

Hier ist eine JS Bin-Demo .

Billal Begueradj
quelle
2

Eine supereinfache Antwort, die in den meisten Fällen gilt, besteht darin, den Rand auf 0 autound die Anzeige auf einzustellen block. Sie können sehen, wie ich meine Schaltfläche in meiner Demo auf CodePen zentriert habe

Geben Sie hier die Bildbeschreibung ein

JGallardo
quelle
1

Am einfachsten ist es, es als "div" einzugeben. Geben Sie ihm einen "Rand: 0 auto". Wenn Sie jedoch möchten, dass es zentriert wird, müssen Sie ihm eine Breite geben

  Div{
   Margin: 0 auto ;
   Width: 100px ;
  }
Ashhad Sameer
quelle
1

Responsive CSS-Option zum vertikalen und horizontalen Zentrieren einer Schaltfläche, ohne sich um die Größe des übergeordneten Elements zu kümmern (Verwendung von Datenattribut-Hooks aus Gründen der Klarheit und Trennung) :

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

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

CR Rollyson
quelle
1

Reaktionsschnelle Möglichkeit, Ihren Button in einem Div zu zentrieren:

<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
quelle
1
Diese Antwort könnte verbessert werden, indem Inline-Stile entfernt und eine Demo
angezeigt werden
1

Angenommen, div ist #div und die Schaltfläche ist #button:

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

#button {}

Verschachteln Sie dann den Button wie gewohnt in div.

Victor Nițu
quelle