Pages :
Modérateur
(reprise du message précédent)

Salut,

Neomcdn a écrit :
Je me demande si ça ne pose pas de problème au dessus de 10 sous-menus. A 9, ça fonctionne, à 10, one ne peut plus le sélectionner...
Sur l'exemple que je donne, il n'y a aucune limitation quant au nombre de sous-menus. En revanche, c'est le cas sur le tuto effectivement.
bon ca avance mais c'est pas encore tout à fait ça Smiley cligne

j'ai réussi à faire l'architecture du menu que je veux et mettre en place la mise en page CSS

j'aurais aimé connaitre la différence entre ces 2 instructions ?

<link href="CSS/Feuille-1.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="Feuille-1.css" />

la première est prise dans la page du tuto

la deuxième est générée par dreamweaver

par contre je n'arrive pas à faire "bouger" le menu, au début il est tout développé et ne bouge pas même quand je clic

je suppose que c'est un pb JS mais je ne vois pas trop d'où ça vient

je remets mon code modifié

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>

<script type="text/javascript" src="Menu.js"></script>
<link href="CSS/Untitled-2.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="Untitled-2.css" />
</head>

<body>
<div id="Logo"><img src="Images/Test logo Endy.jpg" width="800" height="90" /></div>
<div id="Centre">

	<ul id="menus">
		
		<li><a href="Index.html">Acceuil</a></li>
		
		<li>Endene
			<ul class="Montre">
				<li><a href="Bio.html">Bio</a></li>
				<li><a href="Gouts.html">Goûts</a></li>
				<li><a href="Palmares.html">Palmarès</a></li>	
				<li><a href="Stats.html">Stats</a></li>
			</ul>
		</li>
		
		<li>Equipe
			<ul class="Montre">
				<li><a href="Club.html">Club</a></li>
				<li><a href="Competitions.html">Compétitions</a></li>
				<li><a href="Calendrier.html">Calendrier</a></li>
				<li><a href="Classements.html">Classements</a></li>
				<li><a href="Equipe_nationale.html">Equipe nationale</a></li>
			</ul>
		</li>
		
		<li><a href="Infos.html">Infos</a></li>
		
		<li>Goodies
			<ul class="Montre">
				<li><a href="Photos.html">Photos</a></li>
				<li><a href="Videos.html">Vidéos</a></li>
				<li><a href="Interviews.html">Interviews</a></li>
				<li><a href="Endene_vu_par.html">Endene vu par ...</a></li>
				<li><a href="Vu_par_Endene.html">... vu par Endene</a></li>
				<li><a href="Questions-reponses.html">Questions / Réponses</a></li>
			</ul>
		</li>
		<li><a href="Liens.html">Liens</a></li>
		<li><a href="Contact.html">Contact</a></li>
	</ul>

 	<div id="Contenu">Acceuil</div>
</div>

<div id="Pied_de_page">
  <p align="center"><span class="Style4"><strong></strong> © 2007 Tous droits réservés.</span></p>
</div>
</body>
</html>


Ma feuille CSS

#Logo {
	position:fixe;
	left:0;
	top:20;
	width:800px;
	height:90px;
	z-index:1;
	margin-right: auto;
	margin-left: auto;
}
#Centre {
	position:relative;
	left:0px;
	top:0px;
	width:800px;
	height:500px;
	z-index:2;
	margin-right: auto;
	margin-left: auto;
	visibility: visible;
}
#Pied_de_page {
	position:fixe;
	left:0;
	top:612;
	width:800px;
	height:24px;
	z-index:3;
	margin-right: auto;
	margin-left: auto;
}
#navigation {
	position:absolute;
	left:0px;
	top:0px;
	width:160px;
	height:500px;
	z-index:5;
	background-color: #9999CC; /* a voir l'interet */
	margin-right: auto;
	margin-left: auto;
	visibility: visible;
}
#Contenu {
	position:absolute;
	left:181px;
	top:0px;
	width:619px;
	height:500px;
	z-index:6;
	background-color: #F7DEBB;
	margin-right: auto;
	margin-left: auto;
	visibility: visible;
}
.Style4 {font-size: small
}


body {
	background-color: #ffdba9;
}

#menus
{
	padding: 0;
	margin: 0;
}
#menus *
{
	padding: 0;
	margin: 0;
	list-style-type: none;
}
#menus li
{
	display: list-item;
	width: 160px;
	border: 1px solid #000;
	margin-right: 2px;
	margin-bottom: 2px;
	font-size: 1em;
	line-height: 1.5em;
	text-align: center; 
	background: #F4BE74; /* Endene, Equipe, Goodies */
}
#menus li ul
{
	border-top: 1px solid #000; /* Couleur de la bordure */
}
#menus li ul li
{
	clear: both;
	width: 160px;
	border: 0;
	margin: 0;
	text-align: left;
}
#menus li a
{
	text-decoration: none;
	color: #000; /* Couleur du texte */
	background-color: #F4BE74; /* Acceuil, Infos, Liens, Contact */
	display: block;
	cursor: pointer;
}
#menus li ul a
{
	width: 160px;
	height: 1.6em;
	line-height: 1.6em;
	text-indent: 10px;
	background-color: #F4BE74; /* Couleur de fond des sous menuu */
	cursor: pointer;
}
#menus li ul a:hover
{
	background-color: #FFF; /* surbrillance sur le menu
}

/* Classes nécessaires au code Javascript */
.Cache
{
	display: none;
}
.Montre
{
	display: list-item;
}


Ma feuille JS

// JavaScript Document

( function() {

	// Test de passage d'un argument
	var fnTest = function()
	{
		var iI = arguments.length - 1;
		for(iI; iI >= 0; iI--) if(!arguments[iI]) return false;
		return true;
	};

	// Ajout d'une action sur un événement
	var fnConnect = function(oElem, sEvType, fn, bCapture)
	{
		return oElem.addEventListener ?
			oElem.addEventListener(sEvType, fn, bCapture):
			oElem.attachEvent ?
				oElem.attachEvent('on' + sEvType, fn):
				oElem['on' + sEvType] = fn;
	};

	// Retrait d'une action sur un événement
	var fnDisconnect = function (oElem, sEvType, fn, bCapture)
	{
		return oElem.removeEventListener?
			oElem.removeEventListener(sEvType, fn, bCapture):
			oElem.detachEvent?
				oElem.detachEvent('on' + sEvType, fn):
				oElem['on' + sEvType] = null;
	};
	
	// Annulation du clic sur un élément
	var fnCancelClick = function(e)
	{
		if(e && e.stopPropagation && e.preventDefault)
		{
			e.stopPropagation();
			e.preventDefault();
			return false; // Pour Safari
		}
		else if(window.event && window.event.cancelBubble && window.event.returnValue)
		{
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			return false;
		}
		else return false;
	};

	// Récupération de la source de l'événement
	var fnGetTarget = function(e)
	{
		var target = window.event ? window.event.srcElement : e ? e.target : this;
		if(!target) return false;
		if(target.nodeName.toLowerCase() != 'a') target = target.parentNode; //Pour Safari
		return target;
	};

	// Affichage des menus
	var fnMontre = function(e)
	{
		var oTarget = fnGetTarget(e);
		var oList = oTarget.parentNode.getElementsByTagName('ul')[0];
		oList.className = 'Montre';
		fnDisconnect(oTarget, 'click', fnMontre, false);
		fnConnect(oTarget, 'click', fnCache, false);
		return fnCancelClick(e);
	};
	
	// Masquage des menus
	var fnCache = function(e)
	{
		var oTarget = fnGetTarget(e);
		oTarget.nextSibling.className = 'Cache';
		fnDisconnect(oTarget, 'click', fnCache, false);
		fnConnect(oTarget, 'click', fnMontre, false);
		return fnCancelClick(e);
	};
	
	// Initialisation du menu
	var fnMenu = function()
	{
		var oMenus = document.getElementById('menus'),
			oItem = oMenus.getElementsByTagName('li'),
			iI = oItem.length - 1,
			oUl = oMenus.getElementsByTagName('ul'),
			iJ = oUl.length - 1;
		for(iJ; iJ >= 0; iJ--) if(oUl[iJ].className != 'Montre') oUl[iJ].className = 'Cache';
		for(iI; iI >= 0; iI--)
		{
			if(oItem[iI].parentNode.getAttribute('id') == 'menus')
			{
				var oA = document.createElement('a'),
					sTxtLi = oItem[iI].firstChild.nodeValue,
					oTxtA = document.createTextNode(sTxtLi);
				oA.setAttribute('href', '#ouverture-fermeture-Menu');
				oA.appendChild(oTxtA);
				oItem[iI].replaceChild(oA, oItem[iI].firstChild);
				oA.nextSibling.className != 'Montre' ?
					fnConnect(oA, 'click', fnMontre, false):
					fnConnect(oA, 'click', fnCache, false);
			}
		}
	};

	// Méthode de chargement rapide
	// Thanks to Dean Edwards, Matthias Miller & John Resig (http://dean.edwards.name/weblog/2006/06/again/)
	function fnFastLoadEvent(func)
	{
		if(document.addEventListener) document.addEventListener('DOMContentLoaded', func, false);

		/*@cc_on @*/
			/*@if(@_win32) document.write('<scr'+'ipt id="__ie_onload" defer src="javascript:void(0)"><\/scr'+'ipt>');
			var script = document.getElementById('__ie_onload');
			script.onreadystatechange = function()
			{
				if(this.readyState === 'complete') func();
			};
		/*@end @*/

		if(/WebKit/i.test(navigator.userAgent) && /loaded|complete/.test(document.readyState)) func();
	};

	// Test des méthodes du script et lancement si c'est bon...
	fnTest(document.getElementById, document.getElementsByTagName, document.createElement, document.createTextNode) ?
		fnFastLoadEvent(fnMenu) :
		false;

} ) ();

Modifié par Yavimaya (01 Nov 2007 - 21:58)
Modérateur
Salut,

Yavimaya a écrit :
j'aurais aimé connaitre la différence entre ces 2 instructions ?

<link href="CSS/Feuille-1.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="Feuille-1.css" />

Il n'y a aucune différence entre ces deux instructions ; l'ordre de déclaration des attributs n'a aucune influence.

Néanmoins, dans ces deux élements, il te manque l'attribut media qui indique le support auquel est destiné la feuille de style. Sur la page d'exemple, il y a :
<link rel="stylesheet" type="text/css" href="styleMenu.css" media="screen, projection" />
L'attribut est bien renseigné. Smiley cligne

a écrit :
par contre je n'arrive pas à faire "bouger" le menu, au début il est tout développé et ne bouge pas même quand je clic

je suppose que c'est un pb JS mais je ne vois pas trop d'où ça vient
En effet, il y a un petit problème... Le fichier JS n'est pas à sa place ; j'obtiens une erreur 404. Smiley ravi
Modifié par koala64 (29 Aug 2007 - 08:52)
bizarre car le fichier est bien mis en ligne dans un dossier (comme j'ai fait pour ma feuille CSS)

j'ai aussi essayé de mettre à la racine du site mais pas de changement non plus

c'est bizarre car j'ai demandé à des personnes de tester et ils n'ont pas d'erreur 404
Modérateur
C'est vrai que le JS n'est pas top... Smiley confused Ce n'était qu'un vieux brouillon qu'il serait mieux de reprendre. Il y a aussi une erreur dans le CSS.

a écrit :
c'est bizarre car j'ai demandé à des personnes de tester et ils n'ont pas d'erreur 404

Effectivement, "ta" feuille JS est bien ligne. Juste un petit commentaire en moins... trois fois rien. Par contre, le copyright sur le site, ça, il y est.

Tiens, d'ailleurs, tu as oublié d'enlever ça aussi :
a écrit :
// Thanks to Dean Edwards, Matthias Miller & John Resig (http://dean.edwards.name/weblog/2006/06/again/)
Ca fait tache.

@+
merci pour la réponse

koala64 a écrit :
C'est vrai que le JS n'est pas top... Smiley confused Ce n'était qu'un vieux brouillon qu'il serait mieux de reprendre.


arf, c pas bon pour moi car j'avoue ne rien comprendre au JS Smiley decu serait il possible si c'est se n'est pas trop demander que tu le regarder car tu as l'air bcp plus cale que moi sur le sujet

koala64 a écrit :
Il y a aussi une erreur dans le CSS.


où ? Smiley biggrin

koala64 a écrit :
c'est bizarre car j'ai demandé à des personnes de tester et ils n'ont pas d'erreur 404

Effectivement, "ta" feuille JS est bien ligne. Juste un petit commentaire en moins... trois fois rien.

je vais tacher de le trouver Smiley cligne

koala64 a écrit :
Par contre, le copyright sur le site, ça, il y est.


le copyright du bas tu parles, il etait dans un exemple de site que j'ai vu c'est pour ca que j'y ai deja pense lool

koala64 a écrit :
Tiens, d'ailleurs, tu as oublié d'enlever ça aussi :
// Thanks to Dean Edwards, Matthias Miller & John Resig (http://dean.edwards.name/weblog/2006/06/again/)
Ca fait tache.

j'avoue mais je pensais qu'il fallait le laissé, je vais l'enlever Smiley cligne

koala64 a écrit :
@+


@++ ^^
Modifié par Yavimaya (01 Nov 2007 - 19:03)
Modérateur
On s'est mal compris, Yavimaya.

Le commentaire que tu as enlevé était celui qui mentionnait que j'en étais l'auteur, ce qui n'est pas très agréable vu les heures que j'ai pu passer à développer des menus. En faisant cela, tu te l'appropries et fait valoir des droits, à travers ton copyright, alors que je le propose librement. Tu n'as pas l'air très au fait. Smiley cligne

La ligne de commentaire que je t'ai dit d'enlever : c'était ironique ; il faut la laisser.

Ton erreur CSS est ici (fermeture du commentaire omise) :
#menus li ul a:hover
{
	background-color: #FFF; /* surbrillance sur le menu*[#red]/[/#]
}
Pour ce qui est du code JS, remplace la totalité du code par celui-ci :
/**
 * Menu déroulant vertical
 * par Romain Berton (romain.berton[ at]gmail.com)
 */

(function() {

var oO =
{
	/**
	 * Label et identifiant du menu associé
	 */
	'Menus': 'menus',


	/**
	 * Label et tags associés
	 */
	'Ul': 'ul',
	'Li': 'li',
	'A': 'a',


	/**
	 * Labels et classes CSS associées (affectées via JS)
	 */
	'Montre': 'Montre', // sous-menus
	'Cache': 'Cache', // sous-menus
	'FT': 'focusTitle', // entête des sous-menus à la prise de focus
	'BT': 'blurTitle', // entête des sous-menus à la perte de focus


	/**
	 * oO._bTest() -> Teste les méthodes recquises.
	 *                Retourne un booléen
	 */
	_bTest: function()
	{
		return document.getElementById && document.getElementsByTagName &&
		document.createElement && document.createTextNode;
	},


	/**
	 * oO._oId(sId) -> S'il existe, retourne l'élément dont l'id est sId.
	 */
	_oId: function(sId)
	{
		if(document.getElementById(sId))
			return document.getElementById(sId);

		return false;
	},


	/**
	 * oO._aTag(oEl, sTag) -> S'ils existent, retourne un tableau des éléments
	 *                        nommés sTag et inclus dans l'élément oEl.
	 */
	_aTag: function(oEl, sTag)
	{
		if(oEl && sTag && oEl.getElementsByTagName(sTag) != 0)
			return oEl.getElementsByTagName(sTag);

		return false;
	},


	/**
	 * oO._bElemNotLink(oEl) -> Teste si la valeur de l'élément oEl est non nulle
	 *                          et si c'est un lien.
	 *                          Retourne un booléen
	 */
	_bElemNotLink: function(oEl)
	{
		if(oEl)
			return oEl.nodeValue != null && oEl.nodeName.toLowerCase() != oO['A'];

		return false;
	},


	/**
	 * oO._oCreaEl(sTag) -> Retourne un élément nommé sTag si on lui demande. ^^
	 */
	_oCreaEl: function(sTag)
	{
		if(sTag)
			return document.createElement(sTag);

		return false;
	},


	/**
	 * oO._oCreaTxt(sTxt) -> Retourne un noeud texte de la chaîne sTxt si on lui
	 *                       demande.
	 */
	_oCreaTxt: function(sTxt)
	{
		if(sTxt)
			return document.createTextNode(sTxt);

		return false;
	},


	/**
	 * oO._CancelClick(e) -> Annule la propagation d'un événement
	 */
	_CancelClick: function(e)
	{
		if(e && e.stopPropagation && e.preventDefault)
		{
			e.stopPropagation();
			e.preventDefault();
		}
		else if(e && window.event)
		{
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}

		return false;
	},


	/**
	 * oO._Elem() -> Retourne un élément avec différents attributs et un texte
	 *               inclus.
	 */
	_Elem: function()
	{
		var aArg = arguments,
		    oElem = oO._oCreaEl(aArg[0]),
		    iI = 2,
		    aTab = aArg.length;

		for(iI; iI < aTab; iI++)
		{
			iI % 2 === 0 ?
				oO.sAtt = aArg[iI] :
				oO.sVal = aArg[iI];

			if(oO.sAtt && oO.sAtt === aArg[iI-1])
				oO.sAtt === 'class' ?
					oElem.className = oO.sVal :
					oElem.setAttribute(oO.sAtt, oO.sVal);
		}
		if(aArg[1] && typeof aArg[1] === 'string' && aArg[1] != '')
		{
			var oText = oO._oCreaTxt(aArg[1]);

			oElem.appendChild(oText);
		}

		return oElem;
	},


	/**
	 * oO._Connect(oElem, sEvType, fn, bCapture) -> Attache un événement à une
	 *                                              action.
	 */
	_Connect: function(oElem, sEvType, fn, bCapture)
	{
		return document.addEventListener ?
			oElem.addEventListener(sEvType, fn, bCapture):
			oElem.attachEvent ?
				oElem.attachEvent('on' + sEvType, fn):
				false;
	},


	/**
	 * oO._GetSource(e) -> Récupère la source d'un événement.
	 */
	_GetSource: function(e)
	{
		if(e)
			return e.target || e.srcElement;

		return false;
	},


	/**
	 * oO._InsertCtrlLinks(oMenus) -> Transforme les entêtes des sous-menus en
	 *                                liens de contrôle.
	 */
	_InsertCtrlLinks: function(oMenus)
	{
		if(!oMenus)
			return;

		var aLis = oO._aTag(oMenus, oO['Li']),
		    iI = aLis.length;

		if(iI === 0)
			return;

		while(iI-- > 0)
		{
			var oChildLi = aLis[iI].firstChild;

			if(!oChildLi)
				return;

			if(oO._bElemNotLink(oChildLi))
			{
				var oA = oO._Elem('a', oChildLi.nodeValue, 'href', '#ssmenu');

				aLis[iI].replaceChild(oA, oChildLi);
				oO._Connect(oA, 'click', oO._CancelClick, false);
			}
		}

		return oMenus;
	},


	/**
	 * oO._InitCptMenu(oMenus) -> Définit le comportement du menu en fonction
	 *                            de l'événement et de l'élément affecté.
	 */
	_InitCptMenu: function(oMenus)
	{
		if(!oMenus)
			return;

		var aA = oO._aTag(oMenus, oO['A']),
		    iI = aA.length;

		while(iI-- > 0)
			oO._Connect(aA[iI], 'click', oO._CtrlDisplay, false);

		return oMenus;
	},


	/**
	 * oO._InitStyle(oMenus) -> Définit les styles affectés au menu lorsque JS
	 *                          est actif.
	 */
	_InitStyle: function(oMenus)
	{
		if(!oMenus)
			return;

		var aUls = oO._aTag(oMenus, oO['Ul']),
		    iI = aUls.length;

		if(iI === 0)
			return;

		do if(aUls[--iI].className != oO['Montre'])
			aUls[iI].className = oO['Cache'];
		while(iI > 0);

		return oMenus;
	},


	/**
	 * oO._Actif() -> Affecte des liens de contrôle, des styles et un comportement
	 *                au menu.
	 */
	_Actif: function()
	{
		var oMenus = oO._oId(oO['Menus']);

		if(!oMenus)
			return;

		if(oO._InsertCtrlLinks(oMenus))
			if(oO._InitStyle(oMenus))
				return oO._InitCptMenu(oMenus);

		return;
	},


	/**
	 * oO._CtrlDisplay(e) -> Contrôle l'affichage / masquage
	 *                       des sous-menus.
	 */
	_CtrlDisplay: function(e)
	{
		var oRelatedNode = e.relatedTarget || oRelatedNode,
		    oSource = oO._GetSource(e),
		    oUl = oO._aTag(oSource.parentNode, oO['Ul'])[0];

		if(!oUl)
			return true;

		if(oUl.className === oO['Cache'])
		{
			oO._HideLastList();
			oUl.parentNode.firstChild.className = oO['FT'];
			oUl.className = oO['Montre'];

			if(!window.event)
				oSource.blur();
		}
		else
		{
			oUl.parentNode.firstChild.className = oO['BT'];
			oUl.className = oO['Cache'];
		}

		return;
	},


	/**
	 * oO._HideLastList() -> Cache la liste précédemment ouverte
	 */
	_HideLastList: function()
	{
		var oMenus = oO._oId(oO['Menus']),
		    aUls = oO._aTag(oMenus, oO['Ul']),
		    iI = aUls.length - 1;

		for(; iI >= 0; iI--)
			if(aUls[iI].className != oO['Cache'])
			{
				aUls[iI].parentNode.firstChild.className = oO['BT'];
				aUls[iI].className = oO['Cache'];
			}

		return;
	}
};

if(oO._bTest)
	oO._Connect(window, 'load', oO._Actif, false); // Lancement du script

})();
C'est plus récent et plus solide. Smiley jap
Modifié par koala64 (03 Sep 2007 - 00:29)
koala64 a écrit :
On s'est mal compris, Yavimaya.

Le commentaire que tu as enlevé était celui qui mentionnait que j'en étais l'auteur, ce qui n'est pas très agréable vu les heures que j'ai pu passer à développer des menus. En faisant cela, tu te l'appropries et fait valoir des droits, à travers ton copyright, alors que je le propose librement. Tu n'as pas l'air très au fait. Smiley cligne


ou alors la je m'excuse et ce n'a pas été fait volontairement puisque je contais te demander si tu voulais apparaitre dans le credit du site puisque tu as largement participé à ce menu, je vais bien entendu remettre le commentaire (d'un autre cote comment je fais pour savoir que Romain Berton c'est toi Smiley cligne )

pour le JS je teste tout à l'heure

encore merci
après une nouvelle petite soirée de test voila le résultat

j'ai surtout cherché à comprendre le fichier JS mais ce n'est vraiment pas ça

j'ai aussi enlevé la class='Montre' du fichier html pour que le menu ne soit pas développé quand on ouvre la page d'accueil

par contre je n'arrive pas à obtenir ce que j'ai présenté au début, j'ai peut être pas été clair donc je vais le re-expliquer

si on prend l'exemple du menu de koala64

ce que je cherche à obtenir c'est ce fonctionnement

- au départ tous les menusX sont fermés (ça c'est bon Smiley cligne )

- par exemple, on clique sur menu2, celui ci se développe et on clique sur lien2

- la page correspondante au lien 2 s'ouvre et le menu2 reste développé (ce que je n'ai pas puisque le menu se referme)

- si l'on appuie sur un autre menu, le menu2 se ferme et le menu en question s'ouvre

- et ainsi de suite

j'espère que j'ai été plus clair. Si ça se tombe, ça le fait déjà et dans ce cas c'est moi qui est mal implanté le fichier JS Smiley decu

merci pour la réponse
Modérateur
J'ai mis le dernier code que je t'ai filé à jour pour que tu aies le comportement souhaité.

Pour que ce soit correct, il ne faut pas mettre de classe "Montre" sur la page d'accueil. En revanche, pour chacune des pages comprises dans un sous-menu, il faut la mettre sur le sous-menu correspondant.
Modifié par koala64 (03 Sep 2007 - 00:26)
Pages :