Maison >interface Web >tutoriel CSS >Obtenir des onglets bootstrap pour jouer bien avec la maçonnerie
Points clés
Bootstrap est l'un des cadres frontaux open source les plus adoptés. Incluez Bootstrap dans votre projet et vous pourrez créer immédiatement des pages Web réactives. Si vous essayez d'utiliser de la maçonnerie avec le widget OPM Bootstrap (l'un des nombreux composants JavaScript que Bootstrap fournit), vous rencontrerez très probablement une sorte de comportement ennuyeux.
Sur le site Web de la maçonnerie, nous lisons que la maçonnerie est…
Une bibliothèque de mise en page JavaScript. Il fonctionne en plaçant des éléments dans la position optimale en fonction de l'espace vertical disponible, un peu comme un maçon construisant une pierre sur un mur.
J'ai rencontré ce problème et cet article se concentre sur l'endroit où se situe le problème et les solutions que vous pouvez prendre.
Explication détaillée de l'onglet bootstrap
Le composant Tab Bootstrap contient deux pièces liées à la clé: l'élément de navigation de l'onglet et plusieurs panneaux de contenu. Lorsque la page se charge, le premier panneau applique la classe .active. Cela rend le panneau visible par défaut. Cette classe est utilisée via JavaScript pour basculer la visibilité du panneau via l'événement de contact de la liaison de navigation TAB: si .active existe, le panneau est visible, sinon le panneau est caché.
Si vous avez du contenu Web qui est le mieux rendu dans des blocs séparés plutôt que tous les pressés en un seul endroit, le composant de l'onglet bootstrap peut être utile.
Pourquoi choisir la maçonnerie?
Dans certains cas, le contenu de chaque panneau convient à l'affichage dans une disposition de grille réactive. Par exemple, une gamme de projets de produits, de service et de portefeuille est des types de contenu qui peuvent être affichés dans un format de grille.
Cependant, si les hauteurs des cellules de la grille ne sont pas égales, ce qui suit peut se produire.
Il y a un grand écart entre les deux lignes de contenu et la disposition semble endommagée.
Bootstrap résout le problème de monospace avec le nouveau composant de carte basé sur Flexbox. Le simple fait d'ajouter la classe de pont de carte à un ensemble de composants de carte est suffisant pour implémenter des colonnes monospatiales.
Si vous souhaitez que la longueur de la carte soit incohérente, vous pouvez utiliser la disposition multi-colonnes CSS3. (Après tout, c'est assez bon dans l'ensemble, même avec certains problèmes de compatibilité du navigateur.) C'est la base des nouvelles options de colonne de carte disponibles avec les composants de la carte. Cependant, si vous aimez toujours les belles animations hors de la boîte de la bibliothèque JavaScript de maçonnerie et sa compatibilité approfondie du navigateur, JavaScript est toujours une option viable dans ce cas.
Définissez la page de démonstration
Démarrer une page de démonstration aide à illustrer que l'intégration de l'onglet bootstrap avec la maçonnerie n'est pas aussi simple que prévu.
La page de démonstration de cet article est basée sur les modèles de démarrage fournis sur le site Bootstrap.
Ce qui suit est le cadre marqué par le composant de l'onglet bootstrap:
<code class="language-html"><ul class="nav nav-tabs" id="myTab" role="tablist"> <li class="nav-item"> <a class="nav-link active" id="home-tab" data-toggle="tab" href="https://www.php.cn/link/6fbb2c2ee065c77a193d0057aab8fa11" role="tab" aria-controls="home" aria-selected="true">Home</a> </li> <li class="nav-item"> <a class="nav-link" id="profile-tab" data-toggle="tab" href="https://www.php.cn/link/0bd97cb91b8d57dad18542081fb8f2b1" role="tab" aria-controls="profile" aria-selected="false">Profile</a> </li> <li class="nav-item"> <a class="nav-link" id="contact-tab" data-toggle="tab" href="https://www.php.cn/link/18fb150bb65a5825c83969a59f3febc1" role="tab" aria-controls="contact" aria-selected="false">Contact</a> </li> </ul></code>
NAV La classe NAV-TABS est chargée de donner aux kaki une apparence unique. La valeur de l'attribut HREF forme la relation entre un seul onglet et son contenu d'onglet correspondant. Par exemple, une valeur href de https://www.php.cn/link/6fbb2c2ee065c77a193d0057aab8fa11 établira une relation avec le contenu de l'onglet dans la valeur ID de la maison: cliquer sur l'onglet spécifique affichera le contenu de la div. .
De plus, veuillez noter comment bootstrap se concentre sur les propriétés d'accessibilité telles que le rôle, les contrôles Aria, etc.
Le code d'extrait de code suivant illustre la structure du contenu de l'onglet:
<code class="language-html"><div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab"> <h3>Tab 1 Content</h3> <div class="card-group"> <div class="card"> <img src="https://img.php.cn/" alt="Getting Bootstrap Tabs to Play Nice with Masonry "> <div class="card-body"> <h5 class="card-title">Card title</h5> <p class="card-text">Card text here.</p> <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p> </div> </div> <div class="card"> </div> <div class="card"> </div> </div> </div></code>
Ajoutez simplement une structure similaire à chaque partie de contenu de l'onglet correspondant à l'élément tabulation écrit ci-dessus.
Pour le code complet, consultez la démo de codepen.
Ajouter la bibliothèque de maçonnerie
Vous pouvez télécharger la maçonnerie à partir du site officiel en cliquant sur le bouton "Télécharger la maçonnerie.pkgd.min.js".
Pour éviter les problèmes de mise en page, l'auteur de la bibliothèque recommande d'utiliser la maçonnerie avec le plugin à charge d'images.
La maçonnerie ne nécessite pas une bibliothèque jQuery pour fonctionner. Cependant, comme le composant JavaScript bootstrap utilise déjà jQuery, je vais faciliter la vie et initialiser la maçonnerie à JQuery Way.
Ce qui suit est un extrait de l'initialisation de la maçonnerie à l'aide de jQuery et d'images téléchargées:
<code class="language-javascript">var $container = $('.masonry-container'); $container.imagesLoaded( function () { $container.masonry({ columnWidth: '.card', itemSelector: '.card' }); }); </code>
Le code ci-dessus cache le div qui enveloppe tous les éléments de la carte dans une variable nommée $ conteneur.
Ensuite, utilisez quelques options recommandées pour initialiser la maçonnerie sur $ conteneur. L'option de colonne indique la largeur de la colonne de grille horizontale. Ici, il est défini sur la largeur d'un seul élément de carte en utilisant son nom de classe. L'option ItemSelector indique quels éléments enfants à utiliser comme éléments de projet. Ici, il est également défini comme un seul élément de carte.
Il est temps de tester le code.
Oh! Quel est le problème avec la cachette du panneau?
Le code ci-dessus fonctionne bien sur les pages Web qui n'utilisent pas l'onglet bootstrap. Cependant, dans ce cas, vous vous rendrez vite compte que quelque chose d'étrange va se produire.
Tout d'abord, il a l'air plutôt bien car la grille à l'intérieur du panneau d'onglet actif par défaut s'affiche correctement:
Cependant, si vous cliquez sur le lien de navigation à l'onglet pour afficher le contenu du panneau caché, ce qui suit se produit:
La visualisation du code source révèlera que la maçonnerie a été licenciée comme prévu, mais la position de chaque élément est mal calculée: les éléments de la grille sont tous empilés comme une pile de cartes.
et plus que cela. Le redimensionnement de la fenêtre du navigateur provoquera correctement les éléments de la grille.
Correction de l'erreur de mise en page
Étant donné que les erreurs de mise en page inattendues deviennent apparentes après avoir cliqué sur le lien de navigation à l'onglet, examinons de plus près les événements déclenchés par l'onglet bootstrap.
La liste des événements est très courte. C'est ça.
Étant donné que la mise en page de la maçonnerie devient désordonnée après l'affichage de l'onglet, sélectionnez l'événement show.bs.tab. Voici le code que vous pouvez le mettre directement sous l'extrait de code précédent:
<code class="language-html"><ul class="nav nav-tabs" id="myTab" role="tablist"> <li class="nav-item"> <a class="nav-link active" id="home-tab" data-toggle="tab" href="https://www.php.cn/link/6fbb2c2ee065c77a193d0057aab8fa11" role="tab" aria-controls="home" aria-selected="true">Home</a> </li> <li class="nav-item"> <a class="nav-link" id="profile-tab" data-toggle="tab" href="https://www.php.cn/link/0bd97cb91b8d57dad18542081fb8f2b1" role="tab" aria-controls="profile" aria-selected="false">Profile</a> </li> <li class="nav-item"> <a class="nav-link" id="contact-tab" data-toggle="tab" href="https://www.php.cn/link/18fb150bb65a5825c83969a59f3febc1" role="tab" aria-controls="contact" aria-selected="false">Contact</a> </li> </ul></code>
Ce qui suit est ce qui se passe dans le code ci-dessus:
La fonctionjQuery .Each () boucles via chaque lien de navigation et écoute pour l'événement affiché.bs.tab. Lorsque l'événement se déclenche, le panneau devient visible et la maçonnerie est réinitialisée après le chargement des images.
Code de test
Si vous avez suivi, commencez votre démo dans votre navigateur ou essayez la démo de codepen ci-dessous pour voir les résultats:
lien de démonstration de codepen
Cliquez sur le lien de navigation Tab et notez comment le projet Grid s'adapte uniformément à chaque panneau de contenu cette fois. Le redimensionnement du navigateur fera que le projet se repositionne correctement avec de beaux effets d'animation.
c'est tout, le travail est fait!
Conclusion
Dans cet article, j'ai démontré comment intégrer le composant Tab Bootstrap avec la bibliothèque JavaScript Masonry.
Les deux scripts sont faciles à utiliser et puissants. Cependant, assemblez-les et vous affronterez des erreurs de mise en page ennuyeuses qui affectent les onglets cachés. Comme indiqué ci-dessus, l'astuce consiste à réinitialiser la bibliothèque de maçonnerie une fois que chaque panneau est visible.
Avec cette solution, la création d'une grande disposition des carreaux sera un jeu d'enfant.
Je vous souhaite une bonne utilisation de Bootstrap!
Onglet bootstrap et FAQ de la maçonnerie (FAQ)
(La partie FAQ doit être insérée ici, le contenu est cohérent avec la partie FAQ d'origine, et il sera légèrement réécrit au besoin pour garder le sémantique inchangé)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!