28173 sujets

CSS et mise en forme, CSS3

Bonjour,

J'ai un souci sur lequel je planche depuis plusieurs jours...

(L'image décrivant le problème est en fin de message)

Pour faire un bloc sur deux colonnes, j'ai un div en float left (taille fixe, menu sur l'image) et un div avec une marge gauche (contenant le select sur l'image).

Dans le div droit j'ai plusieurs div me permettant de faire une bordure arrondie, avec des coins en position absolue et des bordures à 100%. Dans ce div de droite, j'ai un second div pour le contenu.

Le problème c'est que lorsque le div de droite contient un élément trop grand comme un select, le select passe sous la bordure de droite au lieu de la repousser vers la droite...

Une portion du css:


body {
-khtml-appearance: none;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #6b6a6a;
background-color: #ffffff;
background-image: url(images/generalBackground.jpg);
background-position: top;
background-repeat: repeat-x;
margin: 0px 15px 20px 15px;
padding: 0px 0px 0px 0px;
-padding-right: 742px; /* permet de simuler le min-width pour IE6 */
}

/*-----------------------------------
div contenant la page
-----------------------------------*/

#general {
position: relative;
display: block;
width: 100%;
background-color: transparent;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
}


/*-----------------------------------
contenu tout le centre
-----------------------------------*/

#contenuDuCentreLargeurTotale {
display: block;
width: 100%;
height: 100%;
-overflow-y: hidden;
}


/*-----------------------------------
contenu gauche
-----------------------------------*/

#contenuGauche {
display: block;
position: relative;
float: left;
top: 0px;
left: 0px;
text-align: left;
width: 195px;
height: 100%;
}

/*-----------------------------------
contenu centre
-----------------------------------*/

#contenuCentre {
z-index: 1;
text-align: left;
position: relative;
display: block;
background-color: #ffffff;
width: auto;
margin: 0px 0px 0px 205px;
overflow: visible;
-overflow-y: hidden; /* IE6 */
}


/* ensuite tous les divs pour faire le contour que je ne joins pas ici car un peu long*/

...

/*-----------------------------------
contenu contenucentre
*/

#contenuCentre .contenu {
z-index: 1;
position: relative;
display: block;
background-color: transparent;
padding: 20px 15px 20px 15px;
margin: 0px 0px 0px 0px;
height: 100%;
-overflow-y: hidden;
-margin-top: 10px; /* IE6 */
overflow: visible; 
}



Le code (très simplifié) de la page:


<body>
  <div id="general">
    <div id="contenuDuCentreLargeurTotale">
      <div id="#contenuGauche">
      ... le menu ...
      </div>
      <div id="contenuCentre">
         ... les div pour faire le contour haut et gauche...
         <div class="contenu">
           ... un formulaire, avec le [b]select[/b] qui pose problème ...
         </div>
         ... les div pour faire le contour droit et bas ...
      </div>
    </div>
  </div>
</body>


Le tout avec une DTD Transitionnal

Voilà, même sans lire le code que je joins, quelqu'un aurait-il une solution pour qu'un div "habillé" de contours et avec une marge gauche s'adapte bien à son contenu ??

Merci d'avance. upload/14628-exemple.gif
Modifié par steevest (03 Nov 2007 - 14:43)
Hello,

Ce sujet est "un peu" vieux déjà, mais comme il n'avait pas de réponse, je le repousse en haut.

Déjà, combien de DIV utilises tu pour faire ta bordure ? En principe 2 suffisent si tu as un layout bien défini (genre 1024x768).

Je pense que ton problème vient du fait que le conteneur est limité à 100%. Oui, limité dans le sens où comme son nom l'indique, il prend toute la place disponible dans ton navigateur, MAIS ne s'agrandira pas par la suite (sauf si tu agrandis la fenêtre du navigateur).

Donc ton width: auto du conteneur interne ne changera rien, puisque lui aussi ne pourra prendre, au maximum , que 100% de la place (moins les marges), et ne fera pas apparaître de scrollbars si son contenu le force à s'agrandir.

J'espère que je suis clair et que je ne me trompe pas Smiley smile
D'autres confirmeront/infirmeront mes dires.

EDIT : En gros mets des width:auto à tous tes conteneurs, car à partir du moment où un conteneur est limité en taille (même 100% est une limite), ses enfants ne pourront pas le dépasser (sauf dans certains cas "weird")
Modifié par Lideln (06 Nov 2007 - 09:15)
Bonjour et merci pour ton aide, mais ça ne parche pas sur IE6, je pense que c'est à cause de la simulation du min-width pour IE6, car si je mets width: auto à tous les conteneurs, tous les éléments de fond sont recroquevillés sur quelques pixels à gauche...
Lideln a écrit :
J'espère que je suis clair et que je ne me trompe pas Smiley smile
D'autres confirmeront/infirmeront mes dires.

Jusqu'ici il me semble que c'est tout bon.

La suite un peu moins:
Lideln a écrit :
EDIT : En gros mets des width:auto à tous tes conteneurs, car à partir du moment où un conteneur est limité en taille (même 100% est une limite), ses enfants ne pourront pas le dépasser (sauf dans certains cas "weird")

Les enfants d'un bloc peuvent très bien déborder du bloc:
- en hauteur et/ou en largeur, si les enfants en question sont positionnés en absolu (voir en relatif avec un décalage);
- en hauteur, si les enfants en question sont flottants et en l'absence de mécanisme empêchant le dépassement des flottants;
- en hauteur, si la hauteur du bloc est figée (via la propriété height) et que le contenu est plus important;
- en largeur, si la largeur des éléments enfants est plus grande que la largeur du bloc parent, que cette largeur du bloc parent soit spécifiée (via la propriété width, ou via un max-width) ou simplement déduite (le bloc fait toute la largeur disponible dans son conteneur, moins les marges).

On est ici dans le dernier cas: le bloc a une largeur donnée, qui est déduite, et tous ses enfants ou descendants trop larges (images, chaines de caractères continues, éléments de formulaire, blocs ayant une largeur spécifiée...) dépasseront allègrement.

Pour résumer: c'est normal, c'est censé marcher comme ça.

Et un indice pour la suite: les tableaux, les cellules de tableaux et les éléments en display: table ou display: table-cell s'élargissent lorsque leur contenu est trop important. Smiley cligne