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?


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


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


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


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


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/


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.


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

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;


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.


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

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>


-1

La <span>balise est utilisée pour regrouper des éléments en ligne dans un document.
(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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.