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 :

Position relative ET absolue pour <ul> et <li>


Sujet :

Positionnement en CSS

  1. #1
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut Position relative ET absolue pour <ul> et <li>
    Bonjour,

    Je souhaite réaliser un menu dépliant en CSS par la propriété over. Mon menu se trouve à gauche, les rubriques pointées dépliant les sous-rubriques en colonnes, et ces memes sous-rubriques doivent en déplier d'autres, mais cette fois-ci sur la droite:
    ----------------
    |~~Menu~~~~|
    ---------------
    |~Rubrique~~~|
    |~~S-rubrique~|
    |~~S-rubrique~~SS-rubrique
    |~~~~~~~~~~SS-rubrique
    |_____________|

    Pour ce faire, je suppose que mes SS-rubriques doivent être en position relative pour se placer par rapport à leur S-rubrique, mais en meme temps, il faut qu'elles soient en position absolue pour se placer par dessus le menu et ne pas agrandir mon menu qui décalerai mon div de contenu, placé juste à droite du menu.

    Comment faire ???


    Car en position absolue, mes SS-rubriques se chevauchent, et cela m'oblige à faire des id plutot que des classes (donc une pour chaque SS-rubrique, c'est ennuyant ...).

    Voici mon code html et CSS actuels, les classes réalisées se basant sur les <ul>:

    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
    <div id="menu">
    	<ul class="niveau1">
     
    		<li> Annuaire 
    			<ul class="niveau2">
    				<li><a href="index.php?page=groupe">Consulter</a></li>
    				<li><a href="index.php?page=groupe&action=creer">Rechercher</a></li>
    			</ul>
    		</li>
    		<li> Patrimoine 
    			<ul class="niveau2">
    				<li><a href="index.php?page=rubrique">Lister</a></li>
    				<li><a href="index.php?page=rubrique&action=creer">Creer</a></li>
    			</ul>
    		</li>
    		<li> News 
    			<ul class="niveau2">
    				<li>Sens
    					<ul class="niveau3">
    						<li><a href="">Consulter</a></li>
    						<li><a href="">Ecrire</a></li>
    					</ul>
    				</li>
    				<li>Auxerre
    				</li>
    			</ul>
    		</li>
    	</ul>
    </div>
    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
    #menu {
    	width: 160px;
    	height: 100%;
    	float: left;
    	margin: 0;
    	padding: 0;
    	color: red;
    	font-weight: bold;
    	border: 2px solid green;
    	border-top: none;
    }
     
    #menu ul {
    	list-style-type: none;
    	margin-left: 0;
    }
     
    ul.niveau1 li {
    	width: 132px;
    	height: 40px;
    	font-family: "Rockwell Extra Bold", Andalus, "Arial Black";
    	font-variant: small-caps;
    	background-image: url("img/bouton1.jpeg");
    	background-repeat: no-repeat;
    	line-height: 200%;
    	margin-top: 20px;
    }
    ul.niveau1 li:hover  ul.niveau2 {
    	display: block;
    }
     
    ul.niveau2 {
    	display: none;
    	margin: 0;
    	padding: 0;
    }
     
    ul.niveau2 li{
    	width: 132px;
    	height: 40px;
    	font-family: "Rockwell Extra Bold", Andalus, "Arial Black";
    	font-variant: small-caps;
    	background-image: url("img/bouton1.jpeg");
    	background-repeat: no-repeat;
    	line-height: 200%;
    	margin: 10px;
    	padding: 4px;
    }
     
    ul.niveau2 li a, ul.niveau2 li a:link, ul.niveau2 li a:visited{
    	color: green;
    	display: block;
    	text-decoration: none;
    }
     
    ul.niveau3 {
    	margin: 0;
    	padding: 0;
    	display: none;
    }
     
    ul.niveau2 li:hover  ul.niveau3 {
    	display: block;
    }
    Comment gérer le ul.niveau3 ???

    Merci de vos remarques et réponses !

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258

  3. #3
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    Et bien en fait je souhaiterais plutôt ne pas avoir de javascript pour 2 raisons:

    1) Je n'y connais pas grand chose (je suis déjà en apprentissage de CSS, php, mysql, avec javascript ca sera de trop )
    2) L'administrateur ne veut pas de modification des postes et browser des clients de l'intranet (CSS avec IE6, c'est pas de la tarte lol ! Vive les behavior ! ).

    Donc si possible la solution tout en CSS ! Si c'est pas possible alors ca risque d'etre trèèèèèèèèèèès compliqué pour moi

    Pfff pas facile ...

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Je vois ...

    Tu peux mettre position:relative à ton <li> du niveau 1, comme ça déjà tu pourras positionner en absolu le niveau 2 et donc le niveau 3 ...

  5. #5
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    Ouio c'est vrai que le 1er <li> en relatif c'est déjà mieux. Mais le chevauchement des 3ème niveau ne s'arrange pas.

    En fait, petite question: ca n'existe pas les classes avec un "position: absolute" ? Car tout les éléments de la même classe se superposeront non ?

    Car en effet, si je veux mettre en absolue mes 3èmes niveaux, il faudra que je leur donne des coordonnées différentes, et donc je pert l'interet des classes, et par la meme occasion de mes listes ...

    Ou y'a ptet un truc que je n'ai pas saisi ?

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    En fait, quand tu positionnnes un élément en absolute, il se positionne par rapport à son parent positionné, à défaut, le body.

    Donc si tu positionnes en absolu ton niveau 2, ton niveau 3 se positionnera automatiquement par rapport au niveau 2, vu qu'il est positionné. Il n'a pas besoin d'être en relative.

  7. #7
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    OK je comprend. Donc ce qui veut dire que si je met mon niveau 3 en absolu, afin que les <li> ne se chevauchent pas, et je suis obligé de traiter leur coordonnées indépendament ?

    En effet, pour plusieurs <li> de niveau 3, ils ont le meme parent qui est <ul> de niveau 3 ... donc il sont superposés s'ils font partis de la meme classe !

    Je crois qu'il n'y a pas de solutions en CSS pur. Le positionnement en relatif aurait pu le faire mais mon menu n'est pas assez large et le déploiement du 3ème niveau sur la droite fait décaler mon conteneur (pas accéptable).

    C'est bien triste

    Snif :'(

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Pour le niveau 3, ne postionne pas les <li> en absolu, mais les <ul> directement. Leur parent sera le <li> juste avant qui lui est aussi positionné en absolu.

  9. #9
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    Ah bah oui ! Pourquoi j'ai pas tilté plus tôt et que je m'acharnais sur les <li> ...

    Y'a pas à dire, depuis que j'ai 5 ans les bizounours sont tjrs aussi sympa ^^

    Ben ca marche ! Je donne vite fais mon code pour si quelqu'un a le meme problème que moi, mais il faudra l'adapter c'est pas très propre !

    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
    #menu {
    	width: 160px;
    	height: 100%;
    	float: left;
    	margin: 0;
    	padding: 0;
    	color: red;
    	font-weight: bold;
    	border: 2px solid green;
    	border-top: none;
     
    }
     
    #menu ul {
    	list-style-type: none;
    	margin-left: 0;
    }
     
    ul.niveau1 li {
    	position: relative;
    	width: 132px;
    	height: 40px;
    	font-family: "Rockwell Extra Bold", Andalus, "Arial Black";
    	font-variant: small-caps;
    	background-image: url("img/bouton1.jpeg");
    	background-repeat: no-repeat;
    	line-height: 200%;
    	margin-top: 20px;
    }
    ul.niveau1 li:hover  ul.niveau2 {
    	display: block;
    }
     
    ul.niveau2 {
    	display: none;
     
    }
     
    ul.niveau2 li{
    	width: 132px;
    	height: 40px;
    	font-family: "Rockwell Extra Bold", Andalus, "Arial Black";
    	font-variant: small-caps;
    	background-image: url("img/bouton1.jpeg");
    	background-repeat: no-repeat;
    	line-height: 200%;
    }
     
    ul.niveau2 li a, ul.niveau2 li a:link, ul.niveau2 li a:visited{
    	color: green;
    	display: block;
    	text-decoration: none;
    }
     
    ul.niveau3 {
    	margin: 0;
    	padding: 0;
    	display: none;
    	position: absolute;
    }
     
    ul.niveau2 li:hover  ul.niveau3 {
    	display: block;
    	left: 132px;
    	top: 0px;
    }
     
     
    ul.niveau3 li {
    	margin:0;
    	padding:0;
    }
    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
    <div id="menu">
    	<ul class="niveau1">
     
    		<li> Annuaire 
    			<ul class="niveau2">
    				<li><a href="">Consulter</a></li>
    				<li><a href="">Rechercher</a></li>
    			</ul>
    		</li>
    		<li> Patrimoine 
    			<ul class="niveau2">
    				<li><a href="">Lister</a></li>
    				<li><a href="">Ajouter</a></li>
    			</ul>
    		</li>
    		<li> News 
    			<ul class="niveau2">
    				<li>News1
    					<ul class="niveau3">
    						<li><a href="">Consulter News</a></li>
    						<li><a href="">Ecrire News</a></li>
    					</ul>
    				</li>
    				<li>News2
    				</li>
    			</ul>
    		</li>
    	</ul>
    </div>
    Voila encore un grand merci a toi bizoo, et a bientot !

  10. #10
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Un dernier truc quand même, ton code ne fonctionne pas sur IE6.

    En effet, IE6 ne reconnaît pas la pseudo-classe hover sur autre chose que les liens. Donc sur les li, 'a marche pas.

  11. #11
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    Voui je sais

    C'est pour ca que pour les gens qui veulent faire comme moi (c'est à dire un hover sur autre chose qu'un <a href="">) et veulent que ca fonctionne sur IE6, il faut mettre dans votre CSS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    body {behavior:url("csshover2.htc");}
    Ca vous permet de faire un hover sur ce que vous voulez ! Bien sûr vous devez télécharger "csshover2.htc" sur le net (ca se trouve très facilement) ou ici.

    Ce fichier ne se place pas à l'endroit du CSS, mais là où sont vos pages php/html. Voila voila :p

  12. #12
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Ok, parfait alors.

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

Discussions similaires

  1. Le vertical-align en position relative pour du texte
    Par bigltnt dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 27/03/2007, 09h10
  2. [FLASH MX] Position y relative et absolue
    Par abenhass dans le forum Flash
    Réponses: 12
    Dernier message: 29/05/2006, 12h32
  3. position relative, position absolue.....?
    Par manutudescends dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 07/02/2006, 13h35
  4. [Débutant] position relative et absolue
    Par AurelBUD dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 23/06/2005, 08h46
  5. position() relative au noeud courant
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 09/09/2004, 17h38

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