[css] mettre 2 div côte à côte sans sortir du flux

mettre 2 div côte à côte sans sortir du flux [css] - HTML/CSS - Programmation

Marsh Posté le 17-04-2011 à 16:51:05    

Bonjour,
Je poste ici car j'ai essayé beaucoup de choses et les exemples/tutos sont difficilement adaptables à ma situation, donc je désespère un peu...
Mon site comporte pas mal de div, ce qui m'a obligé à faire un div de contenu au centre de la page.
 
Au final je me retrouve avec un grand div "CentreD" qui est en position:relative et dedans je souhaite mettre deux div côté à côté (style classique |menu| |corps|).
Mais [:icon4] grand zut ET c'est la où est le problème : je veut que le grand div centreD s'agrandisse en fonction du contenu des deux autres div (menu et corps) et je ne peut donc pas utiliser de float ou autre astuces qui font sortir les div du flux et donc qui en cas de contenu trop grand dépasse du grand div "centreD"...
 
exemple si "corps" dispose d'un grand contenu et agrandi automatiquement "centreD"
.....................div centreD..............                
.| menu | |                                 |.
.|         | |                                 |.
.|         | |             div                |.
.|_____ | |           corps               |.
.             |                                 |.    
.             |                                 |.
...................................................
ou si "menu" comporte plus de contenu que "corps" :
.....................div centreD..............
.| menu | |                                 |.
.|         | |                                 |.
.|         | |             div                |.
.|         | |           corps               |.
.|         | |____________________ |.  
.|         |                                                                .
.............................................................................
En gros je veut ce schéma MAIS SANS l'utilisation de float ou autre techniques qui casse le flux et donc fait dépassé le contenu de centreD.
 
 
voila mon code si ça intéresse mais le problème est que même en imbriquant les div, la position:relative amène à la ligne...
 
fichier html :

Code :
  1. <div id="centreD">
  2.     <div id="menu">
  3.            <br/>rubrique1<br/>rubrique2<br/>rubrique3<br/>rubriqueN<br/>enfin menu latéral quoi...
  4.     </div>
  5.     <div id="corps">
  6.           blablablabla texte qui montre des choses zuperzoli...<br/>blablablabla texte qui montre des choses zuperzoli...<br/>blablablabla texte qui montre des choses zuperzoli...<br/>blablablabla texte qui montre des choses zuperzoli...<br/>........
  7.     </div>
  8. </div><!--centreD-->


 
fichier CSS :

Code :
  1. #centreD
  2. {
  3. position:relative;
  4. background-image: url("../images/BORDURE DROITE.jpg" );
  5. background-repeat: repeat-Y;
  6. background-position:right;
  7. }
  8. #menu
  9. {
  10. position:relative;
  11. width:100%;
  12. border:1px solid green;
  13. }
  14. #corps
  15. {
  16. width: 61%;
  17. margin-left:auto;
  18. margin-right:auto;
  19. margin-top:55px;
  20. margin-bottom:45px;
  21. min-height:300px;
  22. border:1px solid red;
  23. }


 
si vous essayez mon code avec un float ou autre, pensez à ajouter beaucoup de texte pour remplir menu ou corps (et voir si ils dépassent de centreD)
 
En remerciant d'avance ceux qui sont prêt à essayer ou à m'aider dans mon petit problème :p

Reply

Marsh Posté le 17-04-2011 à 16:51:05   

Reply

Marsh Posté le 19-04-2011 à 10:57:29    

Normalement on doit pvoir arranger ça avec display: inline-block, mais ça reste encore parfois compliqué pr obtenir le meme rendu sur tt les navigateurs.

 

Le bon vieux truc qui marche bien :

 

Tu met donc dans ton div principal tes deux colonnes en float,
et un troisieme bloc, tjrs dans ton div principale, avec la propriété clear: both;

 

Si tes deux colonnes et ce bloc sont de type bloc, ce troisieme bloc restera en dessous des deux en float, et comme il est dans le flux, ton conteneur s'agrandira en hauteur de façon a l'englober.

 
Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Document sans nom</title>
  6. <style type="text/css">
  7.     body{
  8.         background: #000;
  9.         margin: 0;
  10.         padding: 0;
  11.     }
  12.  
  13.     #conteneur{
  14.         background: #FFF;
  15.         width: 700px;
  16.        margin: 0 auto;
  17.    }
  18.  
  19.    #colonne1{
  20.        float: left;
  21.        width: 250px;
  22.        height: 400px;
  23.        background: #F00;
  24.    }
  25.  
  26.    #colonne2{
  27.        float: left;
  28.        width: 450px;
  29.        height: 200px;
  30.        background: #FF0;
  31.    }
  32.  
  33.    .clear{
  34.        clear: both;
  35.    }
  36. </style>
  37. </head>
  38. <body>
  39.    <div id="conteneur">
  40.         <div id="colonne1">colonne1</div>
  41.         <div id="colonne2">colonne2</div>
  42.        <div class="clear"></div>
  43.    </div>
  44. </body>
  45. </html>
 

FF et IE7/8 approved (et surement IE6 aussi je m'en occupe plus perso)
(et avec de jolies couleurs pr picouiller les yeux :D)

 

PS : et si tu a un footer en bas  de ton contenu pas besoin d'un div exprès pr le clear, le footer s'en charge.


Message édité par vanish le 19-04-2011 à 11:14:00
Reply

Marsh Posté le 19-04-2011 à 21:19:50    

Merci, cela peut être très utile pour pas ce prendre la tête :p
 
j'avais plus ou moins résolu mon problème avec des "display : table-cell" qui reviennent à faire un tableau de divs (à englober dans un display: block ou table-row).
Mais j'ai eu un petit problème avec les tables-cell et IE8, pour aligner une image et du texte dans deux div collés donc je vais enfin pouvoir virer un <table> qui trainait ^^

Reply

Marsh Posté le 19-04-2011 à 21:22:41    

:)
 
et pi si c'est pr faire des tableaux en div autant continuer sur les table de base lol ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed