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 déroulant largeur non fixée


Sujet :

Dimensionnement en CSS

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Points : 123
    Points
    123
    Par défaut Menu déroulant largeur non fixée
    Bonjour à tous,

    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
     
    <div id="navigation" class="center-frame">
    	<ul id="primary-links">
    		<li><a href="#" title="TEST">TEST</a>
    			<ul>
    				<li><a href="#" title="TEST">TEST</a></li>
    				<li><a href="#" title="TEST">TEST</a></li>
    			</ul> 
    		</li>
    		<li><a href="#" title="TEST">TEST</a></li>
    		<li><a href="#" title="TEST">TEST</a></li>
    		<li><a href="#" title="TEST">TEST</a></li>
    		<li><a href="#" title="TEST">TEST</a></li>
    		<li><a href="#" title="TEST">TEST</a></li>
    	</ul>
    </div>
    Voici 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
    74
     
    #navigation ul#primary-links {
    	padding: 6px 0 0 100px;
    }
    #primary-links li ul{
        visibility:hidden;
        }
     
    #primary-links li li ul{
        position:absolute;
        margin-left:124px;
        margin-top:-23px;
        }
     
    #primary-links li{
        /*list-style:none;
        width:120px;
        height:auto;
        display:inline;
        display/*:block;
        float:none;
        float/*:left;
        margin:0;
        padding:0;*/
    	background: transparent url(../interface/li_bg.gif) no-repeat top left;
    	border-bottom: 1px solid #fff;
    	color: #0054a4;
    	float: left;
    	font-weight: bold;
    	height: 34px;
    	display:inline;
    	width : 160px;
    	margin: 0 5px 0 5px;
    	padding: 0 0 0 20px;
        }
     
    #primary-links li li{
        display:block;
        float:none;
        }
     
    /* correct a little IE bug */
    * html #primary-links li li{
        display:inline;
        }
     
    #primary-links a{
        /*text-align:center;
        background-color: #9cf;
        border:1px #666 solid;
        color:#000;
        display:block;
        width:120px;
        text-decoration:none;
        padding:2px 0;
        margin:1px;*/
    	background: transparent url(../interface/li_a_bg.gif) no-repeat top right;
    	color: #0054a4;
    	display: block;
    	float: left;
    	height: 24px;
    	padding: 10px 20px 0 0;
    	text-decoration: none;
        }
     
     
    /* for a mozilla better display with key nav */
    #primary-links a:focus{
        background-color: #aaf;
    }
     
    a.linkOver{
        background-color: #eee;
        }
    Et mon code JS :
    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
    132
    133
    134
    135
     
    /*
    Author   : bieler batiste
    Company  : doSimple : http://www.dosimple.ch
    send me a mail for more informations : faden@PASDEPOURRIELaltern.org - 
     
    // the timeout for the menu
    var timeout = 1000;
     
    // 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('primary-links'); // 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';
        }
    }
    Le problème c'est que si une largeur est fixée aux éléments li de mon menu principal, le rendu est moche.
    Si pas de largeur fixée le rendu est propre mais le menu apparait horizontalement.

    Comment résoudre cela ?

    De plus même en fixant la largeur le menu s'affiche visiblement "sous" le contenu suivant de la page....

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 308
    Points : 349
    Points
    349
    Par défaut
    Bonjour,

    la réponse est dans dont fichier css : enleve les display:inline dans #primary-links li et * html #primary-links li li

    Par contre je pense que tu doit te hacker toi même (à moins que ce ne soit volontaire) au début de #primary-links li.

    Question con : si j'ai bien comprit tu cherche à avoir un menu vertical, pourquoi avoir récupérer un script de menu horizontal pour le faire alors que sur le site où tu as été il y a une version vertical ?

    http://dosimple.ch/articles/Menus-dy...uVertical.html

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Points : 123
    Points
    123
    Par défaut
    Cela ne résoud pas le problème...

    Je ne comprend pas ta seconde remarque.

    Et j'ai bien pris la bonne version...a moins que je sois très fatigué

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 308
    Points : 349
    Points
    349
    Par défaut
    Citation Envoyé par samtheh Voir le message
    Je ne comprend pas ta seconde remarque.
    La partie de code qui suis est un block de css commenté afin de faire ce que l'on appelle un "hack" css : c'est dire que en utilisant des "plus ou moins bug" des différents navigateurs (Firefox, IE 6/7, opera, safari) cette partie là seras (ou pas) interprétée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #primary-links li{
        /*list-style:none;
        width:120px;
        height:auto;
        display:inline;
        display/*:block;
        float:none;
        float/*:left;
        margin:0;
        padding:0;*/
    Citation Envoyé par samtheh Voir le message
    Et j'ai bien pris la bonne version...a moins que je sois très fatigué
    Ben je trouve qu'il y a beaucoup de float:left, display:inline et display:block pour un menu verticale, qui en as théoriquement beaucoup moins besoin qu'un menu horizontal.

Discussions similaires

  1. Menu déroulant, Choix multiples fixes
    Par drayog dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/03/2011, 16h57
  2. [CSS 2.1] menu déroulant largeurs variables sans JS
    Par Ziltoid dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 27/04/2010, 11h38
  3. [CSS 2] 2 div, largeur non fixée pour l'un, restante pour l'autre ?
    Par bewidia dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/11/2009, 11h45
  4. Menu déroulant à largeur adaptable
    Par Msieurduss dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/05/2009, 16h18
  5. Menu déroulant js non intrusif
    Par ilood dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 04/02/2009, 09h48

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