Comment créer des onglets adaptatifs (onglets) en utilisant CSS sans utiliser de scripts. Comment créer des onglets adaptatifs (onglets) en utilisant CSS sans utiliser de scripts HTML - onglets simples


À propos d'un code

Onglet Navigation

Onglets de navigation pour deux formulaires.

Réactif : non

Dépendances : bootstrap.css

À propos d'un code

Onglet CSS

Navigateurs compatibles : Chrome, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Onglets

Le sélecteur + sélectionne l'élément adjacent suivant. Historiquement, cela a été cool pour les étiquettes de style. Avec la grille CSS, un élément peut être à côté d'un autre dans le balisage, mais à un endroit totalement différent dans l'affichage. Ce stylet utilise une saisie simple : un sélecteur coché combiné à de nombreux + "pour styliser différentes pages d'un microsite imaginaire.

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Onglets CSS purs

Version radio des onglets. Exigences : ne pas s'appuyer sur des identifiants spécifiques pour CSS (le CSS ne devrait pas avoir besoin de connaître des identifiants spécifiques), flexible pour n'importe quel nombre d'onglets inconnus, accessible. Mises en garde : comme ce sont des cases à cocher, les onglets ne peuvent pas être tabulés, vous devez utiliser les touches fléchées. .

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Onglets CSS

Onglets verticaux CSS purs.

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : non

Dépendances : -

À propos d'un code

Onglets CSS purs avec indicateur

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Onglets de transition animés

Onglets de transition animés avec cases à cocher.

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Onglets de couleurs CSS purs

Pas d'onglets de couleur CSS purs.

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Onglets CSS uniquement

Onglets CSS de conception matérielle uniquement.

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Onglets CSS3

Onglets CSS3 purs réactifs par Sorax.

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Contrôles d'onglets utilisant HTML et CSS

Cliquer sur les étiquettes équivaut en fait à cliquer sur les zones de saisie. Les entrées radio sont masquées avec CSS. Lorsqu'une radio est sélectionnée, ses curieux voisins de contenu d'onglet apparaissent. C'est tout ! Le seul inconvénient est que vous ne pourrez pas styliser l'onglet sélectionné sans recourir à du JS, mais cela ne devrait pas être bien grave.

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Réactif : oui

Dépendances : -

À propos d'un code

Onglets CSS purs

Juste HTML et CSS.

Navigateurs compatibles : Chrome, Edge, Firefox, Opera, Safari

Bonjour, chers lecteurs. En ce jour glacial, nous ferons avec vous de beaux onglets avec en utilisant CSS et JQuery. Il s'avère que ces soi-disant onglets sont très utiles pour le site dans son ensemble : ils peuvent économiser considérablement de l'espace sur la page. Ils peuvent être placés partout, dans la barre latérale, ou directement dans le contenu lui-même, l'article.

De plus, les onglets que nous réaliserons ont un beau design, ils décoreront considérablement votre site. Comment :-) beau et utile, cela me semble une rare coïncidence. De plus, ils sont réalisés uniquement à l'aide de , respectivement : ils se chargent rapidement et ne supportent aucune charge sur le serveur.

JQuery

$(document).ready(function() ( $("#content div").hide(); // Contenu caché $("#tabs li:first").attr("id","current"); // Quel onglet afficher en premier $("#content div:first").fadeIn(); // Afficher le contenu du premier onglet $("#tabs a").click(function(e) ( e.preventDefault() ; $ ("#content div").hide(); //Masquer tout le contenu $("#tabs li").attr("id",""); //Réinitialiser les identifiants $(this).parent() .attr ("id","current"); // Activer les identifiants $("#" + $(this).attr("title")).fadeIn(); // Afficher le contenu de l'onglet courant )) ; ))() ;

C'est essentiellement tout, l'essentiel est d'expérimenter. Vous pouvez ajouter des images d'arrière-plan à ces onglets, ce qui améliorera considérablement leur apparence, mais leur chargement prendra plus de temps.

Compatibilité du navigateur

Ces onglets sont pris en charge par presque tous les navigateurs, mais dans certains d'entre eux, ils seront un peu différents, car beaucoup ne prennent pas encore en charge CSS3.

C'est tout, j'espère que cela vous a plu :-) Si quelque chose n'est pas clair pour vous, assurez-vous de le demander dans les commentaires. À bientôt.

Ongletsà mon avis, sont l'un des meilleures solutions pour la structuration thématique de l'information, ainsi que pour fournir du contenu à l'utilisateur de manière compacte sur une seule page. Aujourd'hui, nous allons découvrir comment créer une chose aussi fonctionnelle sans utiliser Javascript en utilisant uniquement HTML et CSS3.

Pour créer onglets nous utiliserons la balise saisir et sélecteur CSS :vérifié. Tout d'abord, nous devons créer le balisage de la page en HTML

Cliquer sur les cases radio activera les onglets correspondants. D'abord saisir définir l'attribut vérifié="vérifié", cela ouvrira le premier onglet par défaut. Nous masquerons les cases radio elles-mêmes, et pour cliquer dessus nous utiliserons le tag étiquette. Dans le bloc .tabs_cont Nous aurons des blocs avec des onglets dans lesquels le contenu (texte, images, etc.) sera placé. Jusqu'à présent, tout est simple.

Passons aux styles CSS

Onglets ( position : relative ; marge : 0 auto ; largeur : 800 px ; ) .étiquette des onglets ( couleur : #555 ; curseur : pointeur ; affichage : bloc ; flotteur : gauche ; largeur : 150 px ; hauteur : 45 px ; hauteur de ligne : 45 px ; position : relative ; haut : 2 px ; alignement du texte : centre ; ) entrée .tabs ( position : absolue ; gauche : -9999px ; ) #tab_1 : vérifié ~ #tab_l1, #tab_2 : vérifié ~ #tab_l2, #tab_3 : vérifié ~ #tab_l3 ( arrière-plan : #fff ; couleur de la bordure : #fff ; haut : 0 ; z-index : 3 ; ) .tabs_cont ( arrière-plan : #fff ; position : relative ; z-index : 2 ; hauteur : 230px ; )

Ici, nous utilisons des styles pour créer une balise étiquetteélément de bloc et définir ses dimensions, son emplacement et apparence(vous pouvez définir vos propres styles pour l'arrière-plan et les bordures) selon nos besoins, et également masquer saisir utilise le positionnement absolu.

Vient ensuite le même sélecteur :vérifié dont nous avons parlé au début. En mots simples, si le boîtier radio est avec identifiant #tab_1 sélectionné/coché, puis les styles sont appliqués au bloc avec identifiant #tab_l1 et ainsi de suite par analogie. Dans notre cas, nous appliquons des styles au titre de l'onglet sélectionné. Eh bien, à la fin, nous définissons les styles du bloc avec le contenu de l'onglet.

Notre prochaine tâche est de nous assurer que nos onglets peuvent être changés. Pour mettre en œuvre cette tâche, les styles suivants :

Tabs_cont > div ( position : absolue ; gauche : -9999px ; haut : 0 ; opacité : 0 ; -moz-transition : opacité .5s facilité d'entrée-sortie ; -webkit-transition : opacité .5s facilité d'entrée-sortie ; transition : opacité 0,5 s facilité d'entrée et de sortie ; ) #tab_1:checked ~ .tabs_cont #tab_c1, #tab_2:checked ~ .tabs_cont #tab_c2, #tab_3:checked ~ .tabs_cont #tab_c3 ( position : statique ; gauche : 0 ; opacité : 1; )

Tout d’abord, masquons tous nos onglets. La solution la plus simple consiste à utiliser affichage : aucun ;, mais comme nous avons besoin de douceur, les chemins faciles ne sont pas pour nous, alors avec l'aide position : absolue ; nous déplaçons nos blocs au-delà des limites de visibilité, et rendons même ce bloc complètement transparent en utilisant la propriété opacité : 0 ; et augmentez progressivement cette valeur jusqu'à un. La propriété nous aidera à atteindre la douceur transition qui est décrit après. Là encore, nous utilisons le sélecteur :vérifiéà l'aide duquel on rend visible les blocs correspondant aux cases radio sélectionnées.

C'est tout! En travaillant vous-même avec les styles, vous pouvez modifier l'apparence à votre goût.

Ci-dessous vous pouvez télécharger les sources.

Il n'y a pas si longtemps, nous avons envisagé l'implémentation d'onglets avec du contenu, sans connexion javascript, en utilisant exclusivement .
Aujourd'hui, je souhaite vous présenter une autre solution non moins intéressante pour former bloc compact onglets construits sur CSS3 pur et utilisant des éléments de mise en page adaptatifs. Comme dans la première option, rien de superflu et de fastidieux, le minimum de code CSS, et vous aurez à votre disposition un bloc adaptatif avec des onglets commutables qui s'intégrera parfaitement dans n'importe quelle section de la page, qu'il s'agisse d'un message séparé, d'un côté colonne ou une fenêtre modale.

Quels changements ont été apportés par rapport à la première version ?
Tout d'abord, le bloc onglet est devenu adaptatif, c'est-à-dire lors de la visualisation sur appareils mobiles, la taille des onglets change en fonction de la taille des écrans des appareils utilisateurs, le texte des titres est supprimé et seules les icônes de police restent, indiquant la signification du contenu de l'un ou l'autre.
Les icônes de polices proviennent de , la collection est très riche et, de plus, absolument gratuite. Vous pouvez intégrer des icônes dans n'importe quel projet à l'aide d'un ensemble de polices téléchargées, ou les connecter à votre fichier de style CSS directement depuis le site Web du développeur via @import en utilisant la ligne suivante :

@importer l'URL ( "http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css") ;

@import url("http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css");

Dans l’exemple de démonstration, c’est exactement ce que j’ai fait, donc en regardant le code source, vous pouvez facilement comprendre de quoi il s’agit.
La structure des onglets en HTML est assez simple. Conteneur div de base, lien

, dans lequel certains contenus sont pour le moment cachés. Tous! Rien de plus, pas de bibliothèques js, non fichiers supplémentaires les images dans la conception, l'apparence des onglets, ainsi que leurs fonctionnalités, sont formés exclusivement à l'aide de CSS. Bien entendu, l'utilisation des nouvelles normes CSS3 ne garantit pas un fonctionnement stable dans tous les navigateurs sans exception, mais dans les versions modernes, les onglets fonctionnent parfaitement. IE affiche correctement les onglets à partir de la version 9. Donc, si vous vous souciez du psychisme et des sentiments de perception des utilisateurs qui utilisent obstinément les anciennes versions de ce « navigateur », cette méthode Il est préférable de ne pas utiliser la création d'onglets, mais d'utiliser jQuery.

HTML

< div class = "tabs" > < input id= "tab1" type= "radio" name= "tabs" checked> < label for = "tab1" title= "Onglet 1" >Onglet 1 < input id= "tab2" type= "radio" name= "tabs" > < label for = "tab2" title= "Onglet 2" >Onglet 2 < input id= "tab3" type= "radio" name= "tabs" > < label for = "tab3" title= "Onglet 3" >Onglet 3 < input id= "tab4" type= "radio" name= "tabs" > < label for = "tab4" title= "Onglet 4" >Onglet 4 < section id= "content-tab1" > < p> < section id= "content-tab2" > < p> < section id= "content-tab3" > < p>Postez n'importe quel contenu ici.... < section id= "content-tab4" > < p>Postez n'importe quel contenu ici....

Pour organiser les blocs de contenu j'ai utilisé la balise

du clip HTML5, qui est utilisé, dans la plupart des cas, pour diviser un document en sections de signification et de contenu différents, avec la possibilité d'utiliser vos propres titres de premier niveau

.
Le changement d'onglet se produit grâce à l'interaction de l'attribut coché dans la balise et la pseudo-classe:checked , étroitement liées via des identifiants en CSS. C’est dans le traitement de cette méthode que bute le vieux et fameux frein au progrès. Internet Explorer 8, à partir de la version 9, tout fonctionne au mieux.

En douceur, nous arrivons à la partie la plus intéressante : styliser nos onglets en utilisant la magie du CSS. Ici les choses sont encore plus simples, ça ne sert à rien de décrire spécifiquement chaque propriété et paramètres, j'ai écrit quelques explications dans le code source, donc je pense qu'il ne sera pas difficile de comprendre ce qui va où et pourquoi, mais si vous avez des questions ou trouvez une erreur, écrivez dans les commentaires, je répondrai certainement et je vous aiderai.

CSS3

/* Conteneur d'onglets de base */. onglets ( largeur min : 320 px ; largeur maximale : 800 px ; remplissage : 0 px ; marge : 0 auto ; ) /* Stylise les sections de contenu */. onglets> section ( affichage : aucun ; remplissage : 15px ; arrière-plan : #fff ; bordure : 1px solide #ddd; ) . onglets> section> p (marge : 0 0 5px ; hauteur de ligne : 1,5 ; couleur : #383838 ; /* ajouter une animation */- webkit- animation- durée : 1s ; animation- durée : 1s ; - webkit-animation-fill-mode : les deux ; animation-fill-mode : les deux ; - webkit- animation- nom : fadeIn ; nom de l'animation : fadeIn ; ) /* Décrire l'animation de la propriété opacity */@- webkit- images clés fadeIn ( de ( opacité : 0 ; ) à ( opacité : 1 ; ) ) @ images clés fadeIn ( de ( opacité : 0 ; ) à ( opacité : 1 ; ) ) /* Masquer les cases à cocher */. onglets> entrée ( affichage : aucun ; position : absolue ; ) /* Styles des commutateurs d'onglets */. onglets> étiquette ( affichage : bloc en ligne ; marge : 0 0 - 1px ; remplissage : 15px 25px ; poids de la police : 600 ; alignement du texte : centre ; couleur : #aaa ; bordure : 0px solide #ddd ; largeur de la bordure : 1px 1px 1px 1px ; arrière-plan : #f1f1f1 ; rayon de bordure : 3px 3px 0 0 ; ) /* Icônes de police de Font Awesome au format Unicode */. tabs> label: before ( font-family: fontawesome; font-weight: normal; margin- right: 10px; ) . tabs> label[ for *= "1" ] : avant ( contenu : " \f 19a"; ) . tabs> label[ for *= "2" ] : avant ( contenu : " \f 17a"; ) . tabs> label[ for *= "3" ] : avant ( contenu : " \f 13b"; ) . tabs> label[ for *= "4" ] : avant ( contenu : " \f 13c"; } /* Change le style des commutateurs d'onglets au survol */. onglets> étiquette : survol ( couleur : #888 ; curseur : pointeur ; ) /* Styles pour l'onglet actif */. onglets> entrée : coché + étiquette ( couleur : #555 ; bordure supérieure : 1 px solide #009933 ; bordure inférieure : 1 px solide #fff ; arrière-plan : #fff ; ) /* Activation des sections à l'aide de la pseudo-classe :checked */ #tab1:vérifié~#content-tab1, #tab2:vérifié~#content-tab2, #tab3:vérifié~#content-tab3, #tab4:vérifié~#content-tab4 ( bloc de visualisation; ) /* Supprime le texte des commutateurs * et laisse les icônes sur les petits écrans */Écran @media et (largeur maximale : 680 px) ( . tabs> label ( font-size : 0 ; ) . tabs> label: before ( margin : 0 ; font-size : 18px; ) ) /* Changer le remplissage * des commutateurs pour les petits écrans */Écran @media et (largeur maximale : 400 px) ( . tabs> label ( padding : 15px; ) )

/* Conteneur d'onglets de base */ .tabs ( largeur min : 320 px ; largeur max : 800 px ; remplissage : 0 px ; marge : 0 auto ; ) /* Styles de section de contenu */ .tabs>section ( affichage : aucun ; remplissage : 15px ; arrière-plan : #fff ; bordure : 1px solide #ddd ; ) .tabs>section>p ( marge : 0 0 5px ; hauteur de ligne : 1,5 ; couleur : #383838 ; /* attacher l'animation */ -webkit-animation -durée : 1 s ; durée de l'animation : 1 s ; -webkit-animation-fill-mode : les deux ; animation-fill-mode : les deux ; -webkit-animation-name : fadeIn ; nom de l'animation : fadeIn ; ) /* Décrire le propriétés d'opacité de l'animation */ @-webkit-keyframes fadeIn ( de ( opacité : 0 ; ) à ( opacité : 1 ; ) ) @keyframes fadeIn ( de ( opacité : 0 ; ) à ( opacité : 1 ; ) ) /* Masquage du cases à cocher * / .tabs>input ( affichage : aucun ; position : absolue ; ) /* Styles des commutateurs de tabulation */ .tabs>label ( affichage : bloc en ligne ; marge : 0 0 -1px ; remplissage : 15px 25px ; police- poids : 600 ; alignement du texte : centre ; couleur : #aaa ; bordure : 0px solide #ddd ; largeur de la bordure : 1px 1px 1px 1px ; arrière-plan : #f1f1f1 ; rayon de bordure : 3px 3px 0 0 ; ) /* Icônes de police de Font Awesome au format Unicode */ .tabs>label:before ( font-family: fontawesome; font-weight: normal; margin-right: 10px; ) .tabs>label:before ( content: " \f19a"; ) .tabs>étiquette:avant ( contenu: "\f17a"; ) .tabs>étiquette:avant ( contenu: "\f13b"; ) .tabs>étiquette:avant ( contenu: "\f13c"; ) /* Modifie le style des sélecteurs d'onglets au survol */ .tabs>label:hover ( couleur : #888 ; curseur : pointeur ; ) /* Styles pour l'onglet actif */ .tabs>input:checked+label ( couleur : # 555; border -top: 1px solid #009933; border-bottom: 1px solid #fff; background: #fff; ) /* Activation des sections à l'aide de la pseudo-classe:checked */ #tab1:checked~#content-tab1, # tab2:checked~# content-tab2, #tab3:checked~#content-tab3, #tab4:checked~#content-tab4 ( display: block; ) /* Supprimer le texte des boutons radio * et laisser les icônes sur les petits écrans */ @media screen et (max -width: 680px) ( .tabs>label ( font-size: 0; ) .tabs>label:before ( margin: 0; font-size: 18px; ) ) /* Modifier le remplissage de * commutateurs pour petits écrans */ @ media screen et (max-width : 400px) ( .tabs>label ( padding : 15px; ) )

Vous pouvez concevoir les onglets () comme bon vous semble, tout dans l'exemple n'est qu'un exemple, ma vision momentanée du produit, rien de plus. Vous pouvez connaître les valeurs Unicode des icônes de police dont vous avez besoin sur le site Web du développeur. Pour ce faire, cliquez simplement sur l'icône sélectionnée et copiez le code numérique émis, quelque chose comme ceci : \f13b .
Veuillez noter que lorsque vous réduisez la taille de la fenêtre du navigateur, les onglets s'ajustent automatiquement à la taille actuelle jusqu'à une certaine valeur (dans l'exemple 680px), après cette valeur, les titres de texte des onglets disparaissent, laissant des icônes. Cela garantit une compacité maximale de l'ensemble du bloc d'onglets ; il ne reste plus qu'à choisir les bonnes icônes qui correspondent à la signification du contenu présenté à l'intérieur des onglets.

Regardez un exemple en direct du fonctionnement des onglets, téléchargez les sources, expérimentez les paramètres et créez, créez, créez...

Si vous en avez assez de travailler avec des modèles en anglais et rêvez d'avoir la chance d'utiliser des modèles en russe, alors vous serez certainement satisfait d'une excellente nouvelle. Le marché TemplateMonster propose désormais les solutions prêtes à l'emploi dont vous avez besoin. Oui, oui, sur le site vous pouvez désormais trouver les meilleurs. Les modèles localisés sont exactement ce dont vous avez besoin si vous souhaitez créer votre projet en ligne en un minimum de temps. Outre le fait que les textes des modèles ont été rédigés manuellement, ils disposent de tous les outils nécessaires pour créer un site Internet professionnel.

Avec tout mon respect, Andrew

Dans la continuité du post précédent sur le style des éléments de sélection, j'aimerais vous expliquer comment le faire complètement onglets adaptatifs sans en utilisant javascript , positionnement absolu et hacks de liens.

Pour commencer, je voudrais dire que je n'appelle pas à abandonner le javascript au profit du CSS uniquement, je ne présenterai ci-dessous qu'une des manières d'implémenter les onglets. Il existe de nombreuses situations où cette approche ne vous conviendra pas et où vous ne pourrez pas vous passer de JS, mais ce n'est pas le cas maintenant.

Comprenons ce que nous voulons voir à la suite du travail et quelles exigences nous mettons en avant pour cela :

  1. Travaillez sans JavaScript,
  2. Il n'y a aucun rapport avec le nombre d'onglets (on peut utiliser un widget par différentes pages avec un contenu différent à l'intérieur),
  3. Adaptabilité,
  4. Compatibilité maximale entre navigateurs et multiplateformes,
  5. L'interface utilisateur la plus pratique et la plus compréhensible,
  6. Il n'y a aucune restriction sur le contenu interne des onglets, qu'il s'agisse de texte, de contenu multimédia ou de mise en page à l'intérieur de l'onglet.

Visuellement, cela devrait ressembler à ceci :

Avant d'afficher votre option onglets sans JS, je voudrais parler de certaines options de mise en œuvre que j'ai trouvées dans le processus de résolution de ce problème.

Première option

Soit la personne qui a proposé cette méthode voulait clairement se moquer des utilisateurs, soit il fait partie des visiteurs de Reddit qui ont créé ces contrôles de volume très « pratiques ». Cette approche me rend nerveux.

L'essence de la méthode est la suivante :

Les liens sont utilisés comme en-têtes (les boutons eux-mêmes) des onglets, dans l'attribut href, qui contient l'identifiant de l'onglet correspondant - un div ou tout autre élément. L'onglet actif est sélectionné à l'aide de la pseudo-class:target .

Cela fonctionne comme ceci :

Comme vous l'avez peut-être remarqué, nous rencontrons quelques problèmes avec cette méthode :

  1. Lorsque nous cliquons sur l'onglet, la page commence à sauter, car le navigateur nous envoie là où ce lien mène. Bien sûr, cela peut être évité, mais sans JS, il n'y a aucun moyen.
  2. Le titre de l'onglet actif n'est pas mis en surbrillance ; cela peut être fait, mais c'est extrêmement problématique.
  3. Au départ, il n’y a pas d’onglets actifs (puisque nous n’avons pas encore cliqué sur les liens) et nous devons recourir à un hack et rendre le troisième onglet actif ; sélectionner le premier de cette manière ne fonctionnera pas.
  4. Adaptabilité très controversée : oui, les onglets sont réorganisés pour nouvelle ligne lorsque l’écran se rétrécit et que le contenu de l’onglet se rétrécit avec lui, mais cela n’a pas l’air très joli. Ce problème peut être résolu par les requêtes multimédias, mais étant donné que nous n'allons pas être liés au nombre d'onglets, le problème persistera sur certaines tailles d'affichage.

Nous tirons une conclusion justifiée : cette méthode ne nous convient pas puisqu'elle ne satisfera pas la plupart des exigences. La mise en œuvre est terrible et je ne recommanderais pas de l'utiliser.

Deuxième option

Cette méthode créer des onglets sans JavaScript est déjà plus pratique, même si son application pose également quelques problèmes. L'essence de la méthode est la suivante : les éléments checkbox et label sont utilisés pour les titres des onglets, et en utilisant la pseudo-class:checked et un autre élément div, nous pouvons afficher le contenu de l'onglet actif uniquement et masquer tous les autres :

Entrée de l'onglet-wrapper : vérifié + étiquette + .tab-item (affichage : bloc ;)

Entrée du wrapper de tabulation : coché + label + . onglet - élément ( affichage : bloc ; )

Voici comment cela fonctionne:

Comme vous l'avez peut-être remarqué, dans cet exemple, nous utilisons position : absolue ; afin de placer les titres des onglets en haut et le contenu des onglets en bas. Cela crée certains problèmes :

  1. Complètement non adaptable. Lors du changement de taille d'écran, les onglets tombent et leur contenu les recouvre. Cela peut être corrigé : faites un défilement horizontal des onglets, cette solution a sa place, mais je ne l'aime pas trop.
  2. Puisque nous utilisons le positionnement absolu pour afficher le contenu des onglets, nous devrons spécifier une hauteur fixe des onglets, sinon ils chevaucheront le contenu qui se trouve en dessous (vu dans l'exemple), ce qui signifie que nous ne pouvons pas utiliser cette approche avec un nombre d'onglets jusqu'alors inconnu.

Bien entendu, dans certains cas, cette méthode peut être utilisée, par exemple lorsque vous connaissez à l'avance le nombre d'onglets et la quantité de contenu qu'ils contiennent. Mais nous recherchons une solution universelle, cette approche n’est donc pas applicable dans notre cas.

Solution

La troisième option, qui constitue également la solution, est une modification de la deuxième méthode. Cela fonctionne exactement de la même manière, mais nous n'utiliserons pas le positionnement absolu ni la propriété float pour les titres.

DANS cette méthode Nous utilisons la désormais à la mode flexbox pour placer les onglets et leur contenu. La beauté de flexbox ici est que nous pouvons désigner les éléments à afficher en premier et lesquels à la fin. Cela peut être fait en utilisant la propriété order : 1; , qui est par défaut zéro.

L'adaptabilité des onglets est également obtenue grâce à la propriété flex flex-grow : 1 ; , qui permet aux onglets de s'étendre sur toute la largeur du contenu, nous n'avons donc pas à nous soucier d'afficher un nombre différent d'onglets. Nous pouvons également placer du contenu de n'importe quelle taille dans chaque onglet, cela n'affectera pas l'affichage du contenu après eux.

Cette approche fonctionne dans tous navigateurs modernes, y compris les mobiles. Parmi les propriétés inhabituelles pour beaucoup, seule Flexbox est utilisée et elle est largement prise en charge depuis longtemps. DANS Navigateurs FireFox, Chrome, Safari et Opera, je n'ai trouvé aucun problème avec le fonctionnement des onglets.

Vous pouvez vérifier cette approche sur jsfiddle ou sur vos propres projets. Je serais heureux de voir d'autres propositions de solutions à ce problème dans les commentaires.

gastrogourou 2017