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 :

menu horizontal avec plusieurs styles


Sujet :

CSS

  1. #1
    Membre éclairé Avatar de bruman
    Inscrit en
    Juin 2005
    Messages
    566
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2005
    Messages : 566
    Points : 794
    Points
    794
    Par défaut menu horizontal avec plusieurs styles
    Bonjour,

    j'ai fais un menu classique qui se déroule lorsqu'on passe la souris dessus (tout comme le menu bleu en haut de développez.net "tab.debord","Regles"... mais en mouseover).

    Mon problème est que je voudrais que les entêtes n'est pas de fond mais que les liens qui apparaissent ai une image de fond.

    Voici mon code html :
    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
    71
    72
    73
     
    <div id="menu_principal">
    	<ul id="menu">
    		<li class="racine">
    			<a href="#">PHILOSOPHIE<br/>Démarche scientifique</a>
    			<ul class="sousMenu">
    				<li><a href="#">castor</a></li>
    				<li><a href="#">aligator</a></li>
    				<li><a href="#">musclor</a></li>
    			</ul>
    		</li>
    		<li class="racine">
    			<a href="#">PRESENTATION<br/>Les équipes</a>
    			<ul class="sousMenu">
    				<li><a href="#">whisky</a></li>
    				<li><a href="#">vodka</a></li>
    				<li><a href="#">gin</a></li>
    				<li><a href="#">vin</a></li>
    				<li><a href="#">champagne</a></li>
    			</ul>
    		</li>
    		<li class="racine">
    			<a href="#">LES MISSIONS<br/>de restauration</a>
    			<ul class="sousMenu">
    				<li><a href="#">pommes</a></li>
    				<li><a href="#">poires</a></li>
    				<li><a href="#">ananas</a></li>
    				<li><a href="#">pamplemousse</a></li>
    				<li><a href="#">banane</a></li>
    				<li><a href="#">raisins</a></li>
    				<li><a href="#">framboises</a></li>
    				<li><a href="#">fraises</a></li>
    				<li><a href="#">mirabelles</a></li>
    				<li><a href="#">groseilles</a></li>
    		</ul>
    		</li>
    		<li class="racine">
    			<a href="#">LES PARTENAIRES</a>
    			<ul class="sousMenu">
    				<li><a href="#">tomates</a></li>
    				<li><a href="#">haricots</a></li>
    				<li><a href="#">carrottes</a></li>
    				<li><a href="#">choux</a></li>
    				<li><a href="#">concombres</a></li>
    				<li><a href="#">courgettes</a></li>
    				<li><a href="#">endives</a></li>
    				<li><a href="#">navets</a></li>
    				<li><a href="#">epinards</a></li>
    				<li><a href="#">avocat</a></li>
    			</ul>
    		</li>
    		<li class="racine">
    			<a href="#">PUBLICATION<br/>Scientifiques</a>
    			<ul class="sousMenu">
    				<li><a href="#">tomates</a></li>
    				<li><a href="#">haricots</a></li>
    				<li><a href="#">carrottes</a></li>
    			        <li><a href="#">choux</a></li>
    				<li><a href="#">concombres</a></li>
    				<li><a href="#">courgettes</a></li>
    				<li><a href="#">endives</a></li>
    				<li><a href="#">navets</a></li>
    				<li><a href="#">epinards</a></li>
    				<li><a href="#">avocat</a></li>
    			</ul>
    		</li>
    	</ul>
     
    	<script type="text/javascript">
    		initMenu();
    	</script>
     
    </div>
    et mon code CSS :
    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
    71
    72
    73
    /* CSS du menu horizontal, bieler batiste */
     
    .menu{
        position:absolute;
        display:block;
        margin-left:60px;
        margin-top:0;
        padding:0;
        width:620px;
        }
     
    .menu ul{
        position:absolute;
        display:block;
        width:124px;
        /*margin:0;*/
        padding:0;
        }
     
    .menu li ul{
        visibility:hidden;
        }
     
    .menu li li ul{
        position:absolute;
        margin-left:124px;
        margin-top:-23px;
        }
     
    .menu li{
        list-style:none;
        width:124px;
        height:auto;
        display:inline;
        display/**/:block;
        float:none;
        float/**/:left;
        margin:0;
        padding:0;
        }
     
    .menu li li{
        display:block;
        float:none;
        }
     
    /* correct a little IE bug */
    * html .menu li li{
        display:inline;
        }
     
    .menu a{
        text-align:center;
        color:#fff;
        display:block;
        width:120px;
        text-decoration:none;
        padding:2px 0;
        margin:1px;
        }
     
    .menu a:hover{
        background-color: #48740f;
    }
     
    /* for a mozilla better display with key nav */
    .menu a:focus{
        background-color: #48740f;
    }
     
    a.linkOver{
        background-color: #48740f;
        }
    Je vois bien que mes entêtes sont aussi des liens (<a>), j'ai essayé de donner un nom de classe (genre "feuille") aux entêtes et pas aux autres, mais je n'arrive pas à le faire fonctionner.

    Ci quelqu'un a une idée?

    Merci

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 156
    Points
    156
    Par défaut
    Bonsoir,

    Une question : que fait ta fonction "initMenu()" en bas de ton code html?
    Pour tester, c'est hard...

  3. #3
    Membre confirmé Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Points : 479
    Points
    479
    Par défaut
    C'est normal qu'il ne marche pas car tu t'es trompé entre class et id (tu as mis un . au lieu d'un # pour ta balise ul menu).
    Tu n'es pas non plus obligé de spécifier la propriété display:block aux balises ul et li puisqu'elles la possèdent déjà par défaut.

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 156
    Points
    156
    Par défaut
    Tu peux aussi changer la ligne au début du fichier HTML en Cependant, je ne pense pas que ça soit la solution au problème d'origine.

  5. #5
    Membre éclairé Avatar de bruman
    Inscrit en
    Juin 2005
    Messages
    566
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2005
    Messages : 566
    Points : 794
    Points
    794
    Par défaut
    En fait, j'ai du mal m'exprimer :

    Le menu est généré par un javascript (d'où la méthode initMenu()).
    Mon menu fonctionne parfaitement bien.

    Ce que je veux faire, c'est modifier le CSS pour avoir des entêtes avec un fond transparent et mes sous menu avec un fond gris.

    Pour l'instant, les entêtes et les sous-menus ont la même apparence. Je veux donc créer deux apparences différentes : une pour les entêtes, et une pour les sous-menus (que j'appelle feuille car il n'y a qu'un seul niveau de sous-menus).

    Mon problème est que je n'arrive pas à définir une deuxième classe CSS pour les feuilles car cela ne fonctionne jamais.

    Merci

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 156
    Points
    156
    Par défaut
    Tu peux te servir de la propriété "first-child" de CSS. Elle sélectionne le premier fils de l'élément que tu traite.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    table tr:first-child{
    	background-color: blue;
    }
    rendra bleu le fond de la première et uniquement la première ligne (balise tr) de la table.

  7. #7
    Membre éclairé Avatar de bruman
    Inscrit en
    Juin 2005
    Messages
    566
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2005
    Messages : 566
    Points : 794
    Points
    794
    Par défaut
    bonjour,

    voici mon code javascript :

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    /*
     
    // the timeout for the menu
    var timeout = 10;
     
    // not very clean but simple
    // the function can be run in the HTML for faster display
    // window.onload=initMenu;
     
    // creat timeout variables for list item
    // it's for avoid some warning with IE
    for( var i = 0; i < 100; i++ )
    {
        eval("var timeoutli" + i + " = false;");
    }
     
    // this fonction apply the CSS style and the event
    function initMenu()
    {
        // a test to avoid some browser like IE4, Opera 6, and IE Mac
        if ( browser.isDOM1 
        && !( browser.isMac && browser.isIE ) 
        && !( browser.isOpera && browser.versionMajor < 7 )
        && !( browser.isIE && browser.versionMajor < 5 ) )
        {
            // get some element
            var menu = document.getElementById('menu'); // the root element
            var lis = menu.getElementsByTagName('li'); // all the li
            
            // change the class name of the menu, 
            // it's usefull for compatibility with old browser
            menu.className='menu';
            
            // i am searching for ul element in li element
            for ( var i=0; i<lis.length; i++ )
            {
                // is there a ul element ?
                if ( lis.item(i).getElementsByTagName('ul').length > 0 )
                {        
                    // improve IE key navigation
                    if ( browser.isIE )
                    {
                        addAnEvent(lis.item(i),'keyup',show);
                    }
                    // link events to list item
                    addAnEvent(lis.item(i),'mouseover',show);
                    addAnEvent(lis.item(i),'mouseout',timeoutHide);
                    addAnEvent(lis.item(i),'blur',timeoutHide);
                    addAnEvent(lis.item(i),'focus',show);
                    
                    // add an id to list item
                    lis.item(i).setAttribute( 'id', "li"+i );
                }
            }
        }
    }
     
    function addAnEvent( target, eventName, functionName )
    {
        // apply the method to IE
        if ( browser.isIE )
        {
            //attachEvent dont work properly with this
            eval('target.on'+eventName+'=functionName');
        }
        // apply the method to DOM compliant browsers
        else
        {
            target.addEventListener( eventName , functionName , true ); // true is important for Opera7
        }
    }
        
    // hide the first ul element of the current element
    function timeoutHide()
    {
        // start the timeout
        eval( "timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );");
    }
     
    // hide the ul elements under the element identified by id
    function hideUlUnder( id )
    {   
        document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
    }
     
    // show the first ul element found under this element
    function show()
    {
        // show the sub menu
        this.getElementsByTagName('ul')[0].style['visibility'] = 'visible';
        var currentNode=this;
        while(currentNode)
        {
                if( currentNode.nodeName=='LI')
                {
                    currentNode.getElementsByTagName('a')[0].className = 'linkOver';
                }
                currentNode=currentNode.parentNode;
        }
        // clear the timeout
        eval ( "clearTimeout( timeout"+ this.id +");" );
        hideAllOthersUls( this );
    }
     
    // hide all ul on the same level of  this list item
    function hideAllOthersUls( currentLi )
    {
        var lis = currentLi.parentNode;
        for ( var i=0; i<lis.childNodes.length; i++ )
        {
            if ( lis.childNodes[i].nodeName=='LI' && lis.childNodes[i].id != currentLi.id )
            {
                hideUlUnderLi( lis.childNodes[i] );
            }
        }
    }
     
    // hide all the ul wich are in the li element
    function hideUlUnderLi( li )
    {
        var as = li.getElementsByTagName('a');
        for ( var i=0; i<as.length; i++ )
        {
            as.item(i).className="";
        }
        var uls = li.getElementsByTagName('ul');
        for ( var i=0; i<uls.length; i++ )
        {
            uls.item(i).style['visibility'] = 'hidden';
        }
    }
    FirstChild ne me servira pas car je veux que tout les liens du sous menu s'affiche sur fond gris et pas seulement le premier.

    Si quelqu'un connait un menu tout fait en javascript facilement personnalisable, je suis preneur aussi!

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 156
    Points
    156
    Par défaut
    Et en les faisant s'afficher tous sur fond gris (y compris l'en tête) dans un premier temps, puis en modifiant l'en-tête dans un second temps (fond autre que gris)?

Discussions similaires

  1. Comment avoir un composant texte avec plusieurs styles?
    Par byubi dans le forum Composants
    Réponses: 1
    Dernier message: 02/05/2009, 13h12
  2. Menu Horizontal avec sous menu horizontal
    Par yamatoshi dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/04/2009, 16h09
  3. menu vertical avec plusieurs colonne
    Par jessicaz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 19/04/2009, 07h03
  4. Menu horizontal avec images car font exotic
    Par enestaf dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 11/07/2007, 12h40
  5. Menu horizontal sur plusieurs lignes.
    Par Go_Ahead dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 03/05/2007, 02h44

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