DIV'leri alta veya tabana hizalayın


99

Bir alt div etiketini üst div etiketinin altına veya taban çizgisine hizalamaya çalışıyorum.

Tek yapmak istediğim, Ana Div'in temelindeki Div çocuğuna sahip olmak, işte şimdi göründüğü gibi:

HTML

<div id="parentDiv">
<div class="childDiv"></div>
</div>

CSS

#parentDiv
{
  width:300px;
  height:300px;
  background-color:#ccc;
  background-repeat:repeat
}
#parentDiv .childDiv
{
  height:100px;
  width:30px;
  background-color:#999;
}

Not

childDivFarklı yükseklikleri olan birden fazla s'ye sahip olacağım ve hepsinin taban çizgisine / dibe hizalanmasına ihtiyacım olacak.


düşünmüyordum bile! parentDiv'deki yüksekliği kaldırdım ve tüm childDiv artık temelde oturuyor. Ben sadece aptal bir sally!
sia

Ancak belirli bir yüksekliğe sahip olmasını istiyorsanız - absoluteebeveyne göre konumlandırmayı kullanmalısınız .
Y. Shoham

Yanıtlar:


160

Bunu eklemeniz gerekiyor:

#parentDiv {
  position: relative;
}

#parentDiv .childDiv {
  position: absolute;
  bottom: 0;
  left: 0;
}

Bildirirken absoluteelemanı değil en yakın ana göre konumlandırılır static(olması gereken absolute, relativeya da fixed).


7
Bunun istediğini yaptığından şüpheliyim, şu anda bu her şeyi (dinamik bir çubuk grafikse birden fazla alt öğe olacakmış gibi görünüyor) birbirinin üstüne yerleştirecek.
crmepham

54

Yedi yıl sonra dikey hizalama için yapılan aramalar hala bu soruyu gündeme getiriyor, bu yüzden şimdi kullanabileceğimiz başka bir çözümü göndereceğim: flexbox konumlandırma. Sadece display:flex; justify-content: flex-end; flex-direction: columnüst div'i ayarlayın (bu kemanla da gösterilmiştir ):

#parentDiv
{
  display: flex;
  justify-content: flex-end;
  flex-direction: column;
  width:300px;
  height:300px;
  background-color:#ccc;
  background-repeat:repeat
}

1
Basit. Tam olarak istediğim gibi. Kullanım align-items: flex-start;Öğeleri strech istemiyorsanız.
Madhan

Bugünlerde en iyi cevap bu!
Rens Groenveld

justify-content: flex-end kaydırma
çubuğumu

12

Tablo ve tablo hücresinin CSS görüntüleme değerlerini kullanın:

HTML

<html>
<body>

  <div class="valign bottom">
    <div>

      <div>my bottom aligned div 1</div>
      <div>my bottom aligned div 2</div>
      <div>my bottom aligned div 3</div>

    </div>
  </div>

</body>
</html>

CSS

html,body {
    width: 100%;
    height: 100%;
}
.valign {
    display: table;
    width: 100%;
    height: 100%;
}
.valign > div {
    display: table-cell;
    width: 100%;
    height: 100%;
}
.valign.bottom > div {
    vertical-align: bottom;
}

Burada bir JSBin demosu oluşturdum: http://jsbin.com/INOnAkuF/2/edit

Demo ayrıca aynı tekniği kullanarak dikey olarak nasıl ortalanacağına dair bir örneğe sahiptir.


1
Tablolar olabildiğince çok bok için, bazen en iyi çözüm budur
Sean256

bu benim için en iyi çözümdü
bowlerae

Bu gerçekten en iyi çözüm çünkü mutlak konumlandırılmış elemanların kullanılması tipik olarak ana elemanın yüksekliğini değiştiriyor
hamncheez

7

bu çalışır (sadece i & ff test ettim):

<html>
<head>
    <style type="text/css">
        #parent {
            height: 300px;
            width: 300px;
            background-color: #ccc;
            border: 1px solid red;
            position: relative;
        }
        #child  {
            height: 100px;
            width: 30px;
            background-color: #eee;
            border: 1px solid green;
            position: absolute;
            bottom: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <div id="parent">parent
        <div id="child">child</div>
    </div>
    outside
</body>
</html>

umarım yardımcı olur.


5

Y. Shoham tarafından gönderilen yanıt (mutlak konumlandırma kullanarak), kabın sabit bir yükseklik olduğu çoğu durumda en basit çözüm gibi görünmektedir, ancak ana DIV birden çok DIV içermeli ve yüksekliğini dinamik içeriğe göre otomatik olarak ayarlamalıysa, o zaman bir sorun olabilir. İki blok dinamik içeriğe ihtiyacım vardı; biri kabın üstüne, diğeri aşağıya hizalandı ve kabı üst DIV'nin boyutuna göre ayarlayabilsem de, alt tarafa hizalanan DIV daha uzun olsaydı, kabı yeniden boyutlandırmazdı ancak dışarıya uzanırdı . Yukarıda, masa tarzı konumlandırma kullanan romiem tarafından ana hatları verilen yöntem, biraz daha karmaşık olmasına rağmen, bu açıdan daha sağlamdır ve kabın tabanına hizalanmasına ve doğru otomatik yüksekliğine izin verir.

CSS

#container {
        display: table;
        height: auto;
}

#top {
    display: table-cell;
    width:50%;
    height: 100%;
}

#bottom {
    display: table-cell;
    width:50%;
    vertical-align: bottom;
    height: 100%;
}

HTML

<div id=“container”>
    <div id=“top”>Dynamic content aligned to top of #container</div>
    <div id=“bottom”>Dynamic content aligned to botttom of #container</div>
</div>

Misal

Bunun yeni bir cevap olmadığının farkındayım, ancak bu yaklaşım hakkında yorum yapmak istedim çünkü bu beni çözümümü bulmaya yönlendirdi, ancak bir acemi olarak yorum yapmama izin verilmedi, sadece gönderi.


3

Muhtemelen çocuk div'i sahip olacak şekilde ayarlamanız gerekirdi position: absolute.

Çocuğunuzun stilini şu şekilde güncelleyin:

#parentDiv .childDiv
{
  height:100px;
  width:30px;
  background-color:#999;
  position:absolute;
  top:207px;
}

Bunu denedim, ama ihtiyacım olan şey childDiv'in alt kısmının parentDiv'in altına oturması, grafik dinamik olacak ve yükseklikler her childDiv'den diğerine değişecek ... konumlandırma işe yarayabilir ama yapmadım bırak sağlam bir şey
buldum

5
En
tepeyi

2

Eski bir gönderi ama arayan herkes için bir cevabı paylaşacağımı düşündüm. Ve çünkü kullandığınızda absoluteişler ters gidebilir. Ne yapardım

HTML

<div id="parentDiv"></div>
<div class="childDiv"></div>

Css

parentDiv{

}
childDiv{
    height:40px;
    margin-top:-20px;
}

Ve bu sadece alttaki div'i üst div'e geri yerleştirir. çoğu tarayıcı için de güvenli


Bu, childDiv'i parentDiv'in altında yarı yapar. Margin-top üzerinde en az -40px kullanmanız gerekir. Ayrıca konumu kullanmak için en iyi uygulama: göreli; bu durumda her iki div için.
2013

1

Benzer bir şeye sahiptim ve çocuğa etkili bir şekilde bir ped ekleyerek çalışmasını sağladım .

Eminim buradaki diğer cevaplardan bazıları çözüme ulaşacaktır, ancak çok zaman sonra onları kolayca çalıştırmayı başaramadım; Bunun yerine, basitliği açısından zarif, ancak bana biraz hile gibi görünen padding-top çözümünü buldum (belirlediği piksel değerinden bahsetmiyorum bile, muhtemelen ebeveyn yüksekliğine bağlı olacaktır).


0

td {
  height: 150px;
  width: 150px;
  text-align: center;
}

b {
  border: 1px solid black;
}

.child-2 {
  vertical-align: bottom;
}

.child-3 {
  vertical-align: top;
}
<table border=1>
  <tr>
    <td class="child-1">
      <b>child 1</b>
    </td>
    <td class="child-2">
     <b>child 2</b>
    </td>
    <td class="child-3">
      <b>child 3</b>
    </td>
  </tr>
</table>

Bu benim çözümüm


-6

Üst Div'inizde birden fazla alt Div varsa, dikey hizalama özelliğini aşağıdaki gibi kullanabilirsiniz:

.Parent div
{
  vertical-align : bottom;
}

Neden bunun için yorumsuz bu kadar çok olumsuz oy var? Sorunu çözmüyor mu? Çevrimiçi araştırma yapılması gerektiğini öneriyor.
sholsapp
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.