2009-05-13 10 views
19

J'ai donc deux divs. Un div gauche avec des liens de navigation et un div droite qui se remplit de contenu en fonction du lien que vous cliquez sur la gauche. Je voudrais avoir une ligne grise verticale entre la navigation et le contenu séparant les deux, mais j'en ai besoin pour changer de hauteur en fonction de la longueur du div contenu du côté droit. (Et aussi si le côté droit n'est pas aussi long que la navigation, laisser la ligne aller au bas de la navigation par défaut). Donc, si l'utilisateur clique sur un lien qui fait vraiment diver le bon contenu, j'ai besoin de la ligne verticale pour changer sa hauteur dynamiquement et descendre, mais si le contenu n'est pas aussi long que le nav J'en ai encore besoin pour aller jusqu'à la fin de la navigation. J'essayais des choses avec des bordures et de la hauteur: 100% mais je ne pouvais pas avoir quelque chose à travailler cross-browser. (IE et FF) Merci!Espacement de ligne verticale entre deux divs

Répondre

18

En supposant que votre div nav gauche a une hauteur fixe, ou une hauteur qui ne change pas souvent. Supposons que votre div nav gauche a une hauteur de 400px. Puis:

div.leftnav { 
    height: 400px; 
    float: left; 
} 

div.rightContent { 
    min-height: 400px; 
    border-left: 1px solid gray; 
    float:left; 
} 

Gardez à l'esprit que "min-height" n'est pas pris en charge par IE6.

8

Une image de fond répétée pour la div parente avec une ligne grise verticale positionnée de manière appropriée serait votre meilleur pari.

+0

D'accord. la solution à hauteur fixe ne fonctionnera pas si le bon contenu est plus long. une image de fond répétitive pour le parent serait beaucoup mieux. – Baer

1

i une fois résolu ce problème en utilisant une image d'arrière-plan repated sur l'axe y. Il suffit de le créer aussi large que votre page et pas très grand, peut-être 10-20 pixels. puis répétez-le simplement vers le bas. Type de triche peut-être, mais cela fonctionne dans certains cas: p

Un exemple de la façon dont je l'ai fait, vous pouvez voir sur this website.

+0

On dirait que nous avons eu la même idée à (à peu près) en même temps! Je ne pense pas que ce soit tromper btw et à certains égards ce que le web dev est tout au sujet (c.-à-d.trouver des «solutions latérales» – da5id

+0

ouais, ça ressemble :) – Svish

8

Vous pouvez laisser la division de navigation avoir une bordure sur la droite, et la div de contenu a une bordure sur la gauche. Laisser ces deux bordures se chevaucher devrait donner l'effet désiré.

+2

Cela ressemble à la solution la plus simple, donnez à l'un des divs une marge latérale négative de la largeur de la frontière – jeroen

+0

Oui merci beaucoup c'est la solution parfaite! – Steve

+0

Je suis d'accord, c'est une solution plus élégante qu'une image de fond répétitive. – bellkev

1

La façon dont je le fais est de mettre les éléments dans un conteneur div avec débordement caché. Vous appliquez ensuite une bordure gauche à tous les divs répétitifs. Ensuite, sur tous les éléments enfants flottants, vous définissez les propriétés css: padding-bottom: 2000px; marge-bas-2000px;

Exemple:

CSS

div.vert-line{overflow:hidden} 
div.vert-line>div+div{border-left:#color;} 
div.vert-line>div{width:200px; float:left; padding-bottom:2000px; margin-bottom:-2000px;} 

HTML

<div class="vert-line> 
    <div>Left Side</div> 
    <div>Right Side</div> 
</div> 

Hope this helps!

+2

http://jsfiddle.net/epeleg/VKqEU/1/ montre cela avec des détails supplémentaires mais comment peut-on avoir de l'espace au-dessus et au-dessous du sperator? – epeleg

0

Vous pouvez utiliser le css border-left sur la droite div.

.vertical_line { border-left: 1px solid #f2f2f2; } 

<div> 
    <p>first div</p> 
</div> 
<div class="vertical_line"> 
    <p>second div</p> 
</div> 
Questions connexes