28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous et à toutes,

Pour le menu d'un site je voudrais faire un rollover sur mes boutons. Jusque là j'utilisais une technique CSS pour mes rollovers et je n'avais jamais rencontré de problème.

Je joins un bout de code pour vous montrer la technique que j'emploie.

HTML:
<html>
<head>
<title>Rollovers CSS</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
 
<body>
   <div>
        <a href="#" class="rollover">Accueil</a>
    </div>
</body>
</html>


et le CSS:
.rollover
 {
    background: url(images/accueil.png) top center;
    text-indent: -9999px;
    display: block;
    width: 100px;
    height: 36px;
}
.rollover:hover {
    background-position: bottom center;
}


Mon image est divisée en 2 parties symétriques, la partie base est mon bouton accueil dans un coloris clair, la partie haute est mon bouton accueil dans un coloris plus foncé. Quand la souris passe sur l'image, celle ci se teinte automatiquement. Du classique quoi, rien d'innovant...

Le soucis que je rencontre c'est que cette fois je dois découper mes boutons en trois parties. En effet l'image ne comporte que le fond de couleur du bouton, et plus aucun texte, celui devra être saisi par l'utilisateur et donc s'adapter à la taille de l'intitulé.

J'ai donc une <div> avec mon bord gauche du bouton, une <div> avec le milieu et une troisième <div> avec le bord droit. Du coup je ne sais pas comment modifier l'image de ces trois <div> au passage de la souris sur l'une d'elles.

Voici une partie de mon code HTML actuel :
<!--début du surMenu avec les boutons de navigation  -->
<div id="surMenu">
  <!--début Bouton Accueil  -->
  <div class="btnOngletEntier">
      <div class="btnOngletOrangeLeft"></div>
      <div class="btnOngletOrangeCenter"><span class="typoSurMenu">&nbsp;Accueil&nbsp;</span></div>
      <div class="btnOngletOrangeRight"></div>
  </div>
  <!--fin Bouton Accueil  -->
</div>
<!--fin du surMenu avec les boutons de navigation  -->


Et le CSS :
#surMenu
{
	width:800px;
	padding-left:170px;
	margin-top:0;
	height:45px;
	text-align:center;
}
.btnOngletEntier
{
	float:left;
	padding:0;
	margin:0;
}

.btnOngletOrangeLeft
{
	float:left;
	background-image:url(../img/onglet-orange-gauche-off.jpg);
	background-repeat:no-repeat;
	width:21px;
	height:45px;
}

.btnOngletOrangeCenter
{
	float:left;
	background-image:url(../img/onglet-orange-centre-off.jpg);
	background-repeat:repeat-x;
	height:32px;
	padding-top:13px;
}

.btnOngletOrangeRight
{
	float:left;
	background-image:url(../img/onglet-orange-droite-off.jpg);
	background-repeat:no-repeat;
	width:21px;
	height:45px;
}


Avez vous une idée pour qu'au survole de la <div> "btnOngletEntier" qui contient les trois parties de mon boutons ceux changent en même temps?

Merci du temps que vous avez pris à cette lecture. Smiley cligne

.btnOngletEntier:hover .btnOngletOrangeLeft
{
    /* ta modif */
}
.btnOngletEntier:hover .btnOngletOrangeCenter
{
    /* ta modif */
}
.btnOngletEntier:hover .btnOngletOrangeRight
{
    /* ta modif */
}

Une petit remarque, pour faire un bouton avec des coins, 2 parties peuvent suffire.
Une avec le coin gauche et le reste, plus une avec le coin droit (ex tutorial: http://www.oscaralexander.com/tutorials/how-to-make-sexy-buttons-with-css.html )
Modifié par MoOx (26 Nov 2009 - 12:01)
Merci pour ta réponse MoOx qui me donne un début de solution. Néanmoins, en utilisant cette technique une seule image est modifiée chez moi. Bizarrement les autres restent intactes, ce qui est étranges vue que ta solution semble correcte.

Voici mon code HTMl après modifications:
<a href="#">
  <!--début Bouton Accueil  -->
  <div class="btnOngletEntier">
    <div class="btnOngletOrangeLeft"></div>
    <div class="btnOngletOrangeCenter"><span class="typoSurMenu">&nbsp;Accueil&nbsp;</span></div>
    <div class="btnOngletOrangeRight"></div>
  </div>
  <!--fin Bouton Accueil  -->
</a>


J'ai vérifié le chemin de mes images ON et OFF, leur taille, etc... le code me semble correcte, je ne comprends pas ce qui bloque. Smiley ohwell
Waou, ne t'inquiète pas la buse c'est moi! J'aurais du m'en rendre compte quand même c'était visible comme le nez au milieu de la figure.

Remarque entre 12h30 et 13h30 j'ai fait une sieste, j'ai l'impression maintenant d'avoir récupérer mes facultés. Smiley ravi

Merci du coup de main MoOx
LordBatoon a écrit :
Waou, ne t'inquiète pas la buse c'est moi! J'aurais du m'en rendre compte quand même c'était visible comme le nez au milieu de la figure.

Remarque entre 12h30 et 13h30 j'ai fait une sieste, j'ai l'impression maintenant d'avoir récupérer mes facultés. Smiley ravi

Merci du coup de main MoOx


Bonjour,
Pourrais tu nous dire où étais le problème car j'ai le même problème, j'ai crée mon bouton avec 2 images et lorsque je passe ma souris sur la partie gauche, seulement la partie gauche (la première image) change de couleur et je voudrais que tout le bouton change de couleur.

Merci d'avance.
Donc la solution c'était de mettre tous les éléments du bouton dans une balise container (ici 'btnOngletEntier') et au passage de la souris sur ma balise (btnOngletEntier:hover) il suffit de changer le 'background-image' pour chaque partie de mon bouton. (voir le code ci-dessous)

Pour le code html:

<a href="#">
   <!--début Bouton Accueil  -->
   <div class="btnOngletEntier">
      <div class="btnOngletOrangeLeft"></div>
      <div class="btnOngletOrangeCenter">
         <span class="typoSurMenu"> Accueil </span>
      </div>
      <div class="btnOngletOrangeRight"></div>
   </div>
   <!--fin Bouton Accueil  -->
</a>


Pour le code CSS;

.btnOngletEntier
{
	padding:0;
	margin:0;
}

.btnOngletOrangeLeft
{
	float:left;
	background-image:url(../img/onglet-orange-gauche-off.jpg);
	background-repeat:no-repeat;
	width:21px;
	height:45px;
}

.btnOngletOrangeCenter
{
	float:left;
	background-image:url(../img/onglet-orange-centre-off.jpg);
	background-repeat:repeat-x;
	height:32px;
	padding-top:13px;
}

.btnOngletOrangeRight
{
	float:left;
	background-image:url(../img/onglet-orange-droite-off.jpg);
	background-repeat:no-repeat;
	width:21px;
	height:45px;
}

.btnOngletEntier:hover .btnOngletOrangeLeft
{
	float:left;
	background-image:url(../img/onglet-orange-gauche-on.jpg);
	background-repeat:no-repeat;
	width:21px;
	height:45px;
}

.btnOngletEntier:hover .btnOngletOrangeCenter
{
	float:left;
	background-image:url(../img/onglet-orange-centre-on.jpg);
	background-repeat:repeat-x;
	height:32px;
	padding-top:13px;
}

.btnOngletEntier:hover .btnOngletOrangeRight
{
	float:left;
	background-image:url(../img/onglet-orange-droite-on.jpg);
	background-repeat:no-repeat;
	width:21px;
	height:45px;
}


En termes plus générique, je regroupe toutes les parties de mon bouton dans un container (mon container est 'MonBoutonEntier' dans ce cas et je n'ai que deux parties pour simplifier les choses, 'PartieBoutonA' et 'PartieBoutonB')
Donc dans ma page HTML je me retrouve avec:

<div class="MonBoutonEntier">
   <div class="PartieBoutonA></div><!--le background est 'PartieBoutonA-OFF.jpg' dans le css-->
   <div class="PartieBoutonB></div><!--le background est 'PartieBoutonB-OFF.jpg' dans le css-->
</div>


Puis de faire un évènement lors du survol de la div 'MonBoutonEntier' à l'aide du CSS avec '.MonBoutonEntier:hover .PartieBoutonA' et de changer tout simplement le background-image (passer de l'image 'PartieBoutonA-OFF.jpg' à 'PartieBoutonA-ON.jpg'). Biensûr on ne doit pas oublier de faire cela pour les deux parties du bouton!

.MonBoutonEntier:hover .PartieBoutonA
{
   background-image:url(../img/PartieBoutonA-ON.jpg);
}
.MonBoutonEntier:hover .PartieBoutonB
{
   background-image:url(../img/PartieBoutonB-ON.jpg);
}


Du coup quand je survole le container (peu importe la partie du bouton puisque c'est le container en entier qui réagit au passage de la souris --> 'MonBoutonEntier:hover') les deux parties de mon bouton sont automatiquement modifiés.

Voilà j'espère que cette fois c'est un peu plus compréhensible pour vous Lise? Sinon n'hésitez pas à me dire ce que vous ne saisissez pas, il y a toujours moyen de se comprendre. Smiley cligne
Modifié par LordBatoon (07 Feb 2010 - 03:43)