Bir düğmeyi div içinde nasıl ortalayabilirim?


220

Genişliği% 100 olan bir div var.

İçinde bir düğme ortalamak istiyorum, bunu nasıl yapabilirim?

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


düğme için kullandığınız kod nedir?
— David Nguyen

2
Hem dikey hem de yatay merkezleme istediğinden şüpheleniyorum. Şimdiye kadar hiçbir çözüm bunu başaramadı. Dikey merkezlemede CSS çok iyi değil = (.
— mrtsherman

diyelim ki flexbox bu cevabı 2014 için işe yaramaz hale getiriyor. evet bebeğim!
— foreyez

Yanıtlar:


352

Güncellenmiş Yanıt

Güncellemenin aktif bir yanıt olduğunu fark ettiğim için güncelleniyor, ancak Flexbox şimdi doğru yaklaşım olacaktır.

Canlı Demo

Dikey ve yatay hizalama.

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

Sadece yatay (ana esnek eksen yatay olduğu sürece varsayılan)

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

Sabit genişlikli ve flexbox içermeyen orijinal cevap

Orijinal poster, düğmenin sabit genişliği ve yüksekliği için dikey ve orta hizalama istiyorsa, aşağıdakileri deneyin

Canlı Demo

CSS

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

sadece yatay hizalama için

button{
    margin: 0 auto;
}

veya

div{
    text-align:center;
}

21
-1 bu korkunç. Temel olarak, genişliği% 100'e ve ardından kenar boşluğunu -50 olarak ayarlarsınız. Ancak, düğme içeren öğenin üzerine yükselir ve yeniden boyutlandırma ile iyi çalışmaz gibi diğer sorunlara neden olur.
— CodyBugstein

3
Hey en azından aşağı oyunuzu açıkladığınız için teşekkürler @Imray, Ayrıca not, değişken değil sabit genişlik ve yükseklik dedim . Yani yeniden boyutlandırma bir faktör değildir. "Temel olarak" I genişliğini ayarlamak 100 piksel yarısıdır -50px için değil,% 100, ve kenar. Bu merkezleme için oldukça standart bir yöntem olmuştur. Ben bekliyoruz senin :) gerçi cevap
— Loktar

1
Welcs (sertlik için üzgünüm, espri anlayışı olduğu için memnunum) 100px demek istedim. "Sabit" yazdığınızı fark etmedim, ama yine de bu cevabın çoğu durumda iyi olmayacağını düşünüyorum
— CodyBugstein

110

Sadece şunları yapabilirsiniz:

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

Veya bunun yerine şu şekilde yapabilirsiniz:

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

Birincisi div içindeki her şeyi merkeze hizalar. Diğeri sadece düğmeyi ortada hizalayacaktır.


28

et voila:

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

Güncelleme : OP yatay ve dikey merkez arıyorsa, bu cevap bunu sabit bir genişlik / yükseklik elemanı için yapacaktır.


11
ayrıca "display: block;"
— SoluableNonagon

1
@SoluableNonagon İşte bu kadar! "display: block" "margin: 0 auto" ile hile yapar
— Tomas Lukac

8

Kenar boşluğu: 0 otomatik; yalnızca yatay merkezleme için doğru cevaptır. Her iki yolu ortalamak için jquery kullanarak böyle bir şey işe yarayacaktır:

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

Güncelleme ... beş yıl sonra , düğmeyi hem yatay hem de dikey olarak kolayca ortalamak için üst DIV öğesinde flexbox kullanılabilir.

En iyi destek için tüm tarayıcı öneklerini içerir

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? Ciddi anlamda?
— Pranesh Ravi

3
@PraneshRavi - 2011'de bir şeyi dikey olarak ortalamak için CSS'de pek çok seçenek yoktu, bu yüzden bir öğenin tam yüksekliğini ve genişliğini bilmiyor ve kenar boşluklarını çıkarabiliyorsanız javascript nadir değildi.
— adeneo

Bir elemanı hem dikey hem de yatay olarak ortalamak için her zaman flex kullanabilirsiniz.
— Pranesh Ravi

6
@PraneshRavi - evet yapabilirsiniz, flexbox bu soruya harika bir cevap ve bunu ekleyeceğim, ancak 2011'de flexbox yoktu.
— adeneo

@JGallardo - Sanırım diğer cevapların düğmeyi sadece yatay değil dikey olarak da ortalamaya çalıştığı kısmı kaçırdınız ve 9 yıl önce bunu sadece CSS ile yapmak için gerçekten iyi bir seçenek
— yoktu


7

Flexbox kullanma

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

Ve sonra düğmenize sınıfı ekleyin.

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

6

İşte bu kadar basit olmalı:

önce metninizin veya düğmenizin başlangıç ​​konumuna sahip olursunuz:

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

Bu css kod satırını h2 etiketine veya düğme etiketini tutan div etiketine ekleyerek

style: "text-align: center;"

Sonuç Sonuç kodu:

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

resim açıklamasını buraya girin


are welcom brother
— nadir hamidou


2

Bir genişliği, sizin durumunuzda olduğu gibi dinamik olarak hesaplanan <button type = "button">bir dikey ve yatay olarak ortalamak <div>için aşağıdakileri yapmanız gerekir:

  1. text-align: center;Kaydırmaya ayarlayın <div>: her yeniden boyutlandırdığınızda düğmenin ortası<div> (veya pencereyi
  2. Dikey hizalama margin: valuepx;için düğmeyi ayarlamanız gerekir . Bu nasıl hesaplanacağına dair kuraldır valuepx:

    valuepx = (wrappingDIVheight - buttonHeight)/2

İşte bir JS Bin demosu .



1

En kolay şey "div" olarak girerek "kenar boşluğu: 0 otomatik" olarak girer, ancak ortalanmasını istiyorsanız genişlik vermeniz gerekir

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

1

Bir düğmeyi üst öğe boyutuyla ilgilenmeden dikey ve yatay olarak ortalamak için duyarlı CSS seçeneği (netlik ve ayırma endişeleri için veri özelliği kancalarını kullanarak) :

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

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


1

Düğmenizi div içinde ortalamanın duyarlı yolu:

<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
Bu yanıt satır içi stilleri kaldırarak ve bir demo göstererek geliştirilebilir
— JGallardo

1

Diyelim ki div #div ve düğme #düğmesi:

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

#button {}

Ardından düğmeyi her zamanki gibi div içine yerleştirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.