<div> içinde ortaya dikey hizala


126

Ben yüksekliğini tutmak istiyorum #abc diven 50pxortasında dikey olarak hizalamak ve metin div.

body{
  padding: 0;
  margin: 0;
  margin: 0px auto;
}

#main{
  position: relative;
  background-color:blue;
  width:500px;
  height:500px;
}

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  vertical-align:middle;
}
<div id="main">
 <div id="abc">
     asdfasdfafasdfasdf
 </div>
</div>

Yanıtlar:


183

Kullanabilirsiniz, oraya line-height: 50px;ihtiyacınız olmayacak vertical-align: middle;.

gösteri


Eğer birden fazla satır var ise yukarıdaki böylece durumda kullanarak metin kaydırılabilir, başarısız olur spankullanılmak daha ve display: table-cell;ve display: table;birlikte vertical-align: middle;, aynı zamanda kullanmayı unutmayın width: 100%;için#abc

gösteri

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  display: table;
  width: 100%;
}

#abc span {
  vertical-align:middle;
  display: table-cell;
}

Burada düşünebileceğim başka bir çözüm, transformözelliği açıkça Y Ekseninin translateY()bulunduğu yerde kullanmaktır Y. Bu ... oldukça yalındır sen elemanları için pozisyon ayarlanır yapmanız gereken var absoluteve daha sonra pozisyon 50%gelen topve negatif ile 's ekseninden çevirmek-50%

div {
  height: 100px;
  width: 100px;
  background-color: tomato;
  position: relative;
}

p {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

gösteri

Bunun eski tarayıcılarda, örneğin IE8'de desteklenmeyeceğini unutmayın, ancak sırasıyla -ms, -mozve -webkitöneklerini kullanarak IE9 ve Chrome ve Firefox'un diğer eski tarayıcı sürümlerini yapabilirsiniz .

Daha fazla bilgi için burayatransform başvurabilirsiniz .


Bu basit çizgi yüksekliği çözümünü tüm profesyonel hayatım boyunca bilmem gerekiyordu ve sadece şimdi öğrendim. Teşekkür ederim, Bay Uzaylı.
Nathan Beach

94

Çok basit: ebeveyn div'e şunu verin:

display: table;

ve çocuğa div (ler) e şunu verin:

display: table-cell;
vertical-align: middle;

Bu kadar!

.parent{
    display: table;
}
.child{
    display: table-cell;
    vertical-align: middle;
    padding-left: 20px;
}
<div class="parent">
    <div class="child">
        Test
    </div>
    <div class="child">
        Test Test Test <br/> Test Test Test
    </div>
    <div class="child">
        Test Test Test <br/> Test Test Test <br/> Test Test Test
    </div>
<div>


6
Bu, tabloyu bir hack olarak kullandığı için kötüdür, çoğu durumda işe yarayabilir, ancak 'tablonun' genişliğini değiştirmek istediğinizde, düzgün çalışmayacaktır (şu anda bu çözümle sorunu yaşıyorum )
Kevin Simple

display:table;Çalışması için ebeveyne eklememe gerek yoktu .
VincentPerrin.com

Belki bu bir hack'tir ... ama ÇALIŞIR ve diğer çözümlerin çoğu yalnızca belirli durumlarda çalışır ve bizim durumumuzda genellikle kullanılamaz.
Jerry

Bu çözümün avantajı: her tür içerikle çalışır (yalnızca metin için değil, yalnızca tek bir satır için değil ...)
Jerry,

77

Eski soru ama günümüzde CSS3 dikey hizalamayı gerçekten basit hale getiriyor !

Sadece #abcaşağıdaki css'e ekleyin :

display:flex;
align-items:center;

Basit Demo

Orijinal soru demosu güncellendi

Basit Örnek:

.vertical-align-content {
  background-color:#f18c16;
  height:150px;
  display:flex;
  align-items:center;
  /* Uncomment next line to get horizontal align also */
  /* justify-content:center; */
}
<div class="vertical-align-content">
  Hodor!
</div>


3
Ayrıca şunu da öneririm: display: grid; hizalama-öğe: center; Eğer fazla uyum sağlamaya birden fazla nesne var zaman dikey olarak birbirine daha iyi çalışır
Leonardo Daga

Hangi tarayıcılar destekliyor CSS3 ?
Kiquenet

@Kiquenet, küresel pazarın% 92'si caniuse.com/#search=align-items
Daniel Kucal

Perfekt! Basit ve kolay .. sadece konteynere ekleyin
Ujjwal Singh

47

Bu çözümü Sebastian Ekström tarafından buldum. Hızlı, kirli ve gerçekten iyi çalışıyor. Ebeveynin boyunu bilmeseniz bile:

.element {
  position: relative;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}

Makalenin tamamını buradan okuyun .


3
Bu, bazı şeyleri bulanıklaştırabilir çünkü dönüşümlerin sonucu, nesnelerin yarım piksel konumlarında konumlandırılmasına yol açabilir.
Kevin Wheeler

1
Bu sorunu hedefleyen gönderide bir güncelleme var. Ebeveyn üzerinde: transform-style: preserve-3d;!
Andry

8

Satır yüksekliğini div yüksekliği kadar büyük olarak kullanabilirsiniz. Ama benim için en iyi çözüm şudur ->position:relative; top:50%; transform:translate(0,50%);


4

Eklemeye ne dersiniz line-height?

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  vertical-align:middle;
  line-height: 45px;
}

Fiddle, satır yüksekliği

Veya paddingüzerinde #abc. Bu, doldurmanın sonucudur

Güncelleme

CSS'nize ekleyin:

#abc img{
   vertical-align: middle;
}

Sonuç . Umarım aradığın budur.


tam istediğim şekilde çalışmıyor, yüksekliği veya satır yüksekliğini değiştirdiğinizde bir şeyler doğru değil. zaten bir cevabım var, yine de teşekkürler
hasta

2

Bunu dene:

.main_div{
    display: table;
    width: 100%;
}
.cells {
    display: table-cell;
    vertical-align: middle;
}

Bir div'i ortalamak için başka bir yöntem:

<div id="parent">
    <div id="child">Content here</div>
</div>

#parent {position: relative;}

#child {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    width: 50px;
    height: 100px;
    margin: auto;
}

2

 div {
    height:200px;
    text-align: center;
    padding: 2px;
    border: 1px solid #000;
    background-color: green;
}

.text-align-center {
    display: flex;
    align-items: center;
    justify-content: center;
}
<div class="text-align-center"> Align center</div>


Lütfen açıklayın!
Szabolcs Páll

1

Metninizi kapsayıcısında dikey olarak ortalamak için translateY CSS özelliğini kullanın

<style>
.centertext{

    position: relative;
    top: 50%;
    transform: translateY(40%);

}
</style>

Ve sonra bunu içeren DIV'nize uygulayın

  <div class="centertext">
        <font style="color:white; font-size:20px;">   Your Text Here </font>
  </div>

Çeviri yüzdesini ihtiyaçlarınıza göre ayarlayın. Bu yardımcı olur umarım


1

Bu Kod, sabit yükseklik belirtilmeden Dikey Orta ve Yatay Ortaya Hizalama içindir:

.parent-class-name {
  position: relative;
}

.className {
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  margin: 0 auto;
  transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
}

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.