Source : Menu à onglets avec la possibilité de créer des raccourcis clavier pour passer d'un onglet à l'autre
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Language" content="fr" />
<meta name="Author" content="Auteur - www.developpez.com" />
<style type="text/css">
<!--
.onglet, .conteneur{
width: 600px;
float: left;
clear: both;
padding: 0px;
margin: 0px;
}
.aspectGeneral{
padding-left: 10px;
padding-right: 10px;
padding-top: 4px;
padding-bottom: 4px;
text-align: center;
margin: 0px 3px 0px 0px;
cursor: pointer;
float: left;
font-weight: normal;
font-family: Comic Sans MS;
font-size: 12pt;
}
.desactive{
color:#555555;
background-color: #777777;
border-top: inset 2px #777777;
border-left: inset 2px #777777;
border-right: inset 2px #777777;
border-bottom: none;
}
.conteneur, .active{
background-color: #DDDDDD;
}
.active{
color:#000000;
border-top: outset 2px #777777;
border-left: outset 2px #777777;
border-right: outset 2px #777777;
border-bottom: none;
}
.conteneur{
border-top: none;
border-left: outset 2px #777777;
border-right: outset 2px #777777;
border-bottom: outset 2px #777777;
margin: 0px;
padding: 5px;
}
.contenu{
display: none;
overflow: auto;
height: 150px;
padding: 0px;
margin: 0px;
border: #FFFFFF groove 3px;
}
.souligne{
text-decoration: underline;
}
.comm{
font-family: "Comic Sans MS";
font-size: 10pt;
letter-spacing: 1px;
color: #000000;
height: 50px;
overflow: auto;
margin: 3px; /* egales (pour le margin right et left au moins) a l'epaisseur de la bordure de contenu */
}
//-->
</style>
<script type="text/javascript">
<!--
/* definiton des raccourcis clavier */
/* Syntaxe :
** raccourcis["caractere"] = "idOnglet"
** /!\ Utiliser uniquement des caracteres alphanumeriques : 0-9 ; a-z /!\
** cf. ci-dessous
*************************************/
var raccourcis = new Array();
raccourcis["o"] = "onglet0";
raccourcis["n"] = "onglet1";
raccourcis["g"] = "onglet2";
raccourcis["l"] = "onglet3";
raccourcis["e"] = "onglet4";
raccourcis["t"] = "onglet5";
raccourcis["0"] = "onglet0";
raccourcis["1"] = "onglet1";
raccourcis["2"] = "onglet2";
raccourcis["3"] = "onglet3";
raccourcis["4"] = "onglet4";
raccourcis["5"] = "onglet5";
/* debut du script */
var oldOnglet=null, oldContenu=null;
var objFocus = false;
function inputFocus()
{
objFocus = true;
}
function inputBlur()
{
objFocus = false;
}
function keyUp(ev)
{
var c, code, o;
if (!objFocus)
{
code = ev.keyCode;
if (code>=96 && code<=105) //pave numerique
c = code-96; //96 code du 0 du pave numerique
else
c = String.fromCharCode(code).toLowerCase();
o = raccourcis[c]
if (o!=null)
mouseClic(o);
}
}
function mouseClic(objId)
{
var exp = new RegExp("[^onglet]","gi");
var n = objId.substring(objId.search(exp), objId.length);
gestionOnglets(n);
}
function gestionOnglets(code)
{
var onglet = document.getElementById("onglet"+code);
var contenu = document.getElementById("contenu"+code);
if (onglet!=null)
{
onglet.className = "active aspectGeneral";
if (contenu!=null)
contenu.style.display="block";
if (oldOnglet!=null && oldOnglet != onglet)
{
oldOnglet.className = "desactive aspectGeneral";
if (oldContenu!=null)
oldContenu.style.display="none";
}
oldOnglet = onglet;
oldContenu = contenu;
}
}
//-->
</script>
</head>
<body onkeyup="keyUp(event)" onload="mouseClic('onglet0')">
<div><br /><br /></div>
<!-- -->
<div class="onglet">
<div class="desactive aspectGeneral" id="onglet0" onclick="mouseClic(this.id)"> <span class="souligne">o</span>nglet 0</div>
<div class="desactive aspectGeneral" id="onglet1" onclick="mouseClic(this.id)"> o<span class="souligne">n</span>glet 1</div>
<div class="desactive aspectGeneral" id="onglet2" onclick="mouseClic(this.id)"> on<span class="souligne">g</span>let 2</div>
<div class="desactive aspectGeneral" id="onglet3" onclick="mouseClic(this.id)"> ong<span class="souligne">l</span>et 3</div>
<div class="desactive aspectGeneral" id="onglet4" onclick="mouseClic(this.id)"> ongl<span class="souligne">e</span>t 4</div>
<div class="desactive aspectGeneral" id="onglet5" onclick="mouseClic(this.id)"> ongle<span class="souligne">t</span> 5</div>
</div>
<div class="conteneur">
<div class="comm">Ceci est le contenu commun aux onglets....<br />
bla bla bla<br /><br />bla bla bla
</div>
<div class="contenu" id="contenu0">
Contenu 0<br />
<textarea rows="4" cols="20" id="idTextarea" onfocus="inputFocus()" onblur="inputBlur()"></textarea>
</div>
<div class="contenu" id="contenu1">
contenu 1 avec un overflow...
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
</div>
<div class="contenu" id="contenu2">
contenu 2
</div>
<div class="contenu" id="contenu3">
contenu 3
</div>
<div class="contenu" id="contenu4">
contenu 4
</div>
<div class="contenu" id="contenu5">
Tapez votre message :
<input type="text" value="Par Defaut" id="idText" size="40" maxlength="35" onfocus="inputFocus()" onblur="inputBlur()"/>
</div>
</div>
<!-- -->
</body>
</html> |
Remarques :
- Page avec un système d'onglets, compatible avec IE et FF, pas testé sur d'autres navigateurs ;
- Valide XHTML 1.1 ;
- Code réservé pour des petites pages : en effet tout est dans la même page, les textes sont dans des div cachés ;
- Le code offre la possibilité de créer des raccourcis clavier pour passer d'un onglet à l'autre (dans l'exemple les touches o, n, g, l, e, t et 1, 2, 3, 4, 5 sont gérées).
Script :
Fonctions :
- raccourcis[] : tableau pour les raccourcis clavier
- keyUp() : fonction appelée lors d'un onkeyup, pour la gestion du clavier
- mouseClic() : fonction appelée lors d'un clic sur un onglet
- gestionOnglets(N) : gère l'affichage des onglets et des contenus.
- inputFocus() / inputBlur() : utilisé pour désactiver ou activer les raccourcis clavier lorsque que les événements onfocus et onblur ont lieu sur les input ou textarea. Il faut toutefois gérer onblur et onfocus sur ces éléments (cf. exemple).
- Syntaxe des id :
ongletN, contenuN, avec N un nombre
1 2 3 4 5 6 7 8 9 10 11 12
|
<div class="onglet">
<div class="desactive aspectGeneral" id="onglet0" onclick="mouseClic(this.id)"> <span class="souligne">o</span>nglet 0</div>
....
</div>
<div class="conteneur">
...
<div class="contenu" id="contenu0">
Ceci est le contenu du div.....
</div>
...
</div> |
- Definition des raccourcis clavier / Gestion des raccourcis :
Syntaxe :
raccourcis["caractère"] = "idOnglet";
un caractère de a à z (en minuscule !) ou un chiffre de 0 à 9 (cf. exemple).
Il n'est pas nécessaire de définir un raccourci (voir ci-dessous).
onkeyup=keyUp(event) dans la balise body
=> supprimer cet appel si vous ne voulez pas de raccourci.
- Gestion de la souris :
onload="mouseClic('idOnglet')" dans la balise body
=> pour définir l'onglet à afficher lors du chargement de la page.
onclick="mouseClic(this.id)"
=> pour chaque clic sur onglet
- Feuilles de styles :
- onglet, conteneur : style commun aux div conteneurs
- styles des onglets
- onglet : aspect du conteneur des onglets
- aspectGeneral : style commun à tous les onglets
- desactive : style de l'onglet lorsqu'il est désactivé
- active : style de l'onglet lorsqu'il est activé
- conteneur : div qui conient les éléments à afficher.
- comm : style de la partie commune à tous les onglets
- contenu : style des div qui contiennent les textes à afficher.
- souligne : pour souligner un caractère du titre de l'onglet

=>
Utilisez le pixel comme unité (bugs divers FF/IE avec les pourcentages).
Autres exemples de menus à onglets :
http://css.developpez.com/galerie/?p...orizontaux#MH2
http://css.developpez.com/tutoriels/menu-onglets/
Partager