28173 sujets

CSS et mise en forme, CSS3

Je relance le sujet, car il y a quelque chose qui cloche avec le tutoriel sur le site.

J'ai ajouté une classe tel que suggéré afin de faire en sorte que le menu reste ouvert lorsque on clique sur un lien faisant partie du menu, et celui-ci se referme malgré tout.

Lorsque je fais affiché la source, on voit que la classe est au bon endroit et que seul ce lien dans le menu la possède.

Je demande votre aide afin de m'aider à résoudre le tout.

Voici du code pour vous aider

Le JavaScript tel que décrit dans le tutoriel

<script type="text/javascript">

$(document).ready( function () {
    // On cache les sous-menus
    // sauf celui qui porte la classe "open_at_load" :
    $(".navigation ul.subMenu:not('.open_at_load')").hide();
    // On sélectionne tous les items de liste portant la classe "toggleSubMenu"

    // et on remplace l'élément span qu'ils contiennent par un lien :
    $(".navigation li.toggleSubMenu span").each( function () {
        // On stocke le contenu du span :
        var TexteSpan = $(this).text();
        $(this).replaceWith('<a href="" title="Afficher le sous-menu">' + TexteSpan + '<\/a>') ;
    } ) ;

    // On modifie l'évènement "click" sur les liens dans les items de liste
    // qui portent la classe "toggleSubMenu" :
    $(".navigation li.toggleSubMenu > a").click( function () {
        // Si le sous-menu était déjà ouvert, on le referme :
        if ($(this).next("ul.subMenu:visible").length != 0) {
            $(this).next("ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") } );
        }
        // Si le sous-menu est caché, on ferme les autres et on l'affiche :
        else {
            $(".navigation ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") });
            $(this).next("ul.subMenu").slideDown("normal", function () { $(this).parent().addClass("open") } );
        }
        // On empêche le navigateur de suivre le lien :
        return false;
    });

} ) ;

</script>



Le menu, j'ai fais de quoi de temporaire afin de lui attribuer la classe si c'est lui qui est ouvert, car je voulais vérifier le bon fonctionnement.


<ul class="navigation">
     <li><a href="index.php" title="Qui sommes-nous ?">Qui sommes-nous ?</a></li>
     <li class="toggleSubMenu"><span>Notre équipe</span>
		<ul class="subMenu">
        	<?php if ($_GET['id_page'] == 1) { ?>
        		<li class="open_at_load"><a href="page.php?id_page=1" title="Nos producteurs">Nos producteurs</a></li>
            <?php } else { ?>
        		<li><a href="page.php?id_page=1" title="Nos producteurs">Nos producteurs</a></li>
            <?php } ?>
        	<li><a href="#" title="Nos directeurs">Nos directeurs</a></li>
        	<li><a href="#" title="Nos recherchistes">Nos recherchistes</a></li>
        </ul>
     </li>
     <li><a href="equipements.php" title="Nos équipements">Nos équipements</a></li>
     <li><a href="forfaits.php" title="Forfaits">Forfaits</a></li>
     <li><a href="contact.php" title="Nous joindre">Nous joindre</a></li>
     <li><a href="#" title="Espace Membres">Espace Membres</a></li>
</ul>



Et si j'affiche la source du code, on voit que la page Nos producteurs recoit la classe open_at_load


<ul class="navigation">
     <li><a href="index.php" title="Qui sommes-nous ?">Qui sommes-nous ?</a></li>
     <li class="toggleSubMenu"><span>Notre équipe</span>
		<ul class="subMenu">
        	        		<li class="open_at_load"><a href="page.php?id_page=1" title="Nos producteurs">Nos producteurs</a></li>
                    	<li><a href="#" title="Nos directeurs">Nos directeurs</a></li>
        	<li><a href="#" title="Nos recherchistes">Nos recherchistes</a></li>
        </ul>
     </li>
     <li><a href="equipements.php" title="Nos équipements">Nos équipements</a></li>
     <li><a href="forfaits.php" title="Forfaits">Forfaits</a></li>
     <li><a href="contact.php" title="Nous joindre">Nous joindre</a></li>
     <li><a href="#" title="Espace Membres">Espace Membres</a></li>
</ul>



Avez-vous une petite idée ?

Merci
Sylvain
Hello,

Ta page au chargement devrait ressembler à cela :

<ul class="navigation">
  <li><a href="http://www.productionsfx.com/fr/index.php" title="Qui sommes-nous ?">Qui sommes-nous ?</a></li>
  <li class="toggleSubMenu"><span>Notre équipe</span>
    <ul class="subMenu">
      <li><a href="http://www.productionsfx.com/fr/page.php?id_page=1" title="Nos producteurs">Nos producteurs</a></li>
      <li><a href="#" title="Nos directeurs">Nos directeurs</a></li>
      <li><a href="#" title="Nos recherchistes">Nos recherchistes</a></li>
    </ul>
  </li>
  <li><a href="http://www.productionsfx.com/fr/equipements.php" title="Nos équipements">Nos équipements</a></li>
  <li><a href="http://www.productionsfx.com/fr/forfaits.php" title="Forfaits">Forfaits</a></li>
  <li><a href="http://www.productionsfx.com/fr/contact.php" title="Nous joindre">Nous joindre</a></li>
  <li><a href="#" title="Espace Membres">Espace Membres</a></li>
</ul>


Pas de classe "open_at_load" (ou current, active ou quoique ce soit !).

Lorsque tu cliques sur le span transformé en lien par ton script, ton menu s'ouvre, le script ajoute la classe open sur le li qui porte la classe "toogleSubMenu" et donne un rendu block à ton ul qui porte la classe "subMenu" et qui avait été caché jusque là ("display:none;") par le script.

Tu souhaites afficher l'un des item de liste de ce sous menu, et garder ce sous-menu ouvert lorsque tu navigues dans les pages de ce sous-menu :
Il faut donc, et uniquement à ce moment là, rajouter cette classe qui marque la page courante, pour que le script ne referme pas le sous menu (sur le premier lien de ce sous menu, lorsque tu es sur "Nos producteurs", uniquement sur le deuxième lien si tu es sur "Nos directeurs", etc...)
Il faut ensuite supprimer cette classe lorsque tu n'es plus sur une des pages du sous menu (ou l'utiliser autrement si tu veux donner un aspect spécifique à la page en cours)

Cela se fait de façon dynamique (dans ton cas) lors de la construction de ta page PHP (schématiquement : si je me trouve sur la page courante, alors j'affecte la classe "tartampion" au lien... ce qui déclenche les actions du script et/ou du CSS)

Est-ce plus clair ?
Hello,

Je vais te montrer les codes du menu au fur et à mesure que j'arrive sur la page.

Lorsque je me rend sur www.productionsfx.com/fr/ le menu lorsque je fais afficher le code source de la page est celui-ci :


<ul class="navigation">
     <li><a href="index.php" title="Qui sommes-nous ?">Qui sommes-nous ?</a></li>
     <li class="toggleSubMenu"><span>Notre équipe</span>
		<ul class="subMenu">
        	        		<li>
                        <a href="page.php?id_page=1" title="Nos producteurs">Nos producteurs</a></li>
        	        		<li>
                        <a href="page.php?id_page=2" title="Nos directeurs">Nos réalisateurs</a></li>
        	        		<li>
                        <a href="page.php?id_page=3" title="Nos recherchistes">Nos recherchistes</a></li>
        </ul>
     </li>
     <li><a href="equipements.php" title="Nos équipements">Nos équipements</a></li>
     <li><a href="forfaits.php" title="Forfaits">Forfaits</a></li>
     <li><a href="contact.php" title="Nous joindre">Nous joindre</a></li>
     <li><a href="#" title="Espace Membres">Espace Membres</a></li>
</ul>


Ensuite j'appuie sur le + du menu Équipe et j'ai ceci :


<ul class="navigation">
     <li><a href="index.php" title="Qui sommes-nous ?">Qui sommes-nous ?</a></li>
     <li class="toggleSubMenu"><span>Notre équipe</span>
		<ul class="subMenu">
        	        		<li>
                        <a href="page.php?id_page=1" title="Nos producteurs">Nos producteurs</a></li>
        	        		<li>
                        <a href="page.php?id_page=2" title="Nos directeurs">Nos réalisateurs</a></li>
        	        		<li>
                        <a href="page.php?id_page=3" title="Nos recherchistes">Nos recherchistes</a></li>
        </ul>
     </li>
     <li><a href="equipements.php" title="Nos équipements">Nos équipements</a></li>
     <li><a href="forfaits.php" title="Forfaits">Forfaits</a></li>
     <li><a href="contact.php" title="Nous joindre">Nous joindre</a></li>
     <li><a href="#" title="Espace Membres">Espace Membres</a></li>
</ul>


Sensiblement la même chose que précedement, maintenant je choisi un des 3 liens du menu, soit Nos producteurs, Nos réalisateurs ou encore Nos Recherchistes, ici j'ai choisi Nos Recherchistes, voici le menu lorsque je fais afficher le code source de la page :


<ul class="navigation">
     <li><a href="index.php" title="Qui sommes-nous ?">Qui sommes-nous ?</a></li>
     <li class="toggleSubMenu"><span>Notre équipe</span>
		<ul class="subMenu">
        	        		<li>
                        <a href="page.php?id_page=1" title="Nos producteurs">Nos producteurs</a></li>
        	        		<li>
                        <a href="page.php?id_page=2" title="Nos directeurs">Nos réalisateurs</a></li>
        	        		[b]<li class="open_at_load">[/b]
                        <a href="page.php?id_page=3" title="Nos recherchistes">Nos recherchistes</a></li>
        </ul>
     </li>
     <li><a href="equipements.php" title="Nos équipements">Nos équipements</a></li>
     <li><a href="forfaits.php" title="Forfaits">Forfaits</a></li>
     <li><a href="contact.php" title="Nous joindre">Nous joindre</a></li>
     <li><a href="#" title="Espace Membres">Espace Membres</a></li>
</ul>


On voit bien que le lien Nos recherchistes recoit la classe open_at_load, je l'ai mise en GRAS, et pourtant mon menu se referme.

Est-ce que tu as été voir sur www.productionsfx.com/fr/ ce qui se passe et dont je tente de t'expliquer ?

Merci
Sylvain
Hello,

Est-ce que ce TOPIC vous causes des mal de têtes ? Il n'y a personne parmis les experts présents sur le site qui a une idée du problème ?

Si je demande votre aide, c'est que c'est quelque chose qui est en dehors de mon champ de compétence et que je ne peux résoudre moi-même.

Merci
Sylvain
Bonjour,

Voici le menu corrigé, le tout fonctionne, sauf que l'image avec un + dans le fond du menu notre équipe réapparait, mais le menu reste ouvert.

Je sais je pourrais l'enlever, mais je désire que l'image avec un - reste en fond quand la page s'actualise et que le menu est ouvert.

<ul class="navigation">
     <li><a href="index.php" title="Qui sommes-nous ?">Qui sommes-nous ?</a></li>
     <li class="toggleSubMenu"><span>Notre équipe</span>
        <ul class="subMenu<?php if ( isset($_GET['id_page']) && in_array( $_GET['id_page'], array(1,2,3) ) ) { echo ' open_at_load'; } ?>">
        	<li><a href="page.php?id_page=1" title="Nos producteurs">Nos producteurs</a></li>
        	<li><a href="page.php?id_page=2" title="Nos directeurs">Nos réalisateurs</a></li>
        	<li><a href="page.php?id_page=3" title="Nos recherchistes">Nos recherchistes</a></li>
        </ul>
     </li>
     <li><a href="equipements.php" title="Nos équipements">Nos équipements</a></li>
     <li><a href="forfaits.php" title="Forfaits">Forfaits</a></li>
     <li><a href="contact.php" title="Nous joindre">Nous joindre</a></li>
     <li><a href="#" title="Espace Membres">Espace Membres</a></li>
</ul>


Et le CSS

@charset "utf-8";
/* CSS Document */

.navigation {
  margin: 0;
  padding: 0;
  list-style: none;
  background: #000;
  color: #fff;
  width: 200px;
  font-family:Arial;
  font-size:12pt;
  height: 40px;
}
.navigation a, .navigation span {
  display: block;
  padding: 4px 10px;
  color: #fff;
  text-decoration: none;
  background: #000 url(../img/menu-item.png) left bottom no-repeat;
}
.navigation .toggleSubMenu a, .navigation .toggleSubMenu span {
  background-image: url(../img/menu-item-deroule.png);
}
.navigation .open a, .navigation .open span {
  background-image: url(../img/menu-item-enroule.png);
}
.navigation a:hover, .navigation a:focus, .navigation a:active {
  text-decoration: none;
}
.navigation .subMenu {
  font-size: .8em;
  background: #000 url(../img/subMenu.png) 0 0 repeat-x;
  font-size: .9em;
  margin: 0;
  padding: 0;
  border-bottom: 1px solid #f00;
  list-style:none;
}
.navigation ul.subMenu a {
  background: none;
  padding: 3px 20px;
}


En espérant avoir une réponse bientôt.
ConceptInterWEB a écrit :
Hello,
Est-ce que ce TOPIC vous causes des mal de têtes ? Il n'y a personne parmis les experts présents sur le site qui a une idée du problème ?
Si je demande votre aide, c'est que c'est quelque chose qui est en dehors de mon champ de compétence et que je ne peux résoudre moi-même.
Merci
Sylvain

Bonsoir,

Les bénévoles de ce site ne sont à la disposition de personne, qui plus est un dimanche.
Faire preuve d'un minimum de patience est la moindre des choses lorsque l'on vient requérir de l'aide.

Le tutoriel de Thomas est un base de travail, il faut l'utiliser tel quel ou l'adapter à votre besoin, dans votre cas, il ne fonctionne pas parce que le script referme le sous menu (ce qui annule l'effet de la classe open)
- Il faut regarder le code source généré
- Pour vous en convaincre, rajouter un sous-menu avec des items et cela fonctionne.

Soit vous êtes capable de faire ces modifications, soit vous utilisez une autre ressource du web, comme je vous le disais sur votre précédent sujet, le web en regorge (que ce soit via js ou CSS3)

Cdt,
Sylvain.
Hello,

Tout ce que je demandais c'est à savoir si personne n'a la solution.

J'ai tenté de joindre l'auteur du tutoriel afin de voir avec lui ce qui ne fonctionne pas, mais aucune réponse. Ca fait plus d'une semaine que je lui ai écris un MP sur le FORUM.

Comme tu peux voir, j'y suis presque, il ne me manque plus grand chose afin d'arriver au résultat final.

Et pour ce qui nous concerne nous les Québecois, que ca soit n'importe quel journée dans la semaine, cela nous importe peu, nous sommes toujours à disposition pour aider.

Sylvain
Bonjour,

Si tu n'obtiens pas de réponse, soit effectivement personne n'en a à te fournir, soit personne n'a eu le temps de se pencher sur ta problématique, le dimanche, en France, nous apprécions avoir d'autres activités, en famille par exemple, et déconnecter de temps à autre n'est pas une mauvaise chose.... Smiley cligne

Concernant l'auteur, du tutoriel (qui commence à dater maintenant), il passe de loin en loin, pas sûr qu'il ait pu prendre connaissance de ton message Smiley ohwell

Bref, comme je te le disais, il y a une foultitude de ressources sur le web qui pourraient davantage convenir à ta problématique.

Il faudrait que tu puisses redonner la classe "open" au lien déclencheur (ou un autre marqueur qui reprendrait les mêmes propriétés CSS), puisque que cette dernière est retirée par le script...

Deux actions se télescopent, le script tente de refermer ce sous menu en retirant la classe "open" et tu lui interdis de le faire en ajoutant la classe "open_at_load", c'est un peu "bordélique", et pas tout à fait dans l'esprit de ce tutoriel.

À toi de voir si tu veux continuer sur ce script, ou chercher une autre solution Smiley cligne

ps : Tu n'es peut-être pas obligé non plus d'utiliser une mise en page en tableau, CSS c'est beau, c'est fort (aussi) Smiley cligne