Come fare un DIV non avvolgere?


179

Devo creare uno stile DIV contenitore che contenga più altri DIV. Si chiede che questi DIV non si chiudano se la finestra del browser viene ridimensionata per essere stretta.

Ho provato a farlo funzionare come di seguito.

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

Questo funziona nella maggior parte dei casi. Tuttavia, in alcuni casi speciali, il rendering non è corretto. Ho trovato il contenitore DIV cambiare alla larghezza di 3000 px in RTL di IE7; e diventa disordinato.

Esiste un altro modo per rendere un contenitore DIV da non avvolgere?


ho aggiunto questo tag: white-space: nowrap; e questo tag: overflow del testo: puntini di sospensione; al mio codice
sabre tabatabaee yazdi

Risposte:


245

Prova a utilizzare white-space: nowrap;nello stile contenitore (anziché overflow: hidden;)


48

Se non voglio definire una larghezza minima perché non conosco la quantità di elementi, l'unica cosa che mi ha funzionato è stata:

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

Ma solo in Chrome e Safari: /


33

Quanto segue ha funzionato per me senza virgola mobile (ho modificato un po 'il tuo esempio per effetto visivo):

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

I div possono essere separati da spazi. Se non vuoi questo, usa margin-right: -4px;invece di margin: 5px;for .slide(è brutto ma è un problema difficile da affrontare ).


Bella risposta. Ho aggiunto un esempio simile di seguito, ma l'ho eliminato dopo aver visto il tuo. Se non devi supportare IE9, puoi anche usare flexbox: jsfiddle.net/7gsrb38L/1
ValentinVoilean

È possibile utilizzare i commenti HTML tra i div </div><!-- --><div class="slide">se si desidera rimuovere gli spazi aggiuntivi tra loro. Lo stile del blocco inline fa sì che lo spazio bianco nel codice venga raccolto come spazio nel documento HTML.
Jo.

@Jo. per ridurre le dimensioni della pagina si potrebbe piuttosto usare qualcosa che non è reso ad esempio quando si usa php: </div><?php ?><div class="slide">render come </div><div class="slide">nel codice sorgente.
Fleuv,

Inoltre, se si genera l'HTML con JavaScript è possibile evitare spazi. Uso DOThtml . Il codice HTML sopra può essere sostituito con questo:dot("body").div(dot.iterate(4, function(i){return dot.div("something something something something").class("slide");})).class("container")
JSideris,

30

La combinazione di cui hai bisogno è

white-space: nowrap

sul genitore e

display: inline-block; // or inline

sui bambini


25

Questo ha funzionato per me:

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


Questo con troppopieno: nascosto ha funzionato a meraviglia per me. Grazie.
Alfie

10

overflow: hiddendovrebbe darti il ​​comportamento corretto. La mia ipotesi è che RTLè incasinato perché hai float: lefti messaggi incapsulati div.

Oltre a quel bug, hai il comportamento giusto.


1
Controllerò se è dovuto a "float: left" su div incapsulati. Ma lo stesso codice funziona bene su Firefox e Safari, ma non su IE. Quindi, dubito davvero che sia così.
Morgan Cheng,


2

Nessuna delle precedenti ha funzionato per me.

Nel mio caso, avevo bisogno di aggiungere quanto segue al controllo utente che avevo creato:

display:inline-block;


1

Puoi usare

display: table;

per il vostro contenitore e quindi evitare il overflow: hidden;. Dovrebbe fare il lavoro se lo hai usato solo per scopi di deformazione.


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

Usa display:flexewhite-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

Il <span>tag viene utilizzato per raggruppare elementi incorporati in un documento.
(fonte)


Sebbene ciò sia vero, non sembra rispondere affatto alla domanda.
Quentin,

Questo risponde perfettamente alla domanda perché span e div sono identici in everithing tranne che div è racchiuso e span no. E puoi implementare qualsiasi soluzione alternativa desideri.
Mike,

2
Ciò significa che il tuo suggerimento è "Usa span invece di div"? Perché non è quello che hai detto.
Quentin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.