IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

problème mise en forme de balises ul li dans IE 6


Sujet :

CSS

  1. #1
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut problème mise en forme de balises ul li dans IE 6
    Bonjour à tous,

    j'ai besoin d'un coup de main pour la mise en forme d'une liste que j'utilise pour créer un menu déroulant. Ca fait deux jours que je coince sur un problème assez génant. D'abord je vous explique ce que je veux faire:

    Je voudrais créer un menu avec deux premiers niveaux horizontaux, puis les niveaux suivant à la verticale, par exemple:

    Menu1 Menu2 Menu3
    Menu1.1 Menu1.2
    Menu 1.1.1
    Menu 1.1.2

    Le code source ci dessous fonctionne comme je le souhaite dans Firefox 1.5, mais dans IE 6 la deuxième barre de menu apparait "écrasée" horizontalement et donc sur plusieurs lignes, et c'est illisible.

    J'ai mis le javascript avec même si le problème est dans la mise en forme pour que se soit testable directement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <html>
    <head>
    <script type="text/javascript">
    function hover(obj){
    	UL = obj.getElementsByTagName('ul');
        if(UL.length > 0){
          sousMenu = UL[0].style;
          	if (sousMenu.display == 'none'||sousMenu.display == ''){
          		sousMenu.display = 'block';
          	}else{
          	    sousMenu.display = 'none';
          	}	
       }
    }
    function setHover(){
      LI = document.getElementById('menu').getElementsByTagName('li');
      nLI = LI.length;
      for(i=0; i < nLI; i++){
        LI[i].onmouseover = function(){
          hover(this);
          }
       LI[i].onmouseout = function(){
          hover(this);
        }
      }
      }
     
    </SCRIPT>
    <style type="text/css">
    li.horiz {
    display: block;
    float: left;
    padding-right: 0.2em;
    }
    ul {list-style:none;
    margin-left: 0px;
    padding-left: 0px;
    display: none;
    position: absolute;
    left: 0px;
    width: 100%
    }
    ul#menu{
    display: block;
    position: abxolute;
    left: 0px;
    }
    </style>
    </head>
    <body onload="setHover()">
    <UL id="menu">
    <LI class= "horiz">Item 1
       <UL>
          <LI class= "horiz">Sub Item 1.1
         <ul>
             <LI>Super Sub Item 1.1
             <LI>Super Sub Item 1.2
          </ul>
          <LI class= "horiz">Sub Item 1.2
          <LI class= "horiz">Sub Item 1.3
       </UL>		
    <LI class= "horiz">Item 2
       <UL>
          <LI class= "horiz">Sub Item 2.1
          <LI class= "horiz">Sub Item 2.2
       </UL>
    <LI class= "horiz">Item 3
    </UL>
    </BODY>
    </HTML>
    Voilà, si quelqu'un peut m'aider à obtenir le même résultat dans les deux navigateurs, voire même simplement avoir le rendu correct dans IE à la rigueur, çà m'aiderait beaucoup.

    Merci d'avance.

  2. #2
    Membre éclairé
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Points : 663
    Points
    663
    Par défaut
    qu'est-ce que c'est que ce code pourri!?!?! On ferme les balises, sioulplait!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <UL id="menu">
    <LI class= "horiz">Item 1</li>
       <UL>
          <LI class= "horiz">Sub Item 1.1</li>
         <ul>
             <LI>Super Sub Item 1.1</li>
             <LI>Super Sub Item 1.2</li>
          </ul>
          <LI class= "horiz">Sub Item 1.2</li>
          <LI class= "horiz">Sub Item 1.3</li>
       </UL>		
    <LI class= "horiz">Item 2</li>
       <UL>
          <LI class= "horiz">Sub Item 2.1</li>
          <LI class= "horiz">Sub Item 2.2</li>
       </UL>
    <LI class= "horiz">Item 3</li>
    </UL>
    Et pour la mise en page, tu peux ajouter ça dans ta feuille de style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LI{
      white-space: nowrap;
    }

  3. #3
    Membre éclairé
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Points : 663
    Points
    663
    Par défaut
    z'ai pas regardé ton code en entier

    faut ajouter dans

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Pense à mettre toutes tes balises en minuscules
    Un petit conseil (qui va te faire gagner du temps et qui fera gagner du temps de chargement aux personnes qui viendront voir ton site) : au lieu de faire class= "horiz" dans tous les li de ton menu, tu ne mets rien et pour leur filer un style dans le fichier CSS tu fais #menu li {...}

  5. #5
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Oui désolé pour les balises c'est du code repompé sur le web et je l'ai vu qu'après avoir posté. Bon j'ai essayé pas mal de trucs depuis ce midi nottament essayer avec des div au lieu de listes ul... toujours la même histoire, çà passe niquel dans firefox et çà ne passe pas dans IE.
    Voici le code à ce stade de mes recherches:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!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="en">
    <head>
    <title>Test page </title>
    <script type="text/javascript">
    function hover(obj){
    	ssMenu = obj.getElementsByTagName('div');
        if(ssMenu.length > 0){
          sousMenu = ssMenu[0].style;
          	if (sousMenu.display == 'none'||sousMenu.display == ''){
          		sousMenu.display = 'block';
          	}else{
          	    sousMenu.display = 'none';
          	}	
       }
    } 
    </script>
    <style type="text/css">
    div {
    	float: left; 
    	padding-right: 30px;
    	display:block;
    	white-space: nowrap;
    }
    div.menu {
    	position: absolute;
    	left: 0 px;
    	top: 0px;
    	width: 100%;
    }
    div.menubar { 
    	position: absolute;
    	left: 0px;
    	top: 20px;
    }
    </style>
    </head>
    <body >
    <div class="menu" id="menu">
    	<div onmouseover="hover(this)" onmouseout="hover(this)">Item 1
    		<div class="menubar">
    			<div>Sub Item 1.1</div>
    			<div>Sub Item 1.2</div>
    			<div>Sub Item 1.3</div>
    		</div>
    	</div>
    	<div onmouseover="hover(this)" onmouseout="hover(this)">Item 2
    		<div class="menubar">
    			<div>Sub Item 2.1</div>
    			<div>Sub Item 2.2</div>
    		</div>
    	</div>
    	<div onmouseover="hover(this)" onmouseout="hover(this)">Item 3</div>
    </div>
    </BODY>
    </HTML>
    Je l'ai largement simplifié, histoire de me concentrer sur le problème. L'idée est maintenant d'avoir juste les deux lignes de menu horizontales. Par contre la deuxième ligne doit commencer au même niveau que la première, quelque soit le sous menu affiché. Je sais pas si çà vous parait clair, sinon testez le script ci dessus sous firefox, c'est exactement ce que je veux.
    J'ai testé le white-space, çà me permet d'avoir les éléments de sous menus sur une seule ligne dans IE, mais les div eux mêmes s'affichent toujours l'un en dessous de l'autre, donc çà ne résoud qu'une partie du problème.

    Merci de vos réponses en tout cas

  6. #6
    Membre éclairé
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Points : 663
    Points
    663
    Par défaut
    un div implique forcément un retour à la ligne, si tu n'en veux pas c'est un span qu'il faut utiliser

  7. #7
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Ton menu ne peux pas fonctionner : tu fais la même chose que la souris passe sur un élément de la liste ou qu'il en sorte.
    Utilise ul et li au lieu des div.

  8. #8
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Eric > mes div sont des blocs flottants (display: block et float:left), donc çà n'entraine pas forcément de retour à la ligne. D'ailleurs si çà implique un retour à la ligne, pourquoi est ce que firefox ne le fait pas?

    trotters> Ma fonction javascript gère les deux cas, donc effectivement je fais la même chose que j'entre dans le div ou que j'en sorte, c'est normal. Et sinon j'ai essayé la même chose avec ul et li, et j'ai un résultat similaire, ce qui se tient, puisque les ul li ont globalement le même comportement que div mais avec des options en plus.

    Peut être avez vous remarqué que j'ai retiré la partie css qui cache les menus par défaut. Ce qui m'étonne le plus, c'est qu'en fait au chargement mes div sont bien placé même dans IE. Je ne sais pas si çà fait la même chose chez vous, mais j'ai l'impression que par défaut ie n'affecte pas un display "block" aux div (alors que c'est dans mon CSS), mais plutôt une valeur indéfinie, que dans ce cas les div se placent correctement, puis quand on remet un display "block" par javascript ie perd les pédales.

    Merci de suivre mon problème en tout cas, parce que je commence à avoir une attaque de css au cerveau et je voit des <div> et des <li> partout ou je regarde. Je pense que mon quotat de résistance au désir de lancer mon PC par la fenêtre va bientôt être atteint.

    PS : Eric > En fait tes balises span, çà vient de me donner une idée pour arriver à mon résultat initial. Je teste et je vous dis si çà le fait ou pas.

  9. #9
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    Salut,

    Je ne sais pas si ca va résoudre ton souci, mais je crois que l'origine du problème vient du fait que lorsque tu fais un float, la largeur s'adapte au contenu.

    Je ne connais pas les détails mais l'algorithme d'IE est différent de autres, à croire qu'il maximise le nombre de sauts de ligne.

    Le 100% que tu mets sur tes ul est relatif au parent. Je serais toi, j'essaierai d'enlever la largeur.
    Je pense qu'une vrai solution consiste à éviter les float left, en mettant des display: inline; par exemple.

    Tu as quelques erreurs de syntaxes dans ton css, j'ai repéré qu'il manquait un ; et tu as un abxolute dans ton code.

    Je pense que le validateur css devrait t'aider.

  10. #10
    Membre du Club Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Bon j'ai en partie résolu le problème grâce aux balises <span>. Merci à Eric pour cette idée. En fait si on reprend le deuxième code source que j'ai posté et qu'on remplace les <div> Sub Item </div> par des <span>, çà fonctionne dans les deux navigateurs.

    Par contre j'ai essayé de placer des listes ul à l'interieur des balises <span>, mais le placement ne se fait pas correctement dans les deux navigateurs. Je n'ai pas trop poussé la recherche, j'ai supposé qu'on ne peut pas mettre de bloc avec retour à la logne dans une balise span. Si quelqu'un peu me confirmer ou infirmer cela çà m'interesse.

    Je ne vais pas chercher plus loin pour les sous menu verticaux car c'était du "bonus" par rapport à la demande initiale et que j'ai pas de temps que çà à y consacrer d'autant que j'ai bien mes deux niveaux de menu affichés horizontalement sans décalage.

    Merci à tous!

  11. #11
    Membre éclairé
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Points : 663
    Points
    663
    Par défaut
    Citation Envoyé par gaboo_bl
    j'ai supposé qu'on ne peut pas mettre de bloc avec retour à la logne dans une balise span. Si quelqu'un peu me confirmer ou infirmer cela çà m'interesse.
    Si si, on peut.... par-contre certains styles peuvent être appliqués à un DIV et pas à un SPAN. Je glisse en passant que l'editeur webexpert (qui peut être obtenu gratuitement via developpez) est particulièrement pratique pour voir quels styles sont appliquables ou non en fonction du type de balise.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme mise en forme du texte
    Par Rifton007 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 21/09/2008, 10h02
  2. Problème Mise en forme conditionnelle
    Par GEOPIXEL dans le forum IHM
    Réponses: 1
    Dernier message: 17/04/2008, 15h15
  3. Probleme mise en forme et balises div
    Par Aspic dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 06/07/2007, 14h28
  4. [Mail] problème : mise en forme html d'un mail
    Par minie dans le forum Langage
    Réponses: 2
    Dernier message: 13/06/2007, 15h45
  5. mise en forme des balises
    Par hanane.eclisse dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 24/04/2006, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo