Bonjour,

j'ai un petit problème de flottant que j'ai résumé de manière la plus simple possible avec le code suivant :



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
  <style type="text/css">
    #conteneur_principal{
      border : 1px solid red;
      height : 100px;
    }
    #header{
      background-color : green;
      height : 100px;
    }
    #menu{
      float:left;
      width : 210px;
      height : 150px;
      background-color : blue
    }

    #contenu_texte{

      background-color : orange;
      height: 300px;
 
    }
    .contenu_texte_ie6{
      clear:left;
      float : right;
  
    }
    #footer{
      clear:left;
      background-color : yellow;
      height : 100px;
      width : 100%;
    }
  </style>

<script src="http://code.jquery.com/jquery-1.3b1.js" type="text/javascript"></script>
        <!--[if IE 6]>
          <script type="text/javascript">
          $(document).ready(function(){
              if (($('#contenu_texte').width()+$('#menu').width())>document.documentElement.offsetWidth){
                $('#contenu_texte').addClass('contenu_texte_ie6');
              }
            }
            );
      
          </script>
        <![endif]-->
</head>
<body>

  <div id="conteneur_principal">
  
    <div id="header"></div>
    <div id="contenu">
      <div id="menu"></div>
      <div id="contenu_texte">azfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbbazfghcghcgccccvcbb</div>

      </div>
    <div id="footer"></div>
  </div>
</body>

</html>



Mon problème est que sous IE6, le div "contenu_texte" passe en-dessous du menu, dès que sa largeur est supérieure à celle de l'ecran (si la largeur est inférieure, ça réagit normalement).

Je pense qu'il s'agit d'un bug lié à IE6.

Existe-t-il une solution de manière à ce que le bloc "contenu_texte" réaigisse normalement dans toutes les situations et ne passe pas sous le menu?

Merci d'avance,

pascal
Modifié par Martala (02 Nov 2009 - 11:20)
Salut,

J'ai du mal à comprendre pourquoi tu mets une largeur de 2500px à ton conteneur texte. Ce ne serait pas plus simple de limiter le contenu à la largeur de l'écran ?
En fait, peu importe la largeur, qu'elle soit supérieure ou non à celle de l'ecran, le bloc ne doit pas aller à la ligne comme si on lui avait appliqué un clear:left.

J'ai volontairement mis 2500px de manière à s"assurer que cette largeur est bien supérieure à une largeur d'ecran.
Dans le cas réél, j'ai un tableau qui comporte plusieurs colonnes et dont la largeur est supérieure du coup à celle de l'écran me retrouvant ainsi avec le même bug que je décris dans ce post.
Salut martala,

Il me semble normal que ton contenu texte passe en dessous de ton menu puisque ce dernier est flotté.
Si tu souhaites que ton contenu texte soit a coté de ton menu et non en dessous, tu as 2 choix:
-une margin-left ( au lieu de ton padding)
- ton contenu texte doit etre en float left egalement

En espérant t'aider
Pardon, effectivement, c'est margin-left que j'avais initialement (j'avais juste fait un test avec padding-left que j'avais oublié d'enlever et qui ne marche pas, j'ai mis à jour le code en-haut).

Justement, tu verras que même avec un margin-left ça ne fonctionne pas Smiley decu

Je ne veux pas utiliser de float pour mon conteneur texte car sinon il va automatiquement à la ligne dès que le contenu dépasse la largeur de l'écran, or je ne veux pas ce comportement, je veux que ça scrolle horizontalement.

Le comportement normal peut être observé sous firefox.

Merci quand même ...
Modifié par Martala (29 Oct 2009 - 17:32)
Martala a écrit :
Pardon, effectivement, c'est margin-left que j'avais initialement (j'avais juste fait un test avec padding-left que j'avais oublié d'enlever et qui ne marche pas, j'ai mis à jour le code en-haut).

Justement, tu verras que même avec un margin-left ça ne fonctionne pas Smiley decu

Je ne veux pas utiliser de float pour mon conteneur texte car sinon il va automatiquement à la ligne dès que le contenu dépasse la largeur de l'écran, or je ne veux pas ce comportement, je veux que ça scrolle horizontalement.

Le comportement normal peut être observé sous firefox.

Merci quand même ...




Dans ce cas essaye peut-être de mettre ton contenu texte en position absolute

#contenu_texte{

position:absolute;
border : 1px solid blue;
top:100px;
left:210px;
width:1500px;
height: 300px;

}
Martala a écrit :
Pardon, effectivement, c'est margin-left que j'avais initialement (j'avais juste fait un test avec padding-left que j'avais oublié d'enlever et qui ne marche pas, j'ai mis à jour le code en-haut).

Justement, tu verras que même avec un margin-left ça ne fonctionne pas Smiley decu

Je ne veux pas utiliser de float pour mon conteneur texte car sinon il va automatiquement à la ligne dès que le contenu dépasse la largeur de l'écran, or je ne veux pas ce comportement, je veux que ça scrolle horizontalement.

Le comportement normal peut être observé sous firefox.

Merci quand même ...




Dans ce cas essaye peut-être de mettre ton contenu texte en position absolute

#contenu_texte{

position:absolute;
border : 1px solid blue;
top:100px;
left:210px;
width:1500px;
height: 300px;

}
Non je ne veux pas le mettre en absolute car sinon ça sort du flux et ça va causer problème au footer qui du coup ne sera plus repoussé vers le bas en fonction du contenu textuel...
Dans ce cas mis à part forcer la taille de conteneur principal je ne vois pas vraiment d'autres solutions.
Bon courage jerem
Je ne veux pas forcer car je veux que la largeur soit élastique et s'adapte au contenu.
En fait, je suis en train de voir s'il existe pas un hack css à appliquer car il s'agit bien ici d'un bug de rendu de IE6..

Merci pour ton aide.
Bonjour,

Martala a écrit :
j'ai un petit problème de flottant que j'ai résumé de manière la plus simple possible avec le script suivant (...)

D'une part, un code HTML n'est pas un script. On parle de script pour des langages de programmation (et plus particulièrement des langages de script) tels que JavaScript ou PHP. HTML ou CSS ne sont pas des langages de script.

D'autre part, ton exemple de code ne comporte pas de Doctype. Est-ce à dire que tu n'utilises pas de Doctype (pas bien, tu diras trois avé et deux pater)?
Question naïve: pourquoi utilises-tu la propriété width pour #contenu_texte et #footer, alors qu'à priori ça ne sert à rien?

En sus, une piste: tu utilises des dimensions fixes pour #contenu_texte, donc cet élément a le layout (faire une recherche sur le HasLayout si concept pas connu), ce qui peut éventuellement poser des problèmes comme l'impossibilité pour un flottant de survoler la marge d'un élément qui a le layout.
Modifié par Florent V. (30 Oct 2009 - 12:13)
Oui effectivement je n'utilise pas de doctype, il faut que je le rajoute. Merci

Pour ce qui est des attributs width :
- j'utilise width : 100% pour le footer de manière à ce qu'il prenne toute la largeur ( sous FF, si je le précise pas, et que la largeur fait plus que celle de l'écran, la largeur du footer sera limitée à la largeur de l'écran).
- j'utilise width : 2500px pour #contenu_texte de manière à s'assurer que sa largeur est plus grande que l'ecran et donc de simuler l'erreur...

En fait je sais pas si j'ai bien su expliquer mon problème .... Smiley decu
Martala a écrit :
- j'utilise width : 100% pour le footer de manière à ce qu'il prenne toute la largeur ( sous FF, si je le précise pas, et que la largeur fait plus que celle de l'écran, la largeur du footer sera limitée à la largeur de l'écran).

Pour ma part j'ignorerai totalement ce paramètre tant que tu n'auras pas une page HTML valide, avec un Doctype, affichée par les navigateurs en mode de respect des standards et non pas en mode Quirks.

Il faut de toute urgence lire l'article suivant: A propos du Modèle de boîte Microsoft (ou "quirks"). Ne jamais, jamais, jamais travailler en mode Quirks.
Ok, là j'ai validé mon HTML (j'ai mis à jour mon code ci-dessous et il passe le validateur du w3c).
Ton article est intéressant, mais malgré le rajout du doctype et l'obtention d'un code valide, j'ai toujours encore le même problème sous IE 6.0, à savoir :
#contenu_texte passe en-dessous de #menu lorsque #contenu_texte a une lergeur supérieure à l'écran. Ce que je ne trouve pas normal!
Je viens de trouver la solution en allant sur la page :

http://css-class.com/articles/explorer/floats/floatandcleartest1.htm

En effet, si ma div #contenu_texte devait dépasser la largeur de l'écran, il faut lui attribuer un clear : left suivi d'un float : right et là, miracle, ça marche : #contenu_texte se place bien à droite du menu positionné en float.

Par contre, si #contenu_texte a une largeur inférieure à celle de l'ecran moins la largeur du menu, #contenu_texte est toujours à côté du menu mais aligné à droite, ce qui n'est pas bon non plus.

J'ai donc simplement rajouté une condition en utilisant jquery après avoir créer un classe spécifique pour IE6 .contenu_texte_ie6:

<!--[if IE 6]>
          <script type="text/javascript">
          $(document).ready(function(){
            if (($('#contenu_texte').width()+$('#menu').width())>document.documentElement.offsetWidth){
              $('#contenu_texte').addClass('contenu_texte_ie6');
            }}
            );
      
          </script>
        <![endif]-->


Je viens de mettre à jour le code au-dessus Smiley cligne