28221 sujets

CSS et mise en forme, CSS3

En faisant un menu assez évolué, j'ai utilisé une feuille de style CSS, et je suis confronté à un problème "bête" ! Il y a un conflit entre plusieurs balises. Voici mon code :

li.Menu1_PremiereLigne:hover
{
background-image:url(images/Menu1_PremiereLigne_over.gif);
}
li.Menu1_Ligne:hover
{
background-image:url(images/Menu1_Ligne_over.gif);
}
li.Menu1_DerniereLigne:hover
{
background-image:url(images/Menu1_DerniereLigne_over.gif);
}

En fait, c'est toujours le dernier background-image qui est pris en compte. Je ne comprend pas, car ce ne sont pas les mêmes classes. Ce sont bien 3 classes différentes, mais apparemment il doit considérer que ces 3 balises sont les mêmes.
Cependant, le problème n'intervient que sur IE, sur Firefox ça marche bien.

Si vous avez une idée, je suis preneur.

Merci.
Seb.
Une idée, non. Mais une question : sachant qu'IE n'applique le :hover que sur les éléments <a>... comment fais-tu pour constater quoi que ce soit dans ce navigateur ?
Administrateur
Quel espiègle personnage, ce Laurent Denis.

En passant, Seb, tu pourrais nous baliser proprement ton code (en utilisant le bouton approprié, comme le suggèrent les Règles que tu as bien évidemment apprises par coeur Smiley smile ) ?
En fait, le code exact est celui-ci, sachant que j'utilise un fichier IEmen.htc et un fichier style2.css pour que ça soit compatible avec IE :

extrait du fichier index.html : ...

<body>

<LINK rel="stylesheet" type="text/css" href="style.css" />

<!-- ce qui suit ne sera visible que sur IE 5 ou version d'après, grace à la condition -->
<!--[if gte IE 5]>
<LINK rel="stylesheet" type="text/css" href="style2.css" />
<![endif]-->

<ul class="Menu1">
	<li class="Menu1_PremiereLigne">Présentation
		<ul class="Menu2">
			<li class="Menu2_PremiereLigne"><a href="cat.html">Editos "Le Duo vu par ..." M. le Maire</a></li>
			<li class="Menu2_Ligne"><a href="rabbit.html">Présentation des lieux</a>
                <ul class="Menu3">
                    <li class="Menu3_PremiereLigne">Auditorium</li>
                    <li class="Menu3_DerniereLigne">architecture exceptionnelle</li>
                </ul>
            </li>
			<li class="Menu2_DerniereLigne"><a href="dingo.html">Sous-menu 1.2</a></li>
		</ul>
    </li>
	<li class="Menu1_Ligne">Saison 04>>05
		<ul class="Menu2">
			<li class="Menu2_PremiereLigne">Elephant >>
                <ul class="Menu3">
                    <li class="Menu3_PremiereLigne"><a href="indian.html">Indian</a></li>
                    <li class="Menu3_DerniereLigne"><a href="african.html">African</a></li>
                </ul>
            </li>
			<li class="Menu2_Ligne"><a href="monkey.html">Monkey</a></li>
			<li class="Menu2_DerniereLigne"><a href="dog.html">Dog</a></li>
		</ul>
    </li>
	<li class="Menu1_Ligne">Tarifs et réservations
		<ul class="Menu2">
			<li class="Menu2_PremiereLigne"><a href="pig.html">Pig</a></li>
			<li class="Menu2_Ligne"><a href="bird.html">Bird</a></li>
			<li class="Menu2_DerniereLigne"><a href="worm.html">Worm</a></li>
		</ul>
    </li>
	<li class="Menu1_DerniereLigne">Renseignements
		<ul class="Menu2">
			<li class="Menu2_PremiereLigne"><a href="bat.html">Bat</a></li>
			<li class="Menu2_Ligne"><a href="fish.html">Fish</a></li>
			<li class="Menu2_DerniereLigne"><a href="panther.html">Panther</a></li>
        </ul>
    </li>
</ul>



</body>



extrait du fichier style.css (je n'ai pas tout mis car le fichier style.css est assez gros):...

/* Déplacement sur la première ligne du menu 1 */
li.Menu1_PremiereLigne:hover, li.Menu1_PremiereLigne.CSStoHighlight
{
  background-image:url(images/Menu1_PremiereLigne_over.gif); 		/* image du menu lors du rollover */
  color: #FFFFFF;                 					/* couleur du texte du menu actif */ 
  z-index:100;										/* pour éviter les problèmes de superposition des menus et sous-menus*/
}
/* Déplacement sur une ligne du menu 1 (sauf première et dernière ligne) */
li.Menu1_Ligne:hover, li.Menu1_Ligne.CSStoHighlight
{
  background-image:url(images/Menu1_Ligne_over.gif); 		/* image du menu lors du rollover */
  color: #FFFFFF;                 					/* couleur du texte du menu actif */ 
  z-index:100;										/* pour éviter les problèmes de superposition des menus et sous-menus*/
}
/* Déplacement sur la dernière ligne du menu 1 */
li.Menu1_DerniereLigne:hover, li.Menu1_DerniereLigne.CSStoHighlight
{
  background-image:url(images/Menu1_DerniereLigne_over.gif); 		/* image du menu lors du rollover */
  color: #FFFFFF;                 					/* couleur du texte du menu actif */ 
  z-index:100;										/* pour éviter les problèmes de superposition des menus et sous-menus*/
}


extrait du fichier style2.css :

ul.Menu1 li.Menu1_PremiereLigne, ul.Menu1 li.Menu1_Ligne, ul.Menu1 li.Menu1_DerniereLigne,
ul.Menu2 li.Menu2_PremiereLigne, ul.Menu2 li.Menu2_Ligne, ul.Menu2 li.Menu2_DerniereLigne,
ul.Menu3 li.Menu3_PremiereLigne, ul.Menu3 li.Menu3_Ligne, ul.Menu3 li.Menu3_DerniereLigne
{  /* the behaviour to mimic the li:hover rules in IE 5+ */
  behavior: url( IEmen.htc );
}

ul.Menu2, ul.Menu3
{  /* copy of above declaration without the > selector */
  display: none; position: absolute; top: 2px; left: 78px;
}



fichier IEmen.htc :...


<attach event="onmouseover" handler="rollOver" />
<attach event="onmouseout" handler="rollOff" />

<script type="text/javascript">
function rollOver() {
	//change the colour
	element.className += (element.className?' ':'') + 'CSStoHighlight';
	//change display of child
	for( var x = 0; element.childNodes[x]; x++ ){
		if( element.childNodes[x].tagName == 'UL' ) { element.childNodes[x].className += (element.childNodes[x].className?' ':'') + 'CSStoShow'; }
		if( element.childNodes[x].tagName == 'A' ) { element.childNodes[x].className += (element.childNodes[x].className?' ':'') + 'CSStoHighLink'; }
	}
}

function rollOff() {
	//change the colour
	element.className = element.className.replace(/ ?CSStoHighlight$/,'');
	//change display of child
	for( var x = 0; element.childNodes[x]; x++ ){
		if( element.childNodes[x].tagName == 'UL' ) { element.childNodes[x].className = element.childNodes[x].className.replace(/ ?CSStoShow$/,''); }
		if( element.childNodes[x].tagName == 'A' ) { element.childNodes[x].className = element.childNodes[x].className.replace(/ ?CSStoHighLink$/,''); }
	}
}
</script>




J'ai copié/collé quasiment tout le code important de mes pages.
Ce code fonctionne très bien sur tous les navigateurs. Mon seul problème concerne le fameux background-image dont je vous ai parlé au début.

Si il est vrai que le ":hover" n'est pas bien traduit sur IE, alors c'est la fonction incluse dans le fichier IEmen.htc qui s'occupe de simuler cette propriété. Cependant, je ne maîtrise pas tout dans le contenu du fichier IEmen.htc. C'est surtout la propriété CSStoHighlight que je ne connais pas trop.

Excusez-moi car je ne vous avais pas donné assez d'infos dans mon premier message.

Est-ce que ceci vous inspire plus ?

Merci.
Seb.
seb081977 a écrit :

Est-ce que ceci vous inspire plus ?

Pas vraiment non... Smiley hum

Ça me paraît bien complexe pour achever un effet purement décoratif Smiley confus

C'est quoi cette syntaxe ? Smiley biggol

li.Menu1_Ligne.CSStoHighlight

Désolé, j'y comprends que dal...
Modifié le 30 Jan 2005 - 21:05
C'est justement à l'aide de ce site que j'ai créé mon menu.
J'ai fais en sorte pour utiliser un maximum la technologie CSS pour créé mon menu sans avoir de Javascript, de manière à ce que ce menu soit compatible avec un maximum de navigateurs.
A l'adresse suivante (communiquée par Laurent Denis):
http://www.howtocreate.co.uk/tutorials/testMenu.html
J'ai regardé en détail le tableau des compatibilités avec les différents navigateurs, et je me rend compte en fait que ce menu n'est pas compatible avec les version supérieure à IE 5. Par conséquent mon problème est normal alors.

J'ai l'impression que je n'arriverai jamais à créé un menu comme celui-ci avec presque que du CSS et compatible avec tous les navigateurs ? Je me trompe ?

Merci.
Seb.
Laurent Denis a écrit :

Allez, Stephan, zou ! Travaux pratiques : http://www.howtocreate.co.uk/tutorials/testMenu.html Smiley lol

Bon j'ai parcouru le tuto, mais je n'ai toujours pas trouvé de réponse :
Stephan a écrit :

C'est quoi cette syntaxe ? Smiley biggol

li.Menu1_Ligne.CSStoHighlight


Il n'y a pas ça dans le tuto Smiley confus

tag.class.class {}

Je retourne voir les specs, je vais p't'être apprendre quelque chose de nouveau ! Smiley fou

Ok, j'ai trouvé : http://www.yoyodesign.org/doc/w3c/css2/selector.html#class-html

Recommandation CSS2 du W3C a écrit :

Pour une correspondance sur un sous-ensemble des valeurs de "class", chacune des valeurs doit être précédée par un ".", dans n'importe quel ordre.

Exemple(s) :

Par exemple, cette règle suivante est vérifiée pour chacun des éléments P dont la valeur de l'attribut "class" est constituée d'une suite de valeurs séparées par des blancs, parmi celles-ci "pastoral" et "marine" :

P.pastoral.marine { color: green }

La règle est appliquée pour une valeur class="pastoral blue aqua marine", mais pas pour class="pastoral blue".

Anyway, dans le cas présent il n'y a aucun élément de class="CSStoHighlight" dans le HTML, donc la déclaration ne peux pas s'appliquer.

Question : c'est bien géré cette « correspondance sur un sous-ensemble des valeurs de "class" » ?
Modifié le 31 Jan 2005 - 00:21
Stephan : ce mécanisme de sélecteurs .machin.truc pour viser un <foo class="machin truc"> est tout à fait bien géré, propre sur lui et parfaitement convenable Smiley cligne

Dans le script utilisé ci-dessus, cette classe est ajoutée dynamiquement par le script htc:
element.className += (element.className?' ':'') + 'CSStoHighlight';


seb081977 : deux possibilités:
- un menu sans script, http://openweb.eu.org/articles/menu_universel/
- un menu avec script, mais plus performant: http://dean.edwards.name/IE7/
Merci pour vos réponses.

Je pense que je vais continuer à chercher d'autres menus. Pourtant je pensais que celui-ci me conviendrait, et bien je me suis trompé.

Je voudrais un menu sur 3 niveaux de sous-menu, et qui est développé principalement avec des CSS et qui se présente verticalement. Ceci n'est pas très facile à trouver.
Quelques éléments de réflexion sur les menus déroulants à 3 niveaux :
- comme tous menus déroulants, ils ont le défaut d'obliger l'utilisateur à explorer quand il le découvre, à mémoriser quand il veut revenir. Mais ils aggravent ce défaut, et deviennent franchement dissuasifs. Entre deux sources d'informations possibles, je choisirais généralement celle qui me présente un menu "plat", plutôt que celle qui suppose que je vais la peine d'en mémoriser la structure.
- comme tous les bidules à base de :hover, ils se transforment rapidement pour l'utilisateur en petit jeu d'habileté à la souris... exaspérant quand on a autre chose à faire.

(Rappel: un site n'est pas une application client. L'utilisateur n'est pas du tout dans la même situation que devant les menus de ses applications qu'il est bien obligé de mémoriser. Naturellement, le problème peut se poser différemment pour un intranet par exemple).
Modifié le 31 Jan 2005 - 12:05
[totalement hors sujet]

Smiley fou Smiley nut Smiley mur

... Vais me coucher ... Je m'absente deux jours et je retrouve des sujets comme ca !
Pour info, j'ai pas tout compris mais je suis très content quand même !

[/totalement hors sujet]