Wie macht man einen DIV nicht wickeln?

179

Ich muss einen Container-DIV-Stil erstellen, der mehrere andere DIVs enthält. Es wird darum gebeten, dass diese DIVs nicht umbrochen werden, wenn die Größe des Browserfensters auf eine enge Größe geändert wird.

Ich habe versucht, es wie unten zu machen.

<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>

Dies funktioniert in den meisten Fällen. In einigen besonderen Fällen ist das Rendern jedoch falsch. Ich habe festgestellt, dass der Container DIV in RTL von IE7 auf 3000px Breite geändert wurde. und es wird unordentlich.

Gibt es eine andere Möglichkeit, einen Container DIV nicht zu verpacken?

Morgan Cheng
quelle
Ich habe dieses Tag hinzugefügt: white-space: nowrap; und dieses Tag: Textüberlauf: Auslassungspunkte; zu meinem Code
Säbel tabatabaee yazdi

Antworten:

243

Versuchen Sie es white-space: nowrap;im Container-Stil (anstelle von overflow: hidden;)

notkwite
quelle
48

Wenn ich keine minimale Breite definieren möchte, weil ich die Anzahl der Elemente nicht kenne, hat mir nur Folgendes geholfen:

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

Aber nur in Chrome und Safari: /

fguillen
quelle
33

Folgendes hat bei mir ohne Schweben funktioniert (ich habe Ihr Beispiel ein wenig geändert, um einen visuellen Effekt zu erzielen):

.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>

Die Divs können durch Leerzeichen getrennt sein. Wenn Sie dies nicht möchten, verwenden Sie margin-right: -4px;statt margin: 5px;für .slide(es ist hässlich, aber es ist ein schwieriges Problem, damit umzugehen ).

JSideris
quelle
Gute Antwort. Ich habe unten ein ähnliches Beispiel hinzugefügt, es aber gelöscht, nachdem ich deins gesehen habe. Wenn Sie IE9 nicht unterstützen müssen, können Sie auch flexbox verwenden: jsfiddle.net/7gsrb38L/1
ValentinVoilean
Sie können HTML-Kommentare zwischen den Divs verwenden, </div><!-- --><div class="slide">wenn Sie die zusätzlichen Leerzeichen zwischen ihnen entfernen möchten. Der Inline-Block-Stil bewirkt, dass der Leerraum in Ihrem Code als Leerzeichen im HTML-Dokument aufgenommen wird.
Jo.
@ Jo. Um die Seitengröße zu reduzieren, können Sie lieber etwas verwenden, was nicht gerendert wird, z. B. bei Verwendung von PHP: </div><?php ?><div class="slide">Renderings wie </div><div class="slide">im Quellcode.
Fleuv
Wenn Sie HTML mit JavaScript generieren, können Sie außerdem Leerzeichen vermeiden. Ich benutze DOThtml . Der obige HTML- dot("body").div(dot.iterate(4, function(i){return dot.div("something something something something").class("slide");})).class("container")
Code
30

Die Combo, die Sie brauchen, ist

white-space: nowrap

auf die Eltern und

display: inline-block; // or inline

auf die Kinder

Funkodebat
quelle
25

Das hat bei mir funktioniert:

.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/

Turako
quelle
Dies mit Überlauf: versteckt hat mir sehr gut gefallen. Vielen Dank.
Alfie
10

overflow: hiddensollte Ihnen das richtige Verhalten geben. Meine Vermutung ist, dass RTLdas durcheinander ist, weil Sie float: leftauf dem eingekapselten divs haben.

Neben diesem Fehler haben Sie das richtige Verhalten.

Yuval Adam
quelle
1
Ich werde prüfen, ob es an "float: left" auf gekapselten Divs liegt. Der gleiche Code funktioniert jedoch auch in Firefox und Safari, nur nicht im Internet Explorer. Ich bezweifle wirklich, dass dies der Fall ist.
Morgan Cheng
2

Versuchen Sie, width: 3000px;für den Fall von IE zu verwenden.

Andres GR
quelle
2

Keines der oben genannten hat bei mir funktioniert.

In meinem Fall musste ich dem von mir erstellten Benutzersteuerelement Folgendes hinzufügen:

display:inline-block;
J-DawG
quelle
1

Sie können verwenden

display: table;

für Ihren Container und vermeiden Sie deshalb die overflow: hidden;. Es sollte den Job machen, wenn Sie es nur zum Verzerren verwendet haben.

Paka
quelle
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>
Anil Khatour
quelle
0

Verwenden Sie display:flexundwhite-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>

Kishore
quelle
-1

Das <span>Tag wird verwendet, um Inline-Elemente in einem Dokument zu gruppieren.
(Quelle)

Mike
quelle
Dies ist zwar wahr, scheint aber die Frage überhaupt nicht zu beantworten.
Quentin
Dies spricht die Frage perfekt an, da span und div in jeder Hinsicht identisch sind, außer dass div umwickelt ist und span nicht. Und Sie können beliebige Problemumgehungen implementieren.
Mike
2
Bedeutet das, dass Ihr Vorschlag "Spannen anstelle von Divs verwenden" lautet? Weil du das nicht gesagt hast.
Quentin