Mutlak Konumlandırılmış Bir Div'de Ortaya Hizala


94
div#thing {
  position: absolute;
  top: 0px;
  z-index: 2;
  margin: 0 auto;
}

<div id="thing">
   <p>text text text with no fixed size, variable font</p>
</div>

Div en üstte, ancak onu <center>veya ile ortalayamıyorum margin: 0 auto;

Yanıtlar:


152

divAşağıdaki gibi sabit bir genişlik verirseniz probleminiz çözülebilir :

div#thing {
    position: absolute;
    top: 0px;
    z-index: 2;
    width:400px;
    margin-left:-200px;
    left:50%;
}

1
Dikey merkezleme için her zaman aynı tekniği kullanmamıza rağmen neden bunu düşünmediğimi bilmiyorum ... Yine de teşekkürler, bana çok zaman kazandırdın.
Aayush

1
ya kullanıcı dikey olarak aşağı kaydırırsa, div görünür alanda görünmesi gerekirken sayfanın üst kısmında görünür
PUG

Overlay div'imde dinamik olarak yeniden boyutlandırılmış resimlerin küçük resimlerini görüntülüyorum, bu yüzden genişliği bilmiyorum.
PUG

4
bu yalnızca bir geçici çözümdür , stackoverflow.com/questions/1776915/… çözüm gibi görünüyor
PUG

1
Bu doğru cevap değil. Farklı ortam türleri bu parçacığı desteklemeyecektir.
Sushan

98
div#thing
{
    position: absolute;
    width:400px;
    right: 0;
    left: 0;
    margin: auto;
}

3
Bu nasıl çalışıyor? Cevabınızın neden geçerli olduğunu açıklar mısınız?
afuzzyllama

1
Bu yöntemi diğerlerine kıyasla% 99 oranında seviyorum, dolgu, sınırlar vb. İle uğraşmak zorunda değilsiniz. Bunun başarısız olduğunu hiç görmedim, bir dahaki sefere sizin için başarısız olursa bir örnek verin.
Dan

1
Bu çözümle ilgili harika olan şey, yüzdelerle de çalışması, ancak tarayıcılar arası uyumlu olup olmadığından emin olmaması
maljukan

1
Vay. Bunun işe yaramasını beklemiyordum ama benim için bir cazibe gibi çalıştı
Awais Umar

4
Bunun doğru cevap olması gerektiğine katılıyorum, -200px marjı bana hack haykırıyor.
Mani5556

37

Partiye geç kaldığımı biliyorum, ancak burada tam genişliğini bilmediğinizde mutlak bir öğeyi yatay olarak konumlandırması gereken insanlar için bir cevap vereceğimi düşündüm.

Bunu dene:

// Horizontal example.
div#thing {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

Aynı teknik, dikey hizalamaya ihtiyaç duyduğunuzda, aşağıdaki gibi özellikleri ayarlayarak da uygulanabilir:

// Vertical example.
div#thing {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

1
Whaaat. Bu harika! Nasıl çalıştığını açıklayabilir misin? Düzenleme: Biraz avlandı ve sol gibi görünüyor:% 50 div'in sol konumunu merkeze taşır, ki bu gerçekten merkezde değildir. Ancak translateX, onu içeriğin genişliğinin
azizj1

2
Mutlak konumlandırma, bir öğenin sol üstünden konumlandırılacaktır. Çeviri kullanmak, onu boyutuna göre miktara kaydırır.
Michael Giovanni Pumo

3
Michael, sadece bilmeni istedim, parti tomurcuğuna geç kalmadın ... ve bilmeyenler için: dönüştürme: çeviri (-% 50, -% 50); hem dikey hem de yatay merkezlemeyi 1 çizgi ile yapıyor
Marvel Moe

4

Hem dikey hem de yatay olarak ortalamak için şunu yapın:

div#thing {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
}

1

.contentBlock {
    width: {define width}
    width: 400px;
    position: absolute;
    left: 0;
    right: 0;
    margin-left: auto;
    margin-right: auto;
 
}


Teşekkür ederim. Bu benim için çalışıyor.
Henrique Van Klaveren

0

Göreli bir genişliğe (yüzde olarak) sahip olmanız gerekiyorsa, div'inizi mutlak konumlandırılmış bir genişliğe kaydırabilirsiniz:

div#wrapper {
    position: absolute;
    width: 100%;
    text-align: center;
}

Bir öğeyi mutlak olarak konumlandırmak için, ana öğenin göreceli olarak konumlandırılması gerektiğini unutmayın.


0

Aynı sorunu yaşıyordum ve sınırlamam önceden tanımlanmış bir genişliğe sahip olamamamdı. Öğenizin sabit bir genişliği yoksa, bunu deneyin

div#thing 
{ 
  position: absolute; 
  top: 0px; 
  z-index: 2; 
  left:0;
  right:0;
 }

div#thing-body
{
  text-align:center;
}

sonra html'nizi böyle görünecek şekilde değiştirin

<div id="thing">
 <div id="thing-child">
  <p>text text text with no fixed size, variable font</p>
 </div>
</div>

0

Veya göreli birimleri kullanabilirsiniz, örneğin

#thing {
    position: absolute;
    width: 50vw;
    right: 25vw;
}

-22

Evet:

div#thing { text-align:center; }

5
Bu, bir div içindeki içeriği hizalayacaktır. Div'i sayfanın ortasına hizalamayacaktır. Ayrıca, kesinlikle konumlandırılmış bir div'i, belge akışının parçası olan içindeki içerikler dışında hiçbir şekilde hizalamayacaktır.
CarterMan
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.