CSS - div'leri yatay olarak hizalayın


85

Sabit widthve ile bir kapsayıcı div heightvar overflow: hidden.

Bu kapsayıcı içinde yatay bir float: left div sırası istiyorum. Sola kayan div'ler, ebeveynlerinin sağ sınırını okuduktan sonra doğal olarak aşağıdaki 'çizgiye' itecektir. heightEbeveynin buna izin vermemesi gerekse bile bu gerçekleşecektir. Bu şu şekilde görünüyor:

! [Yanlış] [1] - bir reklamla değiştirilmiş olan resim kulübesi resmi kaldırıldı

Nasıl görünmesini isterdim:

! [Sağ] [2] - bir reklamla değiştirilmiş olan resim kulübesi resmi kaldırıldı

Not: İstediğim efekt, satır içi öğeler kullanılarak elde edilebilir white-space: no-wrap(gösterilen resimde bunu böyle yaptım). Bununla birlikte, bu benim için iyi değil (burada açıklanamayacak kadar uzun nedenlerden dolayı), çünkü alt div öğelerinin yüzen blok seviyesi öğeleri olması gerekiyor.


8
Görsel bağlantılarınız kopmuş görünüyor. Hala orijinalleriniz varsa, lütfen bunları stack.imgur'a yeniden yükleyin. Teşekkürler!
Ilmari Karonen

Yanıtlar:


100

Kapsayıcıya, tüm yüzen div'leri tutmaya yetecek genişlikte bir iç div koyabilirsiniz.

#container {
  background-color: red;
  overflow: hidden;
  width: 200px;
}

#inner {
  overflow: hidden;
  width: 2000px;
}

.child {
  float: left;
  background-color: blue;
  width: 50px;
  height: 50px;
}
<div id="container">
  <div id="inner">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>


o zaman outter div merkezini nasıl yapabilirim? Outter div'e align = "center" eklemeyi denedim, çalışmıyor gibi görünüyor.
hakunami

1
Bu yüzdelik genişlikler için de geçerlidir. Benim durumumda bir container div kullanıyorum width: 200%;ve alt öğelerin her biri width: 50%;. Daha sonra transform: translateX(n%);, bir üst kapsayıcım olduğu sürece bir atlıkarınca efekti taklit etmek için kapsayıcıda kullanabilirimoverflow: hidden;
evolross

31

style="overflow:hidden"ebeveyn için divve style="float: left"tüm çocuk için IE7 ve altı gibi eski tarayıcılar için hizalamayı yatay divsolarak yapmak önemlidir divs.

Modern tarayıcılar için, style="display: table-cell"tüm çocuk için kullanabilirsiniz divsve yatay olarak düzgün bir şekilde işlenir.


6

Bu, istediğiniz şeye yakın görünüyor:

#foo {
  background: red;
  max-height: 100px;
  overflow-y: hidden;
}

.bar {
  background: blue;
  width: 100px;
  height: 100px;
  float: left;
  margin: 1em;
}
<div id="foo">
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
  <div class="bar"></div>
</div>


5

clipözelliği kullanabilirsiniz :

#container {
  position: absolute;
  clip: rect(0px,200px,100px,0px);
  overflow: hidden;
  background: red;
}

İşe başlamak için position: absoluteve overflow: hiddengerekli olanları not edin clip.


4
klibin tarayıcı desteği nedir?
alex

1
Gönderen w3schools.com/cssref/pr_pos_clip.asp : klip özelliği tüm büyük tarayıcılarda desteklenir. Not: "devralma" değeri IE7 ve öncesinde desteklenmez. IE8 bir! DOCTYPE gerektirir. IE9 "devralmayı" destekler.
dsomnus

5

Gerekirse div'leri yatay ve dikey olarak hizalamak için artık css flexbox'ı kullanabilirsiniz. genel formül böyle gider

parent-div {
  display: flex;
  flex-wrap: wrap;
  /* for horizontal aligning of child divs */
  justify-content: center;
  /* for vertical aligning */
  align-items: center;
}

child-div {
  width: /* yoursize for each div */
  ;
}

zarif çözüm.
zawhtut

4

Float: left, display: inline-block, kabın genişliğini aşmaları durumunda öğeleri yatay olarak hizalayamaz.

Öğelerin yatay olarak görüntülenmesi ZORUNLUysa, kabın sarmaması gerektiğini unutmamak önemlidir: white-space: nowrap


1

Sola sürün. id="container"LucaM'nin örneğinde, Chrome'da en azından bir sarmalayıcıya sahip olmanıza gerek yok .


0

Bunun gibi bir şey yapabilirsiniz:

#container {
  background-color: red;
  width: 200px;
}

.child {
  background-color: blue;
  width: 150px;
  height: 50px;
}
<div id="container">
  <div id="inner">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
  </div>
</div>

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.