Nasıl bir DIV sarmak değil?


179

Birden fazla diğer DIV içeren bir konteyner DIV stil oluşturmak gerekir. Tarayıcı penceresi dar olacak şekilde yeniden boyutlandırılırsa bu DIV'lerin kaydırılmaması istenir.

Aşağıdaki gibi çalışmasını sağladım.

<style>
   .container
   {
      min-width: 3000px;
      overflow: hidden;
   }
   .slide
   {
      float: left;
   }
</style>
<div class="container">
   <div class="slide">something</div>
   <div class="slide">something</div>
   <div class="slide">something</div>
   <div class="slide">something</div>
</div>

Bu çoğu durumda işe yarar. Ancak, bazı özel durumlarda oluşturma işlemi yanlıştır. Konteyner DIV değişikliğini IE7'nin RTL'sinde 3000 piksel genişliğe buldum; ve dağınık oluyor.

Bir konteyner DIV'nin sarılmamasını sağlamanın başka bir yolu var mı?


Bu etiketi ekledim: boşluk: nowrap; ve bu etiket: metin taşması: üç nokta; Benim koduna
kılıç Tabatabaee Yazdi

Yanıtlar:


245

white-space: nowrap;Kapsayıcı stilinde kullanmayı deneyin (yerine overflow: hidden;)


48

Minimal bir genişlik tanımlamak istemezsem, çünkü bana çalışan tek şey elementlerin miktarını bilmiyorum:

display: inline-block;
white-space: nowrap;

Ancak yalnızca Chrome ve Safari'de: /


33

Aşağıdakiler yüzer olmadan benim için çalıştı (örneğinizi görsel efekt için biraz değiştirdim):

.container
{
    white-space: nowrap; /*Prevents Wrapping*/
    
    width: 300px;
    height: 120px;
    overflow-x: scroll;
    overflow-y: hidden;
}
.slide
{
    display: inline-block; /*Display inline and maintain block characteristics.*/
    vertical-align: top; /*Makes sure all the divs are correctly aligned.*/
    white-space: normal; /*Prevents child elements from inheriting nowrap.*/
    
    width: 100px;
    height: 100px;
    background-color: red;
    margin: 5px;
}
<div class="container">
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
   <div class="slide">something something something</div>
</div>

Div'ler boşluklarla ayrılabilir. Bunu istemiyorsanız margin-right: -4px;, margin: 5px;for yerine kullanın .slide(çirkin ama başa çıkmak zor bir sorundur ).


Mükemmel cevap. Aşağıya benzer bir örnek ekledim ama sizinkini gördükten sonra sildim. IE9'u desteklemeniz gerekmiyorsa, flexbox'ı da kullanabilirsiniz: jsfiddle.net/7gsrb38L/1
ValentinVoilean

</div><!-- --><div class="slide">Aralarındaki fazla boşlukları kaldırmak istiyorsanız div'ler arasındaki HTML yorumlarını kullanabilirsiniz . Satır içi blok stili, kodunuzdaki beyaz alanın HTML belgesinde alan olarak alınmasına neden olur.
Jo.

@Jo. sayfa boyutunu azaltmak için, örneğin kaynak kodunda </div><?php ?><div class="slide">olduğu gibi php: renders kullanılırken oluşturulmayan bir şeyi kullanabilirsiniz </div><div class="slide">.
Fleuv

Ayrıca, HTML'yi JavaScript ile oluşturursanız boşluklardan kaçınabilirsiniz. Kullandığım DOThtml . Yukarıdaki HTML bununla değiştirilebilir:dot("body").div(dot.iterate(4, function(i){return dot.div("something something something something").class("slide");})).class("container")
JSideris

30

İhtiyacınız olan kombinasyon

white-space: nowrap

ebeveyn üzerinde ve

display: inline-block; // or inline

çocuklarda


25

Bu benim için çalıştı:

.container {
  display: inline-flex;
}

.slide {
  float: left;
}
<div class="container">
  <div class="slide">something1</div>
  <div class="slide">something2</div>
  <div class="slide">something3</div>
  <div class="slide">something4</div>
</div>

https://css-tricks.com/snippets/css/a-guide-to-flexbox/


Bu taşma ile: gizli benim için bir tedavi çalıştı. Teşekkürler.
Alfie

10

overflow: hiddensize doğru davranışı vermelidir. Benim tahminim bu RTLberbat çünkü float: leftkapsüllenmiş divs üzerinde var .

Bu hatanın yanı sıra, doğru davranışa sahip olursunuz.


1
Bunun kapsüllenmiş div'lerde "float: left" olup olmadığını kontrol edeceğim. Ancak, aynı kod Firefox ve Safari'de iyi çalışır, IE'de işe yaramaz. Yani, durumun bundan gerçekten şüpheliyim.
Morgan Cheng


2

Yukarıdakilerin hiçbiri benim için çalışmadı.

Benim durumumda, oluşturduğum kullanıcı denetimine aşağıdakileri eklemem gerekiyordu:

display:inline-block;


1

kullanabilirsiniz

display: table;

konteyner için ve bu nedenle kaçının overflow: hidden;. Sadece çarpıtma amacıyla kullandıysanız bu işi yapmalıdır.


0
<div style="height:200px;width:200px;border:; white-space: nowrap;overflow-x: scroll;overflow-y: hidden;">
   <p>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.
   The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.</p>
</div>

0

Kullan display:flexvewhite-space:nowrap

p{
  display:flex;
  white-space:nowrap;
  overflow:auto;
}
<h2>Sample Text.</h2>

<p>Some example text that will not wrap..lla et dictum interdum, nisi lorem egestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Mauris ante ligula, facilisis sed ornare eu, lobortis in odio. Praesent convallis urna a lacus interdum ut hendrerit risus congue. Nunc sagittis dictum nisi, sed ullamcorper ipsum d</p>

<h3>Then some other text</h3>


-1

<span>Etiketi, bir belgedeki grup inline-elementler için kullanılır.
(kaynak)


Bu doğru olsa da, soruyu hiç ele almıyor gibi görünüyor.
Quentin

Bu, soruyu mükemmel bir şekilde ele alır, çünkü span ve div, div'ın sarılması ve span'ın olmaması dışında everithing'de aynıdır. İstediğiniz geçici çözümleri uygulayabilirsiniz.
Mike

2
Bu, önerinizin "div yerine açıklık kullan" anlamına mı geliyor? Çünkü söylediğin bu değil.
Quentin
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.