28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous

Je voudrais présenter une ligne de boutons ronds (parfaitement circulaires) à 2 états :
il faut que les boutons soient réalisés sans images, qu'ils soient poussoirs : si cliqué (un seul à la fois), il doit apparaître éclairé (rétroéclairé) ; si un autre bouton quelconque est cliqué, le précédent reprend sa couleur d'origine.
La cerise sur le gâteau serait un bouton (le dernier de la rangée) qui annule tout, mais cliqué ne change pas de couleur (c'est une fonction 'annulation').
Le tout en Javascript et CSS pour tourner sous IE8.
[évidemment les boutons ne sont décrits qu'une fois, mais chacun porte un numéro de 1 à ..., sauf le dernier].
Je vous remercie de ce que vous pourrez faire pour moi.
Cordialement
Jean-Marie d'orguevirtuel
Merci d'avoir répondu Julien,

Voici des éléments :

J'ai un site : orguesauxerre.net
Il y a une page sur les orgues de la cathédrale ; sur cette partie du site, il y a une page 'contact.htm' sur laquelle figure : "Vous pourrez voir ici quelques photos du modèle...".
Ca renvoie à une page'Console.htm'.
Tout est sur les photos.
Ce que je voudrais, c'est faire une page avec uniquement (dans un premier temps) la vue interactive des claviers et du fronton supérieur.
Les boutons des claviers seraient interactifs ainsi que les 4 premiers et les 16 derniers du fronton supérieur.
On ne parle pas pour l'instant des 'jeux' qui sont de chaque côté des claviers ! (c'est un doublage).
Le cahier des charges :
les langages HTML, Javascript, CSS
Les boutons ronds (sans images) seront en JS + CSS pour être affichables sous IE8 (qui ne connaît pas certaines balises ! ! !).
Je n'arrive pas à faire tourner DD_Roundies, ni PIE, ni Curvycorner...
Vous pouvez me poser toute questions complémentaires afin que j'aboutisse ou que j'abandonne, mais il y a certainement beaucoup plus complexe sur le web...
Jean-Marie d'orguevirtuel
Ta description fait penser à un fonctionnement de bouton radio. Ca peut se gérer avec l'attribut "checked" en css en plaçant le bouton radio avec opacité nulle au-dessus d'une div qui met en forme le bouton... Voir ce tuto. Cette méthode peut peut-être répondre à tes besoins.
Oui, ça peut se comparer à des boutons radio... Mais bon, je voudrais définir mes boutons moi-même.
J'avais vu sur la toile qu'on pouvait faire un rond avec 'border-radius' et qu'il fallait que la taille soit définie à la moitié du carré qui pouvait le contenir.
Or 'border-radius' n'est pas reconnu par IE8 et je suis sous XP qui n'admet pas les versions supérieures à IE8.
J'ai un bout de code qui me convient quand à la gestion des boutons, mais ils s'obstinent à rester carrés.
voici le code :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv=Accept-Language CONTENT="fr" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<!--meta http-equiv="expires" content="0"-->
<title>Combinaisons</title> 

<style type="text/css" media="screen"> 
   /*#toolbar-menubar {display: none;}*/
   button.p1 
      { 
         width:50px; 
         height:50px; 
         color:black; 
         background-color:white; 
         font-weight:bold;
		 -webkit-border-radius:25px;
		 -moz-border-radius:25px;
		 -o-border-radius:25px;
		 -khtml-border-radius:25px;
		 border-radius:25px;
		 behavior: url('/border-radius.htc');
	  }
   button.p1:active
      {
	     width:50px; 
         height:50px; 
         color:black; 
         background-color: yellow; 
         font-weight:bold;
		 -webkit-border-radius:25px;
		 -moz-border-radius:25px;
		 -o-border-radius:25px;
		 -khtml-border-radius:25px;
		 border-radius:25px;
		 behavior: url('/border-radius.htc');
	  }  
   button.p2 
      { 
         width:50px; 
         height:50px; 
         color:black; 
         background-color:white; 
         font-weight:bold; 
         font-size:8pt;
		 -webkit-border-radius:25px;
		 -moz-border-radius:25px;
		 -o-border-radius:25px;
		 -khtml-border-radius:25px;
		 border-radius:25px;
		 behavior: url('/border-radius.htc');
      } 
</style> 
<script type="text/javascript"> 
   function Request(eventname) 
      { 
         var xmlHttp = null; 
         var dateObject = new Date(); 
         /*try 
            { 
               // Firefox, Opera 8.0+, Safari, IE7 
               xmlHttp = new XMLHttpRequest(); 
            } 
         catch (e) 
            { 
               try 
                  { 
                     // IE 6 
                     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
                  } 
               catch (e) 
                  { 
                     // IE 5 
                     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
                  } 
            }*/ 
         xmlHttp.open('GET', "empty?" + eventname + "&_id" + dateObject.getTime(), true); 
         xmlHttp.send(null); 
         return false; 
      } 
   function TriggerEvent(eventname) 
      { 
         Request(eventname + "&withoutRelease"); 
         return false; 
      } 
   function ButtonReleased() 
      { 
         Request("ButtonReleased"); 
         return false; 
      } 
   function KeyDownHandler(event) 
      { 
         switch(event.which) 
            { 
               case 48: case 96: TriggerEvent("Num10"); break; 
               case 49: case 97: TriggerEvent("Num1"); break; 
               case 50: case 98: TriggerEvent("Num2"); break; 
               case 51: case 99: TriggerEvent("Num3"); break; 
               case 52: case 100: TriggerEvent("Num4"); break; 
               case 53: case 101: TriggerEvent("Num5"); break; 
               case 54: case 102: TriggerEvent("Num6"); break; 
               case 55: case 103: TriggerEvent("Num7"); break; 
               case 56: case 104: TriggerEvent("Num8"); break; 
               case 57: case 105: TriggerEvent("Num9"); break; 
               case 58: case 106: TriggerEvent("Num11"); break; 
               case 59: case 107: TriggerEvent("Num12"); break;
               case 60: case 108: TriggerEvent("Num13"); break;
               case 61: case 109: TriggerEvent("Num14"); break;
               case 62  case 110: TriggerEvent("Num15"); break;
               case 63: case 111: TriggerEvent("Num16"); break;
               case 64: case 112: TriggerEvent("Aj"); break;
               default: alert(event.which); break; 
            } 
         return false; 
      } 
   function StartUp() 
      { 
         document.onkeydown = KeyDownHandler; 
         document.onkeyup = ButtonReleased; 
/* It is important to assign a mouse-up event handler to the document body. 
// Assigning it to the element (eg. button) wouldn't get triggered if the pressed 
// mouse moves outside the elements area.*/ 
         document.onmouseup = ButtonReleased; 
      }
</script>
</head> 
<body onLoad="StartUp()" bgcolor="#3A3C69" text=white link=white vlink=white alink=white> 
   <center> 
   <br />
   <br />
   <br />
   <br />  
      <table border="0"> 
         <tr>
            <td><button class="p2" onMouseDown="TriggerEvent('Ajust')" style="color:black; background-color:white;">Aj</button></td>
            <td width="10"></td>
            <td><button class=p1 onMouseDown="TriggerEvent('Num1')">1</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num2')">2</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num3')">3</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num4')">4</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num5')">5</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num6')">6</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num7')">7</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num8')">8</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num9')">9</button></td> 
            <td><button class=p1 onMouseDown="TriggerEvent('Num10')">10</button></td>
            <td><button class=p1 onMouseDown="TriggerEvent('Num11')">11</button></td>
            <td><button class=p1 onMouseDown="TriggerEvent('Num12')">12</button></td>
            <td><button class=p1 onMouseDown="TriggerEvent('Num13')">13</button></td>
            <td><button class=p1 onMouseDown="TriggerEvent('Num14')">14</button></td>
            <td><button class=p1 onMouseDown="TriggerEvent('Num15')">15</button></td>
            <td><button class=p1 onMouseDown="TriggerEvent('Num16')">16</button></td>  
            <td width="10"></td>
            <td><button class=p2 onMouseDown="TriggerEvent('Power')" style="color:black; background-color:white;">Ann</button></td> 
         </tr> 
      </table> 
   </center> 
</body> 
</html> 


Les lignes :
behavior: url('/border-radius.htc');

dans le code CSS renvoient bien à un fichier "border-radius.htc" qui est dans le même dossier que la page.
D'un autre côté, lorsqu'un bouton est cliqué, je voudrais qu'il reste avec un fond jaune (pas seulement au moment du clic).

Partant de là, j'ai juste besoin qu'on me dise pourquoi je n'obtiens pas de boutons ronds ?

En fait un bouton rond, n'est-ce pas simplement le fait de juxtaposer les quatre angles arrondis d'une figure (carré, rectangle) sans fournir les autres dimensions (longueur, largeur) ?

Jean-Marie d'orguevirtuel
Modérateur
Bonjour, au passage event.which ne fonctionne pas sous IE8 non plus il me semble…

a écrit :
Les boutons des claviers seraient interactifs

Des boutons interactifs? C'est soit une hérésie, soit un pléonasme.

a écrit :
Les boutons ronds (sans images)

Pourquoi sans image? Cela pourrait être une alternative simple et efficace.
Bonjour,

j'ai essayé PIE, DD_Roundies et Curvycorners sans résultat probant. Sur l'exemple que j'ai joint, c'est PIE.htc qui est implémenté.

Je me suis rendu compte que l'en-tête de ma page avait une incidence sur le résultat (boutons non proportionnels au contenu), mais je ne sais pas gérer ces données...

Il est dommage que je n'arrive pas à paramétrer les applications qui viennent combler les insuffisances d'IE8.

Lorsque j'écrivais 'boutons interactifs', je voulais dire qu'un autre bouton cliqué annule précédent, par opposition à la sélection de boutons multiples.

Quand à 'event.which' j'ignorais qu'il ne tournait pas sous IE8 !

En fait, j'ai capté sur le net une portion de code d'une télécommande que j'ai tentée d'"arranger" ! Mal m'en a pris. Il va falloir que je revoie ma copie, mais hélas, je n'ai pas le niveau.
Modifié par orguevirtuel (22 Jun 2012 - 09:25)
@ kutolovic : oui tout à fait, le which ne fonctionne pas sous MSIE 8.0. Par exemple, si tu veux tester le clic du bouton gauche de la souris, voila comment procéder :
var test = (e.which) ? (e.which == 1) : (e.button == 1);

@ orguevirtuel : ce que je ne comprends pas, c'est pourquoi tu modifies un site afin qu'il soit uniquement utilisable sous MSIE 8.0 ? Sur ton ordinateur, tu peux télécharger Firefox ou Google Chrome ou Apple Safari ou Opera car d'une part ils sons gratuits et d'autre part compatible avec Windows XP.

Je développe avec Firefox en premier mais je fais toujours le possible pour que cela soit compatible avec MSIE 8.0 et les autres navigateurs que j'ai cité.

Voici un exemple de coins arrondis qui fontionne sous MSIE 8.0 :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>CSS 3 PIE</title>

<style type="text/css">
* {
			margin					: 0;
			padding					: 0;
			}

body {
			background-color		: maroon;
			margin					: 25px;
			padding					: 25px;
			}

div.arrondi {
			width					: 450px;
			background				: #fff;
			margin					: 3em 0;
			padding					: 0.5em 0;
			-moz-border-radius		: 10px;
			-webkit-border-radius	: 10px;
			border-radius			: 10px;
			behavior				: url(Data/PIE.htc);
			}

div.arrondi p {
			color					: #333;
			margin					: 1em;
			}
</style>
</head>

<body>
	<div class="arrondi">
		<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
		<p>Suspendisse condimentum augue ut quam fringilla scelerisque.</p>
	</div>
</body>
</html>

Sinon, il y a le tutoriel que je t'ai indiqué. Si tu commencais par poser une question après l'autre au lieu de nous noyer dans une sorte de cahier des charges. Smiley eek
Bonjour,

Pour tes effets d'arrondis sous IE8 (et inf) , PIE.htc semble tout a fait adapté a ce que tu recherche, comme indiqué dans le tuto indiqué par tournikoti .

Voici un test exemple en ligne sur un clavier téléphone, et tu peut voir sous IE6-8 que arrondis et ombrages aussi sont reproduis. (les gradients simples aussi le devraient).
http://gcyrillus.free.fr/essai/digicode.2957292.htm
http://gcyrillus.free.fr/essai/digicode-sous-ie6-pie.jpg
http://gcyrillus.free.fr/essai/digicode-sous-ie8-pie.jpg

Tests sous de véritables versions de IE6 et IE8, c'est la seule manière fiable.

Pour la prtie JS, je ne saurait te conseiller efficacement,
++
Pour Tournikoti, réponse à la première question : sérier les problèmes et les modèles ;
Je cherche à faire des boutons ronds à 2 états stables : cliqué, relevé (c'est-à-dire non furtifs). Pourquoi essayer d'adapter pour fonctionner sous IE8 ? Je l'ai expliqué dans la page ouverture.html de mon site :
"Ce site a été (mal) développé directement en HTML pour être utilisé avec Internet Exploreur, sans adaptation pour d'autres navigateurs !
Lorsqu'il sera terminé, sa compatibilité [en code et en format (1280x960 {actuellement})] avec d'autres navigateurs sera revue... "
Je ne suis pas fier de moi ! Je ne suis pas complètement autodidacte, mais je ne suis pas un webmaster compétent.
Mon site se fait à partir de 1200 pages de documents collectés par 35 années de recherches historiques et actualisables... Il est saisi directement en html avec l'application DW MX et affiché par IE8. Pourquoi cela : parce que c'est tout ce que j'ai sur mon PC.
J'étais technicien de maintenance en informatique (j'ai passé un bac pro à 50 ans ! ) et je ne suis pas totalement ignare. Je sais qu'il existe d'autres navigateurs (gratuits), mais pourquoi ce qui tourne chez les autres, ne tournerait-il pas sous IE8 ?
Ensuite tu me demandes pourquoi uniquement sous IE8 ? Ce n'est pas le but à l'arrivée, mais seulement celui de départ. Je sais pertinament qu'IE8 et XP sont obsolètes ; les versions ultérieures de l'OS ne m'attirent pas et changer de navigateur, même si c'est un des moins bons, m'amènerait à changer des habitudes bien ancrées et je ne cours pas après des artifices supplémentaires qui n'ont qu'une utilité très relative pour moi !
Je fais cette réponse avant d'aller voir les codes proposés ; alors, je vais aller voir ce qu'il en est et je reviendrai, sois-en sûr.
Merci
Jean-Marie d'orguevirtuel
Bonsoir Tournikoti,

Tu dis :
"Voici un exemple de coins arrondis qui fontionne sous MSIE 8.0 :"

Je n'ai aucun doute que ton code soit opérationnel, et pour me donner toutes les chances, je l'ai copié-collé sous DW MX et lancé dans IE8 ; Hé bien sur ma machine, j'obtiens un rectangle, sur fond de page rouge, avec des coins parfaitement carrés !

Je me demande, maintenant, si ce n'est pas un paramétrage de ma machine qui me joue des tours, mais où et quoi ?

Je vais aller voir les propositions de gc-nomade et je vous donnerai mon sentiment sur les résultats.

Jean-Marie d'orguevirtuel
Réponse à gc-nomade,

la première url téléchargée et lancée me donne des boutons carrés !
Les deux autres sont des images .jpg qui, elles, sont bien reproduites ; mais ce ne sont que des images.

Alors mon problème reste entier...

Jean-Marie d'orguevirtuel