L'un des plus grands défis pour les concepteurs Web consiste à trouver le moyen de placer beaucoup d'informations sur une page sans perdre en convivialité. Le contenu à onglets est un excellent moyen de traiter ce problème et a été largement utilisé sur les blogs récemment. Aujourd’hui, nous allons créer un petit bloc d’informations à onglets en HTML, puis le faire fonctionner à l’aide de javascript, puis nous arriverons au même résultat avec la bibliothèque jQuery..
Tout d’abord, nous avons besoin de quelque chose qui ait l’air génial. Donc, un rapide voyage dans Photoshop et le tour est joué, nous avons une belle maquette de ce à quoi devrait ressembler notre composant à onglets. C'est assez simple avec quelques dégradés supplémentaires pour rendre les nettuts superbes. Vous pouvez récupérer le fichier PSD de Photoshop pour cette image si vous voulez regarder de plus près, mais c'est assez simple et nous pouvons le construire à partir d'un JPG plat vraiment.
La première chose à faire lors de la construction est bien sûr de vous donner une idée approximative de la façon dont vous allez le faire. Cela devient plus facile avec plus de choses que vous avez développées. En regardant cette image, je dirais que la meilleure chose à faire est:
Donc, pour résumer, ce sera quelque chose comme ça:
Ne vous inquiétez pas si regarder cette image ne vous fait pas immédiatement penser à cette structure. Parfois, vous avez juste besoin de faire les choses par essais et erreurs. Dans mon cas, j’ai fait ces petites choses à onglets à quelques reprises et je sais que c’est une façon simple et agréable de les faire..
En outre, il est bon de penser à une telle structure avant d’avoir beaucoup de noms de classes, d’identifiants et de contenus car il peut être difficile de voir la forêt à partir des arbres plus tard. Surtout quand vous ajoutez le contenu pour tous les différents onglets.
Alors maintenant que nous avons une idée de la façon de construire notre structure, passons à cela!
Maintenant, si vous avez suivi mes tutoriels sur PSDTUTS, vous saurez que j'aime un bon fond dégradé. Donc, avant même de commencer avec la structure à onglets, obtenons-nous un beau fond!
Ouvrez Photoshop, créez un document de 1000 x 1000 pixels et tracez un joli dégradé radial (subtil) comme celui présenté ci-dessous. Notez que j'ai dessiné à partir du centre / haut et que je me suis assuré que le dégradé est terminé au moment où j'arrive au bord du document. Cela signifie que je peux définir la couleur d'arrière-plan en HTML sur la couleur la plus foncée. Si quelqu'un étend la fenêtre de son navigateur, il sera transparent..
Donc, créez un nouveau répertoire pour le projet, puis créez un deuxième répertoire à l'intérieur appelé images et enregistrez cette image à l'intérieur comme background.jpg. Lors de la sauvegarde utiliser Fichier> Enregistrer pour le Web et les périphériques et sélectionnez JPG avec un réglage de qualité d’environ 70. Cela revient à une taille de fichier de 16 ko, ce qui n’est pas si mal. Il était un temps où il fallait vraiment économiser et économiser, mais maintenant vous voulez juste vous assurer que vous ne gaspillez pas stupidement la taille de vos fichiers..
Maintenant, nous créons un document HTML et écrivons du code:
Structure à onglets - régulière
Ce sera donc la base de notre code HTML. Maintenant, nous allons créer le style.css documentez et écrivez ce qui suit:
body background-image: url (images / background.jpg); répétition de fond: non répétée; position de fond: en haut au centre; couleur de fond: # 657077; marge: 40 px;
Quelques points à noter ici:
Vous pouvez voir le document HTML résultant ici. Notez que si vous redimensionnez votre fenêtre, c’est un joli fond dégradé. Wunderbar!
Ensuite, nous ajoutons notre structure à la page pour pouvoir commencer à la styler..
Structure à onglets - régulière Parcourir le site Sélectionnez un onglet
Contenu pour l'onglet 1Contenu pour l'onglet 2Contenu pour l'onglet 3
Donc, comme vous pouvez le constater, j’ai utilisé la même structure que celle mentionnée à l’étape 2. identifiants et Des classes et du contenu réel. Voici le raisonnement derrière ce que j'ai fait:
.tabbed_area ul
mais cela pourrait se confondre avec l'avenir OK, donc sans styles, ça ne ressemble pas beaucoup… encore!
Maintenant, avec les éléments de style, je pense qu'il est préférable de travailler à partir de l'élément extérieur. Nous allons donc commencer par cet élément -
#tabbed_box margin: 0px auto 0px auto; largeur: 300px;
Maintenant, nous allons faire la zone de titre. Nous pouvons styler le titre comme ceci:
.tabbed_box h4 font-family: Arial, Helvetica, sans-serif; taille de police: 23px; couleur: #ffffff; espacement des lettres: -1px; marge inférieure: 10px; .tabbed_box h4 petit color: # e3e9ec; poids de police: normal; taille de police: 9px; famille de polices: Verdana, Arial, Helvetica, sans serif; text-transform: majuscule; position: relative; en haut: -4px; à gauche: 6px; espacement des lettres: 0px;
Quelques points à noter ici:
Ensuite, nous donnerons notre intérieur
.tabbed_area border: 1px solid # 494e52; couleur de fond: # 636d76; rembourrage: 8px;
Cela lui donne juste un peu de définition et écarte les éléments intérieurs des côtés. Vous pouvez voir où nous en sommes dans l'image ci-dessous.
En travaillant de l’extérieur, nous avons donné à notre élément un peu de forme et il est beaucoup plus facile de voir comment il se présentera. De plus, vous aurez souvent des contraintes venant de l’extérieur, par exemple, il se peut que la zone doive s’inscrire dans une colonne d’une certaine largeur. Enfin, c’est aussi une bonne idée de sortir, car alors tout héritage de style est clair. Par exemple, si vous utilisez les éléments intérieurs en premier, les styles ultérieurs peuvent affecter ces éléments intérieurs et vous devez revenir en arrière et vous réajuster quand même..
Maintenant nous arrivons aux bonnes choses - les onglets! Si nous ajoutons ce petit morceau de CSS, nous ferons beaucoup pour que les onglets ressemblent davantage à des onglets:
ul.tabs margin: 0px; remplissage: 0px; ul.tabs li list-style: none; affichage: en ligne;
Ce code dit que le
Il y a en fait d'autres valeurs d'affichage que vous pouvez lire sur Quirksmode.
Bien sûr, nos "onglets" ont toujours un aspect assez nul, alors donnons-leur un peu de style. Nous avons utilisé le
ul.tabs li a couleur de fond: # 464c54; couleur: # ffebb5; remplissage: 8px 14px 8px 14px; texte-décoration: aucun; taille de police: 9px; famille de polices: Verdana, Arial, Helvetica, sans serif; poids de police: gras; text-transform: majuscule; bordure: solide 1px # 464c54; ul.tabs li a: survoler background-color: # 2f343a; couleur de bordure: # 2f343a; ul.tabs li a.active background-color: #ffffff; couleur: # 282e32; bordure: solide 1px # 464c54; border-bottom: 1px solide #ffffff;
Donc, ce que nous avons fait ici est:
Nous devons faire deux choses pour que les zones de contenu fonctionnent. La première est que nous devrions faire disparaître les deux autres zones et la seconde est de leur donner un style approprié.
.content background-color: #ffffff; rembourrage: 10px; bordure: solide 1px # 464c54; # content_2, # content_3 display: none;
Vous verrez que la première partie du CSS indique au navigateur que tous les éléments avec classe = "contenu" doit être blanc avec un rembourrage et une bordure (de la même couleur que les onglets). La deuxième partie dit que les éléments avec id = "content_2" et id = "content_3" devrait avoir un affichage: aucun, ou autrement devrait être invisible.
Plus tard, lorsque nous ajoutons du Javascript, nous pouvons utiliser le script pour alterner entre display: none et display: block pour les afficher et les masquer..
Voici donc à quoi ressemblent nos onglets. Vous pouvez également voir une version HTML de l’endroit où nous nous trouvons. Comme vous pouvez le constater, la situation est proche maintenant, mais nous devons corriger l’espacement et ajouter du contenu réel dans.
Résoudre le problème de l’espacement est en réalité une simple question d’ajout de marges à la
ul.tabs margin: 0px; remplissage: 0px; marge supérieure: 5px; marge inférieure: 6px;
Pour être parfaitement honnête, je ne sais pas pourquoi ce problème d'espacement est survenu. Parfois, le HTML me mystifie, mais je modifie les paramètres jusqu'à ce que tout soit réglé. Parfois, au cours du processus, je découvre la cause, parfois non. Je suppose que ce que je dis, c’est que, sauf si vous allez entrer dans les détails les plus précis des spécifications de la W3, vous rencontrerez tôt ou tard des problèmes que vous ne pourrez pas expliquer. Ne vous laissez pas décourager, ajustez-vous jusqu'à ce que vous trouviez un correctif ou une solution..
Nous allons maintenant ajouter du contenu dans la zone de contenu. J'avais évité cela plus tôt car je voulais que le code HTML reste simple. En voici quelques unes:
Parcourir le site Sélectionnez un onglet
Donc, je viens d’ajouter un tas de listes non ordonnées dans les trois zones de contenu. Incidemment, je me moque de cela comme s'il devait être utilisé sur un blog WordPress. Mais en réalité, vous pourriez l'utiliser pour toutes sortes de choses. La nouvelle page d'accueil FlashDen sur laquelle j'ai travaillé il y a quelques jours utilise des zones à onglets pour afficher différents types de fichiers récents..
Nous allons maintenant ajouter un peu de style pour les rendre un peu plus agréables:
.content ul margin: 0px; remplissage: 0px 20px 0px 20px; .content ul li list-style: none; border-bottom: 1px solid # d6dde0; rembourrage en haut: 15px; rembourrage en bas: 15px; taille de police: 13px; .content ul li a text-decoration: none; couleur: # 3e4346; .content ul li un petit color: # 8b959c; taille de police: 9px; text-transform: majuscule; famille de polices: Verdana, Arial, Helvetica, sans serif; position: relative; à gauche: 4px; en haut: 0px;
Encore une fois, nous stylisons nos listes. Cette fois plutôt que de donner la
Autres choses à noter:
Voici donc à quoi ressemble notre page:
Dans l’ensemble, c’est plutôt bon, sauf que nous avons trop de frontières. Mais ce n'est pas grave, nous pouvons le réparer avec un pseudo-sélecteur magique appelé 'dernier enfant' comme ça:
.content ul li: dernier enfant border-bottom: none;
Ce style s’applique uniquement au dernier élément de son genre - c’est-à-dire ce dernier
Il ne reste plus qu’une étape pour finir notre code HTML: créer de jolies images d’arrière-plan pour nos éléments. Comme vous vous en souviendrez, certains éléments de mon fichier PSD d'origine présentaient des dégradés subtils. Il est donc temps d'ajouter ces éléments. Il existe trois bits gradués: (a) sur l'onglet actif (b) sur les onglets inactifs et (c) au bas de la zone de contenu. Voici les trois images dont nous aurons besoin:
Ils sont un peu difficiles à voir, mais au fond, il s’agit de petites tranches de dégradé que nous définirons comme des images de fond répétitives. Voici une vue rapprochée de celle de l'onglet (remarque: j'ai ajouté une fine bordure tout autour pour la rendre plus claire. Notez qu'il y a une ligne blanche de 1px en haut. Cela rendra l'onglet vraiment net..
Nous devons donc apporter quelques modifications au code CSS pour ajouter des images d’arrière-plan, comme ceci:
ul.tabs li a image d'arrière-plan: url (images / tab_off.jpg); répéter en arrière-plan: répéter-x; position de fond: en bas; ul.tabs li a.active image-fond: url (images / tab_on.jpg); répéter en arrière-plan: répéter-x; position de fond: top; .content background-image: url (images / content_bottom.jpg); répéter en arrière-plan: répéter-x; position de fond: en bas;
Notez que j'ai effectivement inséré ces bits supplémentaires dans le reste de leurs définitions de classe, mais par souci de brièveté, nous venons de les copier dans des extraits. Comme vous pouvez le constater dans les trois cas, nous répétons une image d'arrière-plan uniquement sur l'axe des x. Dans le cas de deux (l'onglet off et la zone de contenu), nous le faisons en bas et dans l'autre, en haut..
Et avec cela, nous avons officiellement terminé la partie HTML / CSS de ce tutoriel. Vous pouvez voir la page stylée terminée ici.
Nous devons ensuite ajouter du Javascript pour que nos onglets fassent quelque chose. Nous allons d’abord le faire à la main, puis nous vous montrerons comment utiliser une bibliothèque Javascript pour accomplir la même chose. Je dois maintenant préciser que je ne suis pas un expert du JS et que j'espère pouvoir faire venir de véritables maîtres de la programmation pour écrire des tutoriels. Par conséquent, si vous remarquez que je fais quelque chose de douteux, n'hésitez pas à laisser un commentaire. Je vais retoucher le tutoriel et le rendre un peu plus de bonnes pratiques!
Commençons par définir ce que nous voulons faire lorsque quelqu'un clique sur un onglet. Nous voulons éteindre notre onglet actuel, allumer le nouvel, masquer la zone de contenu actuelle et afficher la nouvelle.
Nous pourrions maintenant avoir quelque chose d’intelligent qui détermine quel onglet est actuellement activé et l’éteint, mais il est plus facile de simplement les parcourir et de les désactiver tous, puis d’allumer celui que nous voulons. De même pour les zones de contenu, nous pouvons masquer les trois et afficher ensuite celle que nous voulons. Cela nous évite de devoir travailler sur l'état actuel des choses.
Les éléments avec lesquels nous travaillons ressemblent à ceci:
Maintenant, en Javascript, nous pouvons trouver un élément simplement en utilisant son identifiant et la méthode document.getElementById (). Ainsi, document.getElementById ('content_1') nous donnerait le premier domaine de contenu. Nous pouvons ensuite définir son style d'affichage sur none en utilisant cette ligne:
document.getElementById ('content_1'). style.display = 'none';
De même pour voir une classe que nous utilisons:
document.getElementById ('tab_1'). className = 'active';
Alors alors un vraiment Une approche simple consisterait à écrire:
fonction tabSwitch (new_tab, new_content) document.getElementById ('content_1'). style.display = 'none'; document.getElementById ('content_2'). style.display = 'none'; document.getElementById ('content_3'). style.display = 'none'; document.getElementById (new_content) .style.display = 'block'; document.getElementById ('tab_1'). className = "; document.getElementById ('tab_2'). className ="; document.getElementById ('tab_3'). className = "; document.getElementById (new_tab) .className = 'active';
Cela serait placé dans un fichier, appelons-le functions.js. Nous appellerions alors ce script en modifiant nos liens d'onglets en:
Et bien sûr, voici un exemple de notre exemple javascript super simple. Ça marche!
Maintenant, il y a des problèmes très évidents avec ce script. Notamment, si vous ajoutez un autre onglet, vous devrez changer de fonction. Et si vous avez plusieurs onglets sur une page, vous aurez besoin de deux fonctions! Alors renforçons un peu:
fonction tabSwitch_2 (active, nombre, préfixe de tabulation, préfixe de contenu) pour (var i = 1; i < number+1; i++) document.getElementById(content_prefix+i).style.display = 'none'; document.getElementById(tab_prefix+i).className ="; document.getElementById(content_prefix+active).style.display = 'block'; document.getElementById(tab_prefix+active).className = 'active';
Notre deuxième version de la fonction de commutation d’onglet prend quelques arguments supplémentaires, mais est un peu plus intelligente. Cela suppose que nous ayons un ensemble d'onglets et un ensemble de zones de contenu, ainsi que des identifiants comportant un préfixe et un ensemble de nombres incrémentiels. C'est à dire. tab_1, tab_2… et content_1, content_2…
Le premier argument que notre fonction prend, "actif", est le numéro onglet / contenu que nous voulons. Le deuxième argument, 'nombre', est le nombre d'onglets utilisés. Les troisième et quatrième arguments sont les préfixes utilisés dans les identifiants de nos éléments.
La fonction a alors une boucle for qui passe de 1 au nombre d'onglets et les éteint tous, puis allume les deux que nous voulons à la fin. En d'autres termes, c'est le même script qu'auparavant, mais nous venons de le rendre un peu plus intelligent.
Donc, dans notre exemple d'appeler la fonction, nous aurions ce code:
Cela signifie que plus tard, si nous avions un deuxième jeu d'onglets, nous pourrions leur donner différents préfixes d'identifiant et utiliser la même fonction encore et encore..
Voir le deuxième exemple en javascript.
Dernièrement, de nombreuses bibliothèques Javascript sont apparues. En fait, il en existe (au moins) deux spécialement conçues pour obtenir cet effet de tabulation: MooTabs et DomTab. Je n'ai pas utilisé non plus, mais d'un bref coup d'œil, ils parurent tout à fait utilisables.
Cependant, comme j'ai beaucoup entendu parler de la bibliothèque jQuery, j'ai décidé d'essayer le même changement d'onglet avec jQuery. J'ai le sentiment que ma solution pourrait nécessiter du travail, mais il est toujours intéressant de regarder à travers.
Alors tout d'abord, allez sur le site jQuery et téléchargez la dernière version de leur bibliothèque de scripts.
jQuery fournit un tas de fonctions qui vous permettent de sélectionner des groupes de choses. Par exemple, si vous souhaitez sélectionner chaque élément de la page qui constitue un lien (c'est-à-dire. éléments) et ensuite les faire disparaître, vous placeriez cela dans votre surface:
La première ligne ajoute la bibliothèque de scripts jQuery. La zone de script principale est à l'intérieur d'un morceau de code qui ressemble à ceci: $ (document) .ready (fonction () );
En gros, cela indique à votre navigateur d'exécuter tout ce qu'il contient lorsqu'il se trouve sur la page. Donc, dans notre cas, nous lui donnons la commande:
$ ("a"). slideUp ();
Cela dit trouver tout ce qui est un et exécutez slideUp () dessus. Ou en d'autres termes: trouver tous les liens et les faire disparaître avec un effet de glissement. Essayez d’ajouter ce script à une page et chargez-la. Tous vos liens disparaîtront. Plutôt chouette hein?
Quoi qu'il en soit, il existe de nombreuses façons de sélectionner des éléments, et vous pouvez en savoir plus sur l'API et la documentation. Vous pouvez faire des choses comme trouver chaque élément avec une certaine classe, un certain identifiant, etc. À un moment donné, j’écrirai une introduction appropriée à jQuery ici, mais pour le moment, cette intro minuscule fera l'affaire - en plus d'avoir juste une heure d'expérience avec jQuery, je soupçonne que ce serait une sorte de parodie pour moi d'écrire une l'intro!
Après quelques expériences, j’ai donc trouvé un moyen d’utiliser jQuery pour faire glisser mes onglets. Pour ce faire, j’ai modifié mes liens afin de ne pas utiliser de javascript, mais plutôt d’avoir un Titre attribut et un extra class = "tab". Notez que vous pouvez donner deux classes à un élément en procédant ainsi: class = "onglet actif".