Comment faire en sorte qu'un DIV ne soit pas enveloppé?

179

J'ai besoin de créer un style DIV contenant plusieurs autres DIV. Il est demandé que ces DIV ne s'enroulent pas si la fenêtre du navigateur est redimensionnée pour être étroite.

J'ai essayé de le faire fonctionner comme ci-dessous.

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

Cela fonctionne dans la plupart des cas. Cependant, dans certains cas particuliers, le rendu est incorrect. J'ai trouvé que le conteneur DIV passait à 3000px de largeur dans RTL de IE7; et cela s'avère compliqué.

Existe-t-il un autre moyen de ne pas emballer un conteneur DIV?

Morgan Cheng
la source
j'ai ajouté cette balise: white-space: nowrap; et cette balise: text-overflow: ellipsis; à mon code
sabre tabatabaee yazdi

Réponses:

245

Essayez d'utiliser white-space: nowrap;dans le style conteneur (au lieu de overflow: hidden;)

notkwite
la source
48

Si je ne veux pas définir une largeur minimale parce que je ne connais pas la quantité d'éléments, la seule chose qui a fonctionné pour moi était:

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

Mais uniquement dans Chrome et Safari: /

fguillen
la source
33

Ce qui suit a fonctionné pour moi sans flotter (j'ai modifié un peu votre exemple pour un effet visuel):

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

Les div peuvent être séparés par des espaces. Si vous ne voulez pas cela, utilisez à la margin-right: -4px;place de margin: 5px;for .slide(c'est moche mais c'est un problème délicat à résoudre ).

JSideris
la source
Très bonne réponse. J'ai ajouté un exemple similaire ci-dessous mais je l'ai supprimé après avoir vu le vôtre. Si vous n'avez pas à prendre en charge IE9, vous pouvez également utiliser flexbox: jsfiddle.net/7gsrb38L/1
ValentinVoilean
Vous pouvez utiliser des commentaires HTML entre les divs </div><!-- --><div class="slide">si vous souhaitez supprimer les espaces supplémentaires entre eux. Le style de bloc en ligne fait que l'espace blanc dans votre code est pris comme espace dans le document HTML.
Jo.
@Jo. pour réduire la taille de la page, vous pouvez plutôt utiliser quelque chose qui n'est pas rendu, par exemple lors de l'utilisation de php: </div><?php ?><div class="slide">renders comme </div><div class="slide">dans le code source.
Fleuv
De plus, si vous générez le HTML avec JavaScript, vous pouvez éviter les espaces. J'utilise DOThtml . Le code HTML ci-dessus peut être remplacé par ceci:dot("body").div(dot.iterate(4, function(i){return dot.div("something something something something").class("slide");})).class("container")
JSideris
30

Le combo dont vous avez besoin est

white-space: nowrap

sur le parent et

display: inline-block; // or inline

sur les enfants

Funkodebat
la source
25

Cela a fonctionné pour moi:

.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
la source
Ceci avec débordement: caché a fonctionné un régal pour moi. Merci.
Alfie
10

overflow: hiddendevrait vous donner le bon comportement. Je suppose que RTLc'est foiré parce que vous avez float: leftsur le par div.

En plus de ce bug, vous avez le bon comportement.

Yuval Adam
la source
1
Je vais vérifier si cela est dû à "float: left" sur les div encapsulés. Mais le même code fonctionne bien sur Firefox et Safari, mais pas sur IE. Donc, je doute vraiment que ce soit le cas.
Morgan Cheng
2

Essayez d'utiliser width: 3000px;pour le cas d'IE.

Andres GR
la source
2

Aucune de ces réponses n'a fonctionné pour moi.

Dans mon cas, j'avais besoin d'ajouter ce qui suit au contrôle utilisateur que j'avais créé:

display:inline-block;
J-DawG
la source
1

vous pouvez utiliser

display: table;

pour votre conteneur et donc éviter le overflow: hidden;. Il devrait faire le travail si vous l'avez utilisé uniquement à des fins de déformation.

Paka
la source
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
la source
0

Utiliser display:flexetwhite-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
la source
-1

La <span>balise est utilisée pour regrouper des éléments en ligne dans un document.
(la source)

Mike
la source
Bien que cela soit vrai, cela ne semble pas du tout répondre à la question.
Quentin
Cela répond parfaitement à la question car span et div sont identiques dans everithing sauf que div est enveloppé et span ne l'est pas. Et vous pouvez mettre en œuvre les solutions de contournement que vous souhaitez.
Mike
2
Cela signifie-t-il que votre suggestion est "Utiliser des étendues au lieu de div"? Parce que ce n'est pas ce que tu as dit.
Quentin