2010-06-18 6 views
3

J'ai quelque chose comme suit:Faire un div parent défilement vertical qui ne provoque pas de débordement des enfants

<div style="float: left; height: 20px; overflow-y: scroll"> 
    <div>hello this is a test</div> 
    <div>hello this is another test</div> 
    <div>t1</div> 
    <div>t2</div> 
    <div>t3</div> 
</div> 

Le div parent pousse à la largeur appropriée pour tenir le plus grand enfant (qui est ce que je veux). Cependant, la barre de défilement verticale entraîne une réduction de la largeur interne, ce qui entraîne l'enroulement de l'enfant le plus grand.

Existe-t-il un moyen d'amener le parent à la largeur du plus grand enfant + la largeur de la barre de défilement? J'ai essayé chaque tour de marge que je connais, mais rien.

+0

Votre exemple fonctionne très bien pour moi (IE8, FF3.5.9) - il n'y a pas d'emballage, mais en FF j'ai dû augmenter la hauteur à 40px pour pouvoir voir et utilisez la barre de défilement. –

+0

Oui désolé, l'échantillon fonctionne mieux s'il est un peu plus grand pour voir la barre de défilement. J'ai IE8 et chrome, et ce que je vois est que le deuxième enfant a le mot "test" débordement à la ligne suivante (au lieu d'être sur une ligne). – marq

Répondre

0

Trouvé une solution, mais ouvert à d'autres suggestions.

En ajoutant un enfant droit flottant au plus long enfant (ou, en cas de doute qui est le plus long enfant, à chaque élément):

<style type="text/css"> 
.stretcher { float: right; right: -50px; width: 50px; height: 1px; } 
</style> 

<div style="float: left; height: 20px; overflow-y: scroll"> 
    <div>hello this is a test</div> 
    <div>hello this is another test<div class="stretcher"></div></div> 
    <div>t1</div> 
    <div>t2</div> 
    <div>t3</div> 
</div> 
0

Ajout d'un certain remplissage horizontal est suffisante dans mes tests avec IE6/7

<div style="float: left; height: 50px; overflow-y: scroll; padding: 0 50px 0 4px;"> 
    <div>hello this is a test</div> 
    <div>hello this is another test lorem ipsum</div> 
    <div>t1</div> 
    <div>t2</div> 
    <div>t3</div> 
</div> 
+0

Padding fonctionne avec IE et Firefox, mais pas avec Chrome et Safari. Merci pour le conseil, cependant! – marq

+0

Et j'ai seulement testé dans Firefox et IE, bien sûr ... – FelipeAls

0

J'ai eu le même problème précédemment mais je ne pense pas qu'il soit possible d'augmenter la taille d'un élément dynamiquement en utilisant CSS. Mais ce que vous pouvez essayer est d'ajuster la hauteur dynamiquement en utilisant Javascript.

Dans jQuery, vous pouvez utiliser la méthode height() à chaque fois que vous ajoutez ou supprimez un élément enfant au parent.

Je l'ai fait dans un de mes projets, mais il y avait encore des problèmes avec Opera (IE était bien;)). Mais comme nous n'avons pas beaucoup de clients utilisant Opera, j'ai ignoré le problème.

FYI: J'ai simplement parcouru votre question. Corrigez-moi si je n'ai pas bien compris votre problème

+0

Salut Ashit, mon problème était en fait horizontal, pas vertical. Je veux que l'élément parent s'étende horizontalement pour convenir à tous les enfants sans les emballer, et pour montrer une barre de défilement verticale s'il y a beaucoup d'enfants. – marq

Questions connexes